public class ListPopupWindow
extends java.lang.Object
ListPopupWindow contains a number of tricky behaviors surrounding positioning, scrolling parents to fit the dropdown, interacting sanely with the IME if present, and others.
android.widget.AutoCompleteTextView
,
android.widget.Spinner
| Modifier and Type | Field and Description |
|---|---|
static int |
FILL_PARENT
Alias for
ViewGroup.LayoutParams#FILL_PARENT . |
static int |
INPUT_METHOD_FROM_FOCUSABLE
Mode for
setInputMethodMode(int) : the requirements for the input method should be
based on the focusability of the popup. |
static int |
INPUT_METHOD_NEEDED
Mode for
setInputMethodMode(int) : this popup always needs to work with an input
method, regardless of whether it is focusable. |
static int |
INPUT_METHOD_NOT_NEEDED
Mode for
setInputMethodMode(int) : this popup never needs to work with an input
method, regardless of whether it is focusable. |
static int |
POSITION_PROMPT_ABOVE
The provided prompt view should appear above list content.
|
static int |
POSITION_PROMPT_BELOW
The provided prompt view should appear below list content.
|
static int |
WRAP_CONTENT
Alias for
ViewGroup.LayoutParams#WRAP_CONTENT . |
| Constructor and Description |
|---|
ListPopupWindow(Context context)
Create a new, empty popup window capable of displaying items from a ListAdapter.
|
ListPopupWindow(Context context,
AttributeSet attrs)
Create a new, empty popup window capable of displaying items from a ListAdapter.
|
ListPopupWindow(Context context,
AttributeSet attrs,
int defStyleAttr)
Create a new, empty popup window capable of displaying items from a ListAdapter.
|
| Modifier and Type | Method and Description |
|---|---|
void |
clearListSelection()
Clear any current list selection.
|
void |
dismiss()
Dismiss the popup window.
|
View |
getAnchorView()
Returns the view that will be used to anchor this popup.
|
int |
getAnimationStyle()
Returns the animation style that will be used when the popup window is shown or dismissed.
|
Drawable |
getBackground() |
int |
getHeight() |
int |
getHorizontalOffset() |
int |
getInputMethodMode()
Return the current value in
setInputMethodMode(int) . |
ListView |
getListView() |
int |
getMaxAvailableHeight(View anchor,
int yOffset,
boolean ignoreBottomDecorations)
Copied from PopupWindow.java of JB
Returns the maximum height that is available for the popup to be completely shown, optionally
ignoring any bottom decorations such as the input method.
|
int |
getPromptPosition() |
java.lang.Object |
getSelectedItem() |
long |
getSelectedItemId() |
int |
getSelectedItemPosition() |
View |
getSelectedView() |
int |
getSoftInputMode()
Returns the current value in
setSoftInputMode(int) . |
int |
getVerticalOffset() |
int |
getWidth() |
boolean |
isDropDownAlwaysVisible() |
boolean |
isInputMethodNotNeeded() |
boolean |
isModal()
Returns whether the popup window will be modal when shown.
|
boolean |
isShowing() |
boolean |
onKeyDown(int keyCode,
KeyEvent event)
Filter key down events.
|
boolean |
onKeyUp(int keyCode,
KeyEvent event)
Filter key down events.
|
boolean |
performItemClick(int position)
Perform an item click operation on the specified list adapter position.
|
void |
postShow()
Post a
show() call to the UI thread. |
void |
setAdapter(ListAdapter adapter)
Sets the adapter that provides the data and the views to represent the data in this popup
window.
|
void |
setAnchorView(View anchor)
Sets the popup's anchor view.
|
void |
setAnimationStyle(int animationStyle)
Set an animation style to use when the popup window is shown or dismissed.
|
void |
setBackgroundDrawable(Drawable d)
Sets a drawable to be the background for the popup window.
|
void |
setContentWidth(int width)
Sets the width of the popup window by the size of its content.
|
void |
setDropDownAlwaysVisible(boolean dropDownAlwaysVisible)
Sets whether the drop-down should remain visible under certain conditions.
|
void |
setForceIgnoreOutsideTouch(boolean forceIgnoreOutsideTouch)
Forces outside touches to be ignored.
|
void |
setHeight(int height)
Sets the height of the popup window in pixels.
|
void |
setHorizontalOffset(int offset)
Set the horizontal offset of this popup from its anchor view in pixels.
|
void |
setInputMethodMode(int mode)
Control how the popup operates with an input method: one of
INPUT_METHOD_FROM_FOCUSABLE , INPUT_METHOD_NEEDED , or INPUT_METHOD_NOT_NEEDED . |
void |
setListSelector(Drawable selector)
Sets a drawable to use as the list item selector.
|
void |
setModal(boolean modal)
Set whether this window should be modal when shown.
|
void |
setOnDismissListener(PopupWindow.OnDismissListener listener)
Set a listener to receive a callback when the popup is dismissed.
|
void |
setOnItemClickListener(AdapterView.OnItemClickListener clickListener)
Sets a listener to receive events when a list item is clicked.
|
void |
setOnItemSelectedListener(AdapterView.OnItemSelectedListener selectedListener)
Sets a listener to receive events when a list item is selected.
|
void |
setPromptPosition(int position)
Set where the optional prompt view should appear.
|
void |
setPromptView(View prompt)
Set a view to act as a user prompt for this popup window.
|
void |
setSelection(int position)
Set the selected position of the list.
|
void |
setSoftInputMode(int mode)
Sets the operating mode for the soft input area.
|
void |
setVerticalOffset(int offset)
Set the vertical offset of this popup from its anchor view in pixels.
|
void |
setWidth(int width)
Sets the width of the popup window in pixels.
|
void |
show()
Show the popup list.
|
public static final int POSITION_PROMPT_ABOVE
public static final int POSITION_PROMPT_BELOW
public static final int FILL_PARENT
ViewGroup.LayoutParams#FILL_PARENT
. If used to specify a popup width, the
popup will match the width of the anchor view. If used to specify a popup height, the popup
will fill available space.public static final int WRAP_CONTENT
ViewGroup.LayoutParams#WRAP_CONTENT
. If used to specify a popup width, the
popup will use the width of its content.public static final int INPUT_METHOD_FROM_FOCUSABLE
setInputMethodMode(int)
: the requirements for the input method should be
based on the focusability of the popup. That is if it is focusable than it needs to work
with the input method, else it doesn't.public static final int INPUT_METHOD_NEEDED
setInputMethodMode(int)
: this popup always needs to work with an input
method, regardless of whether it is focusable. This means that it will always be displayed
so that the user can also operate the input method while it is shown.public static final int INPUT_METHOD_NOT_NEEDED
setInputMethodMode(int)
: this popup never needs to work with an input
method, regardless of whether it is focusable. This means that it will always be displayed
to use as much space on the screen as needed, regardless of whether this covers the input
method.public ListPopupWindow(Context context)
setBackgroundDrawable(Drawable)
.context
- Context used for contained views.public ListPopupWindow(Context context, AttributeSet attrs)
setBackgroundDrawable(Drawable)
.context
- Context used for contained views.attrs
- Attributes from inflating parent views used to style the popup.public ListPopupWindow(Context context, AttributeSet attrs, int defStyleAttr)
setBackgroundDrawable(Drawable)
.context
- Context used for contained views.attrs
- Attributes from inflating parent views used to style the popup.defStyleAttr
- Default style attribute to use for popup content.public void setAdapter(ListAdapter adapter)
adapter
- The adapter to use to create this window's content.public void setPromptPosition(int position)
POSITION_PROMPT_ABOVE
.position
- A position constant declaring where the prompt should be displayed.POSITION_PROMPT_ABOVE
,
POSITION_PROMPT_BELOW
public int getPromptPosition()
POSITION_PROMPT_ABOVE
,
POSITION_PROMPT_BELOW
public void setModal(boolean modal)
If a popup window is modal, it will receive all touch and key input. If the user touches outside the popup window's content area the popup window will be dismissed.
modal
- true
if the popup window should be modal, false
otherwise.public boolean isModal()
true
if the popup window will be modal, false
otherwise.public void setForceIgnoreOutsideTouch(boolean forceIgnoreOutsideTouch)
isDropDownAlwaysVisible()
is
false, we allow outside touch to dismiss the dropdown. If this is set to true, then we ignore
outside touch even when the drop down is not set to always visible.public void setDropDownAlwaysVisible(boolean dropDownAlwaysVisible)
getAnchorView()
regardless of the
size or content of the list. getBackground()
will fill any space that is not used
by the list.dropDownAlwaysVisible
- Whether to keep the drop-down visible.public boolean isDropDownAlwaysVisible()
public void setSoftInputMode(int mode)
mode
- The desired mode, see android.view.WindowManager.LayoutParams#softInputMode
for the full listandroid.view.WindowManager.LayoutParams#softInputMode
,
getSoftInputMode()
public int getSoftInputMode()
setSoftInputMode(int)
.setSoftInputMode(int)
,
android.view.WindowManager.LayoutParams#softInputMode
public void setListSelector(Drawable selector)
selector
- List selector drawable to use in the popup.public Drawable getBackground()
public void setBackgroundDrawable(Drawable d)
d
- A drawable to set as the background.public void setAnimationStyle(int animationStyle)
animationStyle
- Animation style to use.public int getAnimationStyle()
public View getAnchorView()
public void setAnchorView(View anchor)
anchor
- The view to use as an anchor.public int getHorizontalOffset()
public void setHorizontalOffset(int offset)
offset
- The horizontal offset of the popup from its anchor.public int getVerticalOffset()
public void setVerticalOffset(int offset)
offset
- The vertical offset of the popup from its anchor.public int getWidth()
public void setWidth(int width)
FILL_PARENT
or WRAP_CONTENT
.width
- Width of the popup window.public void setContentWidth(int width)
width
- Desired width of content in pixels.public int getHeight()
public void setHeight(int height)
FILL_PARENT
.height
- Height of the popup window.public void setOnItemClickListener(AdapterView.OnItemClickListener clickListener)
clickListener
- Listener to registerListView#setOnItemClickListener(android.widget.AdapterView.OnItemClickListener)
public void setOnItemSelectedListener(AdapterView.OnItemSelectedListener selectedListener)
selectedListener
- Listener to register.ListView#setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener)
public void setPromptView(View prompt)
setPromptPosition(int)
.prompt
- View to use as an informational prompt.public void postShow()
show()
call to the UI thread.public void show()
public void dismiss()
public void setOnDismissListener(PopupWindow.OnDismissListener listener)
listener
- Listener that will be notified when the popup is dismissed.public void setInputMethodMode(int mode)
INPUT_METHOD_FROM_FOCUSABLE
, INPUT_METHOD_NEEDED
, or INPUT_METHOD_NOT_NEEDED
.
If the popup is showing, calling this method will take effect only the next time the popup
is shown or through a manual call to the show()
method.
getInputMethodMode()
,
show()
public int getInputMethodMode()
setInputMethodMode(int)
.setInputMethodMode(int)
public void setSelection(int position)
isShowing()
== true
.position
- List position to set as selected.public void clearListSelection()
isShowing()
== true
.public boolean isShowing()
true
if the popup is currently showing, false
otherwise.public boolean isInputMethodNotNeeded()
true
if this popup is configured to assume the user does not need to interact
with the IME while it is showing, false
otherwise.public boolean performItemClick(int position)
position
- Adapter position for performing the clickpublic java.lang.Object getSelectedItem()
public int getSelectedItemPosition()
ListView#INVALID_POSITION
if
isShowing()
== false
.ListView#getSelectedItemPosition()
public long getSelectedItemId()
ListView#INVALID_ROW_ID
if isShowing()
== false
.ListView#getSelectedItemId()
public View getSelectedView()
isShowing()
== false
.ListView#getSelectedView()
public ListView getListView()
ListView
displayed within the popup window. Only valid when isShowing()
== true
.public boolean onKeyDown(int keyCode, KeyEvent event)
keyCode
- keyCode param passed to the host view's onKeyDownevent
- event param passed to the host view's onKeyDownsetModal(boolean)
public boolean onKeyUp(int keyCode, KeyEvent event)
keyCode
- keyCode param passed to the host view's onKeyUpevent
- event param passed to the host view's onKeyUpsetModal(boolean)
public int getMaxAvailableHeight(View anchor, int yOffset, boolean ignoreBottomDecorations)
anchor
- The view on which the popup window must be anchored.yOffset
- y offset from the view's bottom edgeignoreBottomDecorations
- if true, the height returned will be all the way to the bottom
of the display, ignoring any bottom decorations


/*!
* @class EdgeStump
*
* @headerfile <seqan/graph_types.h>
*
* @brief Encapsulate information for a single edge.
*
* @signature template <typename TCargo, bool IS_LIST, bool STORE_SOURCE, bool
* STORE_ID, typename TSpec> class EdgeStump;
*
* @tparam TCargo The cargo type of an edge. The cargo can be used to store
* arbitrary information with an edge or be <tt>void</tt>.
* Default: <tt>void</tt>.
* @tparam IS_LIST A bool value that indicates whether it is a list or not.
* Default: <tt>true</tt>.
* @tparam STORE_SOURCE A bool value that indicates whether the source is stored
* in the EdgeStump or not. Default: <tt>false</tt>.
* @tparam STORE_ID A bool value that indictes whether the id is tored in the
* EdgeStump or not. Note: Without edge ids, external property
* maps do not work for edges! Default: <tt>true</tt>.
* @tparam TSpec The specializing type. Default: <tt>Default</tt>.
*
* The EdgeStump either represents a list entry in the adjacency of a graph or
* an array field if edges are stored in an array.
*
* @section Remarks
*
* The default EdgeStump in all graph types does not consider a cargo. However,
* ni default usage every graph does store an edge id. Edge ids are used to
* append additional properties to edges with the help of external property
* maps.
*
* @fn EdgeStump#getCargo
*
* @brief Return cargo for an EdgeStump.
*
* @signature TCargo getCargo(stump);
*
* @param[in] stump Pointer to the EdgeStump to query for its cargo.
*
* @return TCargo Reference to the cargo of the EdgeStump.
*
* @fn EdgeStump#cargo
*
* @brief Return cargo for an EdgeStump.
*
* @signature TCargo cargo(stump);
*
* @param[in] stump Pointer to the EdgeStump to query for its cargo.
*
* @return TCargo Reference to the cargo of the EdgeStump.
*
* @fn EdgeStump#assignCargo
*
* @brief Assigns a new cargo to the edge.
*
* @signature void assignCargo(stump, cargo);
*
* @param[in] stump Pointer to the EdgeStump to set the cargo of.
*
* @return TCargo Reference to the cargo of the EdgeStump.
*
* Calling assignCargo on EdgeStump objects without cargo does nothing.
*
* @fn EdgeStump#assignTarget
*
* @brief Assigns a target vertex to an edge.
*
* @signature void assignTarget(stump, t);
*
* @param[in,out] stump Pointer to the EdgeStump.
* @param[in] t Vertex descriptor to assign as the target.
*
* @fn EdgeStump#target
*
* @brief Access to the target of an EdgeStump.
*
* @signature TVertexDescriptor target(stump);
*
* @param[in] stump Pointer to the EdgeStump to access the target of.
*
* @return TVertexDescriptor Reference to the target vertex descriptor of stump.
*
* @fn EdgeStump#getTarget
*
* @brief Get method for the target.
*
* @signature TVertexDescriptor getTarget(stump);
*
* @param[in] stump Pointer to the EdgeStump to get the target of.
*
* @return TVertexDescriptor The vetex descriptor stored in stump.
*
* @fn EdgeStump#assignSource
*
* @brief Assigns a source vertex to an edge.
*
* @signature void assignSource(stump, t);
*
* @param[in,out] stump Pointer to the EdgeStump.
* @param[in] t Vertex descriptor to assign as the source.
*
* @section Remarks
*
* A source vertex is not required in an edge stump. However, EdgeStump objects
* can be configured to contain a source vertex, as in undirected graphs.
*
* @fn EdgeStump#source
*
* @brief Access to the source of an EdgeStump.
*
* @signature TVertexDescriptor source(stump);
*
* @param[in] stump Pointer to the EdgeStump to access the source of.
*
* @return TVertexDescriptor Reference to the source vertex descriptor of stump.
*
* @section Remarks
*
* A source vertex is not required in an edge stump. However, EdgeStump objects
* can be configured to contain a source vertex, as in undirected graphs.
*
* @fn EdgeStump#getSource
*
* @brief Get method for the source.
*
* @signature TVertexDescriptor getSource(stump);
*
* @param[in] stump Pointer to the EdgeStump to get the source of.
*
* @return TVertexDescriptor The vetex descriptor stored in stump.
*
* @section Remarks
*
* A source vertex is not required in an edge stump. However, EdgeStump objects
* can be configured to contain a source vertex, as in undirected graphs.
*
* @fn EdgeStump#assignNextT
*
* @brief Assigns another EdgeStump to the next target pointer.
*
* @signature void assignNextT(es, es2);
*
* @param[in,out] es Pointer to the EdgeStump.
* @param[in] es2 Pointer to the following EdgeStump.
*
* @fn EdgeStump#nextT
*
* @brief Accesses the next target pointer.
*
* @signature TEdgeStump nextT(es);
*
* @param[in] es Pointer to the EdgeStump.
*
* @return TEdgeStump Reference to the next target pointer.
*
* @fn EdgeStump#getNextT
*
* @brief Get method for the next target pointer.
*
* @signature TEdgeStump getNextT(es);
*
* @param[in] es Pointer to the EdgeStump.
*
* @return TEdgeStump Reference to the next target pointer.
*
* @fn EdgeStump#assignNextS
*
* @brief Assigns another EdgeStump to the next source pointer.
*
* @signature void assignNextS(es, es2);
*
* @param[in,out] es Pointer to the EdgeStump.
* @param[in] es2 Pointer to the following EdgeStump.
*
* Edge Stumps can be configured to have no source. In this case, there is no
* next source pointer.
*
* @fn EdgeStump#nextS
*
* @brief Accesses the next source pointer.
*
* @signature TEdgeStump nextS(es);
*
* @param[in,out] es Pointer to the EdgeStump.
*
* @return Reference to the next source pointer.
*
* Edge Stumps can be configured to have no source. In this case, there is no
* next source pointer.
*
* @fn EdgeStump#getNextS
*
* @brief Accesses the next source pointer.
*
* @signature TEdgeStump getNextS(es);
*
* @param[in,out] es Pointer to the EdgeStump.
*
* @return Reference to the next source pointer.
*
* Edge Stumps can be configured to have no source. In this case, there is no
* next source pointer.
*/


Account Created Successfully
Your login id and Password has been mailed you.
My Hospital
One account for all My Hospital services
Please note:
Fields marked with
*
are compulsary to fill.
Primary e-mail address:
*
Re-type e-mail address:
*
Legal First Name:
*
Legal Middle Name:
Legal Last Name:
*
Date of Birth:
*
Month:
January
February
March
April
May
June
July
August
September
October
November
December
Day:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Year:
2019
2018
2017
2016
2015
2014
2013
2012
2011
2010
2009
2008
2007
2006
2005
2004
2003
2002
  Agree all terms and conditions!
Create Account


Court postpones journalist Kabendera's hearing for eighth time
by REUTERSIn Summary
- Police arrested Dar es Salaam-based journalist Erick Kabendera in July and he was charged in August with leading organized crime, failing to pay taxes and money laundering.
- His lawyers and rights groups say the case is politically motivated.
Dar es Salaam,
A Tanzanian court on Wednesday postponed the hearing for the eighth time of a prominent Tanzanian journalist arrested in July.
Police arrested Dar es Salaam-based journalist Erick Kabendera in July and he was charged in August with leading organized crime, failing to pay taxes and money laundering.
Mr Kabendera’s lawyers reject the charges. His lawyers and rights groups say the case is politically motivated.
Mr Kabendera’s trial has not begun. At each of the eight hearings since August, prosecutors have told the court that investigations were not complete.
Last month, Kabendera’s lawyer Jebra Kambole told the court that he is pursuing a plea bargain. On Wednesday, Mr Kambole told the court that the process had not reached a conclusion.
Related Stories
-
Court postpones hearing for seventh time for Kabendera
-
TZ backsliding on freedoms under Magufuli - HRW
-
Kabendera's case postponed again
-
Kabendera's lawyer seeks plea bargain
Advertisement
Rights groups say press freedom has nosedived since President John Magufuli took office in 2015. On his watch the government has shut newspapers and websites as well as arrested opposition leaders and restricted political rallies.
The government has rejected criticism that it is muzzling the media.


CSS for TV classification rating icons!
View Project Download
Disable Bootstrap Theme
p Rating Rating Rating Rating Rating Rating
p.lead Rating Rating Rating Rating Rating Rating


| <!-- --> |
Annotations to HTML, invisible unless inspecting the element. |
n/a |
container |
| <!DOCTYPE> |
States the type of document to browsers and other developers. Allows better parsing of code. |
n/a |
empty |
| <a> |
Creates a hyperlink for in line of text, linking between documents and websites. |
inline |
container |
| <article> |
Creates a standalone block of content. |
block |
container |
| <aside> |
Creates an area of content not related to the core body of the page. |
block |
container |
| <body> |
Establishes a wrapper of a HTML document's body. |
n/a* |
container |
| <br/> |
Creates a single line break in a block of text. |
inline |
empty |
| <dd> |
Used to describe a term located in a description list. |
block |
container |
| <div> |
A general unspecified container. |
block |
container |
| <dl> |
Creates a list with terms and their descriptions. |
block |
container |
| <dt> |
Used to define the term from a description list. |
block |
container |
| <em> |
Adds emphasis to a line of text. Indicated by bolding and reader voice inflection. |
inline |
container |
| <fieldset> |
Groups related elements in a form. |
block |
container |
| <figcaption> |
Creates a caption for a figure. |
block |
container |
| <figure> |
Used to specify self-contained content, like illustrations, diagrams, photos, code listings, etc. |
block |
container |
| <footer> |
Creates a footer section, usually at the bottom of the page. Includes author name, copyright information, and contact information. |
block |
container |
| <form> |
Creates a form of empty fields for user input. |
block |
container |
| <h1> to <h6> |
Creates a sections of an html document with varying priority. Lower numbers indicate higher importance. |
block |
container |
| <head> |
Contains all of the information that needs to be pre-loaded fir a page. |
n/a |
container |
| <header> |
Creates a section for introductory content for its nearest parent sectioning element. |
block |
container |
| <html> |
Tells the browser that the document is in HTML, and contains every other element except !DOCTYPE. |
n/a |
container |
| <iframe> |
Imbeds another document into the page, such as an image. |
inline |
container |
| <img> |
Links to an image. |
inline |
empty |
| <input> |
Defines an area for user input. |
inline |
empty |
| <label> |
Creates a label for items in an interface. |
inline |
container |
| <li> |
Gives meaning to a list item. |
block |
container |
| <link/> |
Used for external style sheets to link an external document to the current one. |
n/a |
empty |
| <meta/> |
Used for web crawlers to identify features of the page. |
n/a |
empty |
| <nav> |
Contains an unordered list of navigational links, reserved for internal navigation. |
block |
container |
| <p> |
Creates a paragraph. |
block |
container |
| <script> |
Contains or points to external scripting. |
inline |
container |
| <section> |
Creates a section in a document. |
blok |
container |
| <strong> |
Makes text bold to identify important text. |
inline |
container |
| <style> |
Indicates in page CSS styling. |
n/a |
container |
| <table> |
Creates an HTML table with rows and headings. |
block |
container |
| <td> |
Contains and creates a standard cell from an HTML table. |
n/a |
container |
| <th> |
Contains and creates a header cell from an HTML table. |
n/a |
container |
| <title> |
Title of the webpage, displayed by the browser. |
n/a |
container |
| <tr> |
Contains and creates a row for an HTML table. |
n/a |
container |
| <ul> |
Creates an unordered list with bullet points. |
block |
container |


Coding 1
Goals
Ensure DASH is installed correctly
Practice using dot-indexing
Practice finding DASH documentation
Step 1: Check installation
Use the dash.version
command to print the current version of DASH in the console:
>> dash.version
Note
If this causes an error message, you may not have the toolbox installed correctly. Try reinstalling the toolbox.
Step 2: Print help text
Use the help
command to read the help text for dash.version
:
>> help dash.version
Tip
Try clicking the Documentation Page
link at the bottom of the help text to open the documentation as a webpage.
Step 3: Open help page
Use the dash.doc
command to open the documentation as a webpage:
>> dash.doc('dash.version')
Note
DASH documentation pages will often include usage examples, but these examples are not available when displaying help text in the console.


---
start: 2015-10-07 13:00
edition: 7
participate: "http://www.eventbrite.com/e/scaling-a-product-from-zero-to-two-hundred-implementations-tickets-18816921920?aff=GNWebsite"
subheader: "Scaling Bahmni from Zero to Two hundred hospital implementations"
subnote: "Journey from being a developer and learning to be a product manager for Bahmni."
talk :
agenda:
-
time: "6:30 p.m"
title: "Scaling Bahmni from Zero to Two Hundred implementations"
subtitle: "Journey from being a developer and learning to be a product manager for Bahmni.Story of a long term ThoughtWorker (15+ years of experince)."
speaker: "Vivek Singh"
profile: "https://www.linkedin.com/pub/vivek-singh/1/5a6/453"
image: "Vivek.jpg"
---


A new way of thinking
The first building block
Single responsibility
f(x) = x + 1
1 input => 1 output
No side effect
Expression vs Statement
Immutable vs Mutable
Declarative vs Imperative
Haskell:
add :: Int -> Int -> Int
add x y = x + y
Javascript:
const add = x => y => x + y;
// Note the similarity of the arrows
Haskell:
add69 :: Int -> Int
add69 = add 69
Javascript:
const add69 = add(69);
Haskell:
getApiURL :: HostName -> ResourceName -> Int -> IO ()
getApiURL x y z = ...
getUserURL :: Int -> IO ()
getUserURL = getApiURL "localhost:3000" "users"
Javascript:
const getApiURL = apiHostname => resourceName => resourceId =>
`https://${apiHostname}/api/${resourceName}/${resourceId}`;
const getUserURL = getApiURL('localhost:3000')('users');
map, filter, reduce, some, every... These are higher order functions
Because functions (behaviors) are data too!
Pass function into other function is like dependency injection in OOP
Dependency injection relies on interface
Higher order functions rely on function type
map :: (a -> b) -> [a] -> [b]
filter :: (a -> Bool) -> [a] -> [a]
reduce :: (b -> a -> b) -> b -> [a] -> b
Filter a list of employees to get everyone that are:
let awesomeEmployees = [];
for (let i = 0; i < employees.length; i++) {
const employee = employees[i];
if (employee.age < 28 &&
employee.playFifa &&
employee.wpm > 80) {
awesomeEmployees.push(employee);
}
}
const awesomeEmployees = employees.filter({age, playFifa, wpm} => age < 28 && playFifa && wpm > 80);
// Note the use of destructuring, Haskell has pattern matching
What if we want to store and update the conditions on the fly?
conditions = [(< 28) . age, (== True) . playFifa, (> 80) . wpm]
getAwesomeEmployees :: [ Employee ] -> [ Employee ]
getAwesomeEmployees = filter awesome
where awesome employee = and $ map ($ employee) conditions
awesomeEmployees = getAwesomeEmployees employees
FP programs are built by composing small functions
Example: Calculate the average age of all employees
averageAge :: [ Employee ] -> Float
averageAge = average $ map ( . age )
const averageAge = compose(
average,
map(prop('age'))
);
I need to generate a chart that shows revenues for a period of time
// $callback :: (startDate, endDate) -> result
public function mapInRange($callback)
{
// [1, 3, 5, 7] -> [ [1, 3] , [3, 5] , [5, 7] ]
$dateRanges = $this->transformFlatToCouple($this->dates);
foreach ($dateRanges as $dateRange) {
$endResult = $callback($dateRange['start'], $dateRange['end']);
$formatedDate = $dateRange['end']->copy(); // clone because of mutable Carbon object
$label = $this->formatDate($formatedDate);
$data = [
'label' => $label,
'data' => $endResult,
];
$newData[$label] = $data;
}
return $newData;
}
What if the input is not an array?
What if some functions along the way return null or undefined?
map :: (a -> b) -> [a] -> [b]
They are just like classes, but better, and immutable
Each of these types has a number of functions that can be used on them just like a method
The difference is that the function is separated from the data structure
Any function that returns a Maybe type signaling that this function can fail
Maybe = Nothing | Just a
head :: [a] -> a
safeHead :: [a] -> Maybe a
printFirstEmployee :: [ Employee ] -> Employee
printFirstEmployee = print . head
-- If the list of Employee is empty then a run time exception will be thrown (print null)
safePrintFirstEmployee :: [ Employee ] -> Maybe Employee
safePrintFirstEmployee = (map print) . safeHead
Any function that produces side effect (effects that are not in the program's control like reading, storing to the database, calling other services' API) will have to wrap the result/error in a "container", in a type called IO in Haskell, Task in Javascript.
const getFileName = () => new Promise(res => { setTimeout(res, 1000, 'fileName') });
const writeToFile = filePath => new Promise(res => { setTimeout(res, 1000, `write to file ${filePath}`) });
getFileName()
.then(x => `path/to/file/${x}.txt`)
.then(writeToFile)
.then(console.log, console.error);
const getFileName = () => Future((rej, res) => { setTimeout(res, 1000, 'fileName') });
const writeToFile = filePath => Future((rej, res) => { setTimeout(res, 1000, `write to file ${filePath}`) });
getFileName()
.map(x => `path/to/file/${x}.txt`)
.chain(writeToFile)
.fork(console.error, console.log);
Higher order, pure functions: map, filter, reduce, every, some
Basic functor / monad / applicative: Maybe, Future


@@include("../blocks/head.html")
Toggle navigation
dashboard
Dashboard
fingerprint
Login
loop
Forgot Your Password?
textsms
Blog
access_time
BUY PROTECTION NOW
The Future Of Website Security
PROTECT WEBSITES AGAINST HACKERS
Login
E-mail
Password
Remember Me
@@include("../blocks/scripts.html")


-
New York Film Festival Announces Surprise Screening | Mass Appeal
massappeal.com
What will it be this year?
-
You+Me - Break the Cycle
www.youtube.com
Pre-Order the album rose ave. and receive “You and Me” and “Break the Cycle” instantly on iTunes: http://smarturl.it/RoseAve?IQid=ymyt Pre-Order on ...
-
Kendrick Lamar - i
soundcloud.com
i by: Kendrick Lamar Prod. by Rahki • Mixed By Ali Purchase now @ http://po.st/iKendrickLamar #TDE
-
W-ORD Channel 7 News With John Oliver & Cookie Monster
www.youtube.com
Did you know John Oliver and Cookie Monster co-anchor a nightly news broadcast about words? Just kidding, that's not a thing. But you would TOTALLY ...
-
Exclusive: Coachella and Firefly Founders Team Up on Joint Venture
www.billboard.com
Goldenvoice, creators of Coachella Valley Music & Arts Festival in Indio, Calif., has entered into a joint venture with Red Frog Events to promote ...
-
Police Have a Much Bigger Domestic Abuse Problem Than the NFL
www.theatlantic.com
Research suggests that family violence is two to four times higher in the law-enforcement community than in the general population. So where's the ...
-
Autumn in Austin: What to Do, Eat and Drink
mashable.com
It's fall, and Austin is brimming with fun things to do. Here's Mashable's guide to autumn in the city.
-
Nas: Time Is Illmatic | Tribeca Film
tribecafilm.com
Tribecafilm.com: Home of the 2014 Tribeca Film Festival
-
Cold Lampin'! Old School Hip Hop Night at Hotel Vegas
do512.com
Win Tickets to Cold Lampin'! Old School Hip Hop Night at Hotel Vegas, September 20, 2014 on Do512
-
Join AMD
sxsweco.com
Creating that marketplace for exchange of ideas and progressive thinking is what South by Southwest Eco is all about. - Forbes
-
Welcome SXSW Eco 2014 Volunteers!
volunteer.sxsweco.com
SXSW Eco Volunteer registration is now open AND shifts are available for pick-up!
-
Hourly Weather Forecast for 78751 - weather.com
www.weather.com
Get the hourly forecast, rain notifications and severe weather alerts with TruPoint (SM) accuracy from weather.com
-
Fun Fun Fun Fest
funfunfunfest.com
The world's foremost aficionados of fun and fellowship. Fun Fun Fun Fest • Nov. 7, 8, 9 • Austin, TX
-
Fun Fun Fun Fest
www.funfunfunfest.com
The world's foremost aficionados of fun and fellowship. Fun Fun Fun Fest • Nov. 7, 8, 9 • Austin, TX
-
Why Startups Sell For Millions With No Business Model
www.inc.com
The three simple reasons a company can be worth millions and be making nothing.
-
17 Of The Most Beautiful Steps Around The World
www.architecturendesign.net
Street art is gradually coming to be accepted as a legitimate and wonderful art form by more and more people, but that doesn’t mean that street ...
-
How To Crack The Code Of Branding Yourself
www.linkedin.com
In an era of social media superstars, e-entrepreneurs, and an ever-evolving economy – branding is everything.Whether launching a business, developing ...
-
These 75 Iconic Photos Will Define The 21st Century So Far. Everyone Needs ...
news.distractify.com
These are the moments that will end up in history books.


{{currentStreetlight.poleID}}
Location:{{currentStreetlight.longitude}}, {{currentStreetlight.latitude}}
Wattage:{{currentStreetlight.wattage}} watts
Attached Tech:{{currentStreetlight.attachedTech}}
Pole Owner:{{currentStreetlight.poleOwner}}
Light Attributes:{{currentStreetlight.lightAttributes}}


// Copyright (C) 2010 Davis E. King<EMAIL_ADDRESS>// License: Boost Software License See LICENSE.txt for the full license. #undef DLIB_IMAGE_PYRaMID_ABSTRACT_H__ #ifdef DLIB_IMAGE_PYRaMID_ABSTRACT_H__ #include "../pixel.h" #include "../array2d.h" #include "../geometry.h" namespace dlib { template < unsigned int N > class pyramid_down : noncopyable { /*! REQUIREMENTS ON N N > 0 WHAT THIS OBJECT REPRESENTS This is a simple functor to help create image pyramids. In particular, it downsamples images at a ratio of N to N-1. Note that setting N to 1 means that this object functions like pyramid_disable (defined at the bottom of this file). WARNING, when mapping rectangles from one layer of a pyramid to another you might end up with rectangles which extend slightly outside your images. This is because points on the border of an image at a higher pyramid layer might correspond to points outside images at lower layers. So just keep this in mind. Note also that it's easy to deal with. Just say something like this: rect = rect.intersect(get_rect(my_image)); // keep rect inside my_image !*/ public: template < typename in_image_type, typename out_image_type > void operator() ( const in_image_type& original, out_image_type& down ) const; /*! requires - is_same_object(original, down) == false - in_image_type == is an implementation of array2d/array2d_kernel_abstract.h - out_image_type == is an implementation of array2d/array2d_kernel_abstract.h - pixel_traits<typename in_image_type::type>::has_alpha == false - pixel_traits<typename out_image_type::type>::has_alpha == false ensures - #down will contain an image that is roughly (N-1)/N times the size of the original image. - If both input and output images contain RGB pixels then the downsampled image will be in color. Otherwise, the downsampling will be performed in a grayscale mode. - The location of a point P in original image will show up at point point_down(P) in the #down image. - Note that some points on the border of the original image might correspond to points outside the #down image. !*/ // ------------------------------- template <typename T> vector<double,2> point_down ( const vector<T,2>& p ) const; /*! ensures - interprets p as a point in a parent image and returns the point in a downsampled image which corresponds to p. - This function is the inverse of point_up(). I.e. for a point P: point_down(point_up(P)) == P !*/ template <typename T> vector<double,2> point_up ( const vector<T,2>& p ) const; /*! ensures - interprets p as a point in a downsampled image and returns the point in a parent image which corresponds to p. - This function is the inverse of point_down(). I.e. for a point P: point_up(point_down(P)) == P !*/ rectangle rect_down ( const rectangle& rect ) const; /*! ensures - returns rectangle(point_down(rect.tl_corner()), point_down(rect.br_corner())); (i.e. maps rect into a downsampled) !*/ rectangle rect_up ( const rectangle& rect ) const; /*! ensures - returns rectangle(point_up(rect.tl_corner()), point_up(rect.br_corner())); (i.e. maps rect into a parent image) !*/ // ------------------------------- template <typename T> vector<double,2> point_down ( const vector<T,2>& p, unsigned int levels ) const; /*! ensures - applies point_down() to p levels times and returns the result. (i.e. point_down(p,2) == point_down(point_down(p)), point_down(p,1) == point_down(p), point_down(p,0) == p, etc. ) !*/ template <typename T> vector<double,2> point_up ( const vector<T,2>& p, unsigned int levels ) const; /*! ensures - applies point_up() to p levels times and returns the result. (i.e. point_up(p,2) == point_up(point_up(p)), point_up(p,1) == point_up(p), point_up(p,0) == p, etc. ) !*/ rectangle rect_down ( const rectangle& rect, unsigned int levels ) const; /*! ensures - returns rectangle(point_down(rect.tl_corner(),levels), point_down(rect.br_corner(),levels)); (i.e. Basically applies rect_down() to rect levels times and returns the result.) !*/ rectangle rect_up ( const rectangle& rect, unsigned int levels ) const; /*! ensures - returns rectangle(point_up(rect.tl_corner(),levels), point_up(rect.br_corner(),levels)); (i.e. Basically applies rect_up() to rect levels times and returns the result.) !*/ }; // ---------------------------------------------------------------------------------------- class pyramid_disable : noncopyable { /*! WHAT THIS OBJECT REPRESENTS This is a function object with an interface identical to pyramid_down (defined at the top of this file) except that it downsamples images at a ratio of infinity to 1. That means it always outputs images of size 0 regardless of the size of the inputs. This is useful because it can be supplied to routines which take a pyramid_down function object and it will essentially disable pyramid processing. This way, a pyramid oriented function can be turned into a regular routine which processes just the original undownsampled image. !*/ }; // ---------------------------------------------------------------------------------------- } #endif // DLIB_IMAGE_PYRaMID_ABSTRACT_H__


| Version | Interface | Version | Comment | |
|---|---|---|---|---|
| All in one package for an easy and quick compilation on Linux without install |
Source code, all in one package | |||
| GUI | v0.7.63 | |||
| CLI | v0.7.63 | |||
| SO | v0.7.63 | |||
| Split sources with .spec, .desc and debian dir for Linux package creation |
Source code, split packages | |||
| GUI/CLI | v0.7.63 | requires libmediainfo | ||
| libmediainfo | v0.7.63 | requires libzen | ||
| libzen | v0.4.29 | |||
| Sources with all third-party libs included, (for quick compilation with Microsoft Visual C++) |
Source code, All included | |||
| GUI/CLI | v0.7.63 | |||
| libmediainfo | v0.7.63 |


test_image_processor_server module
-
test_image_processor_server.
test_add_image_to_db
()
-
test_image_processor_server.
test_add_image_to_db_another
()
-
test_image_processor_server.
test_add_inverted_image_to_db
()
-
test_image_processor_server.
test_b64_string_to_ndarray
()
-
test_image_processor_server.
test_generate_image_list
()
-
test_image_processor_server.
test_is_image_in_database_false
()
-
test_image_processor_server.
test_is_image_in_database_true
()
-
test_image_processor_server.
test_is_inverted_in_database_false
()
-
test_image_processor_server.
test_is_inverted_in_database_true
()
-
test_image_processor_server.
test_locate_b64_string
()
-
test_image_processor_server.
test_locate_b64_string_inverted
()
-
test_image_processor_server.
test_locate_details
()
-
test_image_processor_server.
test_locate_details_inverted
()
-
test_image_processor_server.
test_ndarray_to_b64_string
()
-
test_image_processor_server.
test_process_image_inversion
()
-
test_image_processor_server.
test_return_name
()
-
test_image_processor_server.
test_verify_image_info
(in_dict, expected)
-
test_image_processor_server.
test_verify_image_name
(in_dict, expected)
-
test_image_processor_server.
test_verify_name_input
(im_name, expected)


 1999 is going to be noted as just possibly the most self reflective year of motion pictures. So far we had 'American Beauty', 'Three Kings', 'The Matrix', 'Anywhere But Here', all films dealing in one way or another with the issue of self worth and identity. Director David Fincher now adds his two cents to the debate and comes up with an equally interesting parable of human angst and social breakdown.
Edward Norton stars as 'The Narrator', we never know (or recognize his real name), but suffice to say that he is a troubled man. Suffering from chronic insomnia, The Narrator is stuck in a job he hates, a daily life of loneliness and despair. He joins support groups, under the guise of illness or impending death in an attempt to feel something, anything. He quickly becomes addicted to this method of emotional dependence, moving almost nightly from one group to another.
His world is invaded though by another emotional tourist, Marla Singer (Helena Bonham Carter), a suicidal waif living on the edge of society. The Narrator is both intrigued and repelled by this woman, who cheats and steals, scratching out an existence while the Narrator struggles with his daily grind and catalogue furnished home. Unable to deal with someone else copying his subterfuge, He confronts Marla with her charade. She returns the indictment. Unable to deal with the loss of his support, The Narrator plunges into his work. He travels, investigating auto defects for a major car manufacturer. His job is to weigh the costs between possible lawsuits and a mass recall for defective parts. On one of his flights he meets up with Tyler Durder (Brad Pitt), a sociopathic cross between William S. Burroughs and Deepak Chopra. When the narrator returns home, he finds that his condo has been destroyed in an explosion and fire. Everything he owns has been destroyed. At first he attempts to call Marla, but unable to deal with her honesty, he instead calls Tyler. The two men meet at a bar, when The narrator finally, after prompting asks if he can stay with Tyler. Tyler agrees on one condition. He asks the Narrator to hit him as hard as he can! The two men fight, creating a strange and primitive bound between them. Moving in with Tyler, the narrator finds that the living conditions are much less than he could ever have expected. The home that Tyler lives in is anything but livable. Water floods the basement, walls and stairs are crumbling, and everything is in disrepair. From here Tyler and the Narrator start to become brothers, getting other lost and soulless men to join them in their search for self awareness through pain and anarchy.
"Fight Club" is a daring film. It is both a hard edge action film and diatribe against violence. Anarchy rules in this film, more so than any other in recent years. The only analogous film could possibly be George Romero's 'Dawn of the Dead' (another film that skirted the issue of consumerism as a disease). What "Fight Club" does and does brilliantly, is to shine a farcical light into the face of society's obsession with feeling good about one's self. Director David Fincher and Screenwriter Jim Uhls have crafted a thought provoking morality tale of self abuse for the 12 step generation.
Jim Uhls' script base on the book by Chuck Palahniuk,, is a clever piece of writing.  In this universe, it makes sense to beat yourself senseless physically, because "self improvement is masturbation.. self destruction is the answer" The film is a complex character study that leads the viewer through an almost subliminal Rorschach test. So many scenes play out with double meaning that the final denouncement is both expected and surprising. David Fincher has crafted his most extreme film. Using graphic close ups, computer manipulation, visual effects, Dutch angles and quick cuts, Fincher has created a filmic representation of his lead character. Everything here is seen through The Narrator's eyes, even in the third person. This is almost as shocking a device as what Robert Montgomery did with his directorial debut "Lady in the Lake" (1947).
Admittedly, the film does shift gears half way through the film. Those expecting a tale about men engaging in bare knuckle fights (ala the Charles Bronson film "Hard Times" (1975)) are bound to be disappointed. This is a film about much loftier ideas. As Fight Club escalates into a terrorist organization, it becomes less focused on the individual battles, and more focused on The Narrator's realization of his own mania, while the group of fighters around him become more autonomous. It is only when one of their members is killed during an extreme act of vandalism, that the Narrator forces the group to recognize the fallen man's name. This becomes a mantra, in death you have a name. There is victory in Death. There is identity in Death. The Narrator rebels, putting his own life in jeopardy.
The performances of the film are all stellar. Edward Norton casts a frighteningly real presents of a man who has reached his limits. Mr. Norton manages to make his character both humorously vulnerable and frighteningly mundane. His character goes through a radical realization, that he is not the man he thought he was. Brad Pitt as Tyler Durden swaggers and stomps through his part, commanding every inch of the frame that he inhabits. Pitt has never been so forceful or relaxed in his performance, possibly his best turn outside of Terry Gilliams' "The 12 Monkeys". His character is both attractive and frightening in almost a reversal of Norton's character.
Helena Bonham Carter makes her character of Marla Singer a streetwise urchin of noble madness. Here is a woman who has accepted her plight and her mania and deals with it. Seeing through most of the hypocrisy around her. Her relationship with both Tyler and The Narrator is both complex and puzzling, which leads to the fascinating but not unseen denouncement. The best performance is from singer/ actor Meat Loaf Aday as Robert Paulson. A victim of testicular cancer, Robert has developed mammary sized breasts as a result of his steroid abuse and the hormones used in his treatment. His character has literally and figuratively fused both the masculine and feminine aspects of male life into one shockingly absurd personality. A fine and daring performance. The photography by Jeff Cronenweth is wondrously bleak. Never has self absorption been so accurately portrayed cinematically. Emblazoned with numerous visual and computer effects, the photography becomes an extension of the characters, almost eclipsing them in fact. The film is both dense and shallow in its pallet of color. The only hue that really jumps off the screen is red. Not just the color of blood, but rage, embarrassment, confusion, and depravation. "Fight Club" is truly one of the most cinematic films of recent years.
To summarize, "Fight Club" is not a film for everyone. It was never (obviously) intended to appeal to a wide spectrum. A film that speaks about loss and self denial and apathy in ways that is both disturbing and humorous. The message of the film could, I feel, be best summed up by the lyrics of John Lennon.. "You don't know what you've got, 'till you lose it!". A hard edged film, that laughs at our foibles and mocks our choices. Politically incorrect and insensitive. A hard film to forget.
©1999-2000 R.L. Strong
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Variants are C++’s union solution. Since C style unions in C++ can only support basic types, they are quite limited. Unions and variants can be pretty good for things like event data, or storing json (or any other interchange format) data. You might choose to use a variant to pass data around a callback system.
void my_event_callback(const uint32_t id, const Variant &data)
{
switch(id)
{
case(1):
{
const float my_data = data.get<float>();
my_float_setter(my_data);
break;
}
case(2):
{
const vec3 my_data = data.get<vec3>();
my_vec3_setter(my_data);
break;
}
}
}
But if you’ve ever cracked open Boost’s variant or looked at some of the other variants out there it can be hard to understand what’s going on under the hood. And there is usually a lot going on as there are a few edge cases you need to consider. However even fundamentally understanding what is going on can be a challenge as templates can quickly become hard to read.
Type Agnostic Data Store
You might have already done something like this for getting data out of an xml/json etc.
We just have a chunk of memory that we use to dump various different data types into.
class Node {
public:
explicit Node(const float data) {
new(data_store) float(data);
}
explicit Node(const int data) {
new(data_store) int(data);
}
// Other type ctors
float as_float() {
return *reinterpret_cast<float*>(data_store);
}
int as_int() {
return *reinterpret_cast<int*>(data_store);
}
// Other cast types
private:
uint8_t data_store[128]; // the actual data.
};
This way we can push what we want into data_store as long as its within the maximum size of the data_store.
Well really that’s half way to a simple variant class. Extracting out this logic we can very quickly make a simple generic variant.
A Simplistic Variant
We can use templates to get and set the data in the data store, and std::aligned_union will allow us to get the size of the biggest type we might need to store.
#include <type_traits>
template<typename... Ts>
class Variant
{
public:
template<typename T, typename... Args>
void set(Args&&... args) {
new(&data_store) T(std::forward<Args>(args)...);
}
template<typename T>
T& get() {
return *reinterpret_cast<T*>(&data_store);
}
private:
typename std::aligned_union<0, Ts...>::type data_store;
};
To use the variant we need to pass in the types that it should support. This way the template can figure out how much space is required.
Variant<uint32_t, float, std::string> my_variant;
my_variant.set<float>(1.234f);
my_variant.get<float>(); // returns 1.234
my_variant.set<std::string>("Hello world");
my_variant.get<std::string>(); // returns "Hello World"
The variant’s size will be the size of its biggest element, which is something to be aware of.
Variant<float, vec3, vec4, mat33, mat44> math_variant;
sizeof(math_variant); // mat44 is float * 16 == 64 bytes.
And thats about it.
Is That Really It?
Well no, not really. I’ve left out a lot of details so I could show the barebones of how a variant works, without getting bogged down in a lot of detail (There are a bunch of posts that go into that detail). Most notably whats missing is type checking. You really want some type_id system to be able to force an error if you are trying to get a float from an std::string etc.
However this is a good starting point for creating your own variant, it’s mine anyway.


Huxtable v5.0.0 introduced some backwards compatibility breaking changes. Read about these updates here. The changes that impact pharmaRTF
and its related usage were: - The way indexing was handled has changed. You can no longer index columns like ht[1:5]
. The new syntax is ht[1:5, ]
. - Additionally, the add_columns
argument now changed from a default of TRUE
instead of FALSE
.
pharmaRTF is compatible back to Huxtable v4.7.1.
While pharmaRTF can cover your titles, footnotes, and encapsulating document properties - a key feature to creating the tables you need is having a good understand of huxtable. Huxtable has plenty of great user documentation within its own vignettes, available here, but within this vignette we will cover some core features necessary to create beautiful tables.
Some of the syntax we use throughout this document uses the %>%
pipe operator. This is to display support for a tidyverse style of coding. You can find the %>%
operator in the magittr package.
Something important to understand about huxtable is that it starts as an abstraction of a data frame. This means that in general, you can index and slice the huxtable object the same way you would with a normal data.frame
object in R.
ht <- huxtable::as_hux(iris[, c("Species", "Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width")], add_colnames=TRUE) ht[1:10, c('Species', 'Petal.Width')]
| Species | Petal.Width |
|---|---|
| setosa | 0.2 |
| setosa | 0.2 |
| setosa | 0.2 |
| setosa | 0.2 |
| setosa | 0.2 |
| setosa | 0.4 |
| setosa | 0.3 |
| setosa | 0.2 |
| setosa | 0.2 |
As you can see here, a nice feature of huxtable is that it has a lot of automatic printing options. Within the code of an R markdown file, it automatically outputs as an HTML table. When developing within an R script, it will also print formatted text to your console. This can be very useful for development as you get an idea of how your display will look within the RTF document.
huxtable::print_screen(ht[1:10,]) #> Species Sepal.Length Sepal.Width Petal.Length Petal.Width #> setosa 5.1 3.5 1.4 0.2 #> setosa 4.9 3 1.4 0.2 #> setosa 4.7 3.2 1.3 0.2 #> setosa 4.6 3.1 1.5 0.2 #> setosa 5 3.6 1.4 0.2 #> setosa 5.4 3.9 1.7 0.4 #> setosa 4.6 3.4 1.4 0.3 #> setosa 5 3.4 1.5 0.2 #> setosa 4.4 2.9 1.4 0.2 #> #> Column names: Species, Sepal.Length, Sepal.Width, Petal.Length, Petal.Width
One thing to note is that the default width of a huxtable table will not fill a whole landscape RTF document (when the page size is 11" x 8.5"). A good rule of thumb to follow is that setting the huxtable table width to 1.5 will fill the page properly
# Assign the attribute huxtable::width(ht) <- 1.5 # Pipe the attribute ht <- ht %>% huxtable::set_width(1.5) ht[1:10,]
| Species | Sepal.Length | Sepal.Width | Petal.Length | Petal.Width |
|---|---|---|---|---|
| setosa | 5.1 | 3.5 | 1.4 | 0.2 |
| setosa | 4.9 | 3 | 1.4 | 0.2 |
| setosa | 4.7 | 3.2 | 1.3 | 0.2 |
| setosa | 4.6 | 3.1 | 1.5 | 0.2 |
| setosa | 5 | 3.6 | 1.4 | 0.2 |
| setosa | 5.4 | 3.9 | 1.7 | 0.4 |
| setosa | 4.6 | 3.4 | 1.4 | 0.3 |
| setosa | 5 | 3.4 | 1.5 | 0.2 |
| setosa | 4.4 | 2.9 | 1.4 | 0.2 |
By default, all columns will have an equal width. You can set individual column widths as a ratio of the total width using the col_width
property functions. Note that you want these values to sum to 1 - if they are less than one, the columns won’t fill up the total width of the table
# Assign the attribute huxtable::col_width(ht) <- c(.4, .15, .15, .15, .15) # Pipe the attribute ht <- ht %>% huxtable::set_col_width(c(.4, .15, .15, .15, .15)) ht[1:10,]
| Species | Sepal.Length | Sepal.Width | Petal.Length | Petal.Width |
|---|---|---|---|---|
| setosa | 5.1 | 3.5 | 1.4 | 0.2 |
| setosa | 4.9 | 3 | 1.4 | 0.2 |
| setosa | 4.7 | 3.2 | 1.3 | 0.2 |
| setosa | 4.6 | 3.1 | 1.5 | 0.2 |
| setosa | 5 | 3.6 | 1.4 | 0.2 |
| setosa | 5.4 | 3.9 | 1.7 | 0.4 |
| setosa | 4.6 | 3.4 | 1.4 | 0.3 |
| setosa | 5 | 3.4 | 1.5 | 0.2 |
| setosa | 4.4 | 2.9 | 1.4 | 0.2 |
The add_colnames
argument inserts the column names into the huxtable table. Something important to understand here is that this argument actually inserts the column names as the first row of the table. Therefore, there are no special properties of the column names compared to other data points within the table:
ht[1,]
| Species | Sepal.Length | Sepal.Width | Petal.Length | Petal.Width |
|---|
This is important to understand, because it actually makes creating column headers very easy in that you don’t have to worry about the variable names in the data. Simply create a data frame of the desired column headers and bind it to the data, and then do not use the add_colnames
argument.
column_headers <- data.frame( Species = "Species of Flower", Sepal.Length = "Sepal Length", Sepal.Width = "Sepal Width", Petal.Length = "Petal Length", Petal.Width = "Petal Width", stringsAsFactors = FALSE ) ht <- huxtable::as_hux(rbind(column_headers, iris)) ht[1:10,]
| Species | Sepal.Length | Sepal.Width | Petal.Length | Petal.Width |
|---|---|---|---|---|
| Species of Flower | Sepal Length | Sepal Width | Petal Length | Petal Width |
| setosa | 5.1 | 3.5 | 1.4 | 0.2 |
| setosa | 4.9 | 3 | 1.4 | 0.2 |
| setosa | 4.7 | 3.2 | 1.3 | 0.2 |
| setosa | 4.6 | 3.1 | 1.5 | 0.2 |
| setosa | 5 | 3.6 | 1.4 | 0.2 |
| setosa | 5.4 | 3.9 | 1.7 | 0.4 |
| setosa | 4.6 | 3.4 | 1.4 | 0.3 |
| setosa | 5 | 3.4 | 1.5 | 0.2 |
Given that the column headers are just another row of the data frame, this also means that you can use multiple rows as your column headers. More on how to take advantage of that later.
Huxtable supports many different cell formatting properties, including borders, bold, italic, horizontal and vertical alignment, and cell padding. All of these tend to be important when creating outputs in clinical reports. To set a cell property, you simply specify the rows and columns you want to change and apply the property function. When in doubt, consult the documentation to understand the proper values. As with essentially all of the huxtable property functions, there are multiple methods of applying the property to suite your preferred syntax style.
# Assign attributes directly to object huxtable::bold(ht[1, ]) <- TRUE huxtable::italic(ht[2, ]) <- TRUE # Use piping ht <- ht %>% # Bottom border top row huxtable::set_bottom_border(1, 1:ncol(ht), 1) %>% # Thicker bottom border on 2nd row huxtable::set_bottom_border(2, 1:ncol(ht), 4) %>% # Align the 3rd row, 2nd column right huxtable::set_align(3, 2, 'right') ht[1:10,]
| Species | Sepal.Length | Sepal.Width | Petal.Length | Petal.Width |
|---|---|---|---|---|
| Species of Flower | Sepal Length | Sepal Width | Petal Length | Petal Width |
| setosa | 5.1 | 3.5 | 1.4 | 0.2 |
| setosa | 4.9 | 3 | 1.4 | 0.2 |
| setosa | 4.7 | 3.2 | 1.3 | 0.2 |
| setosa | 4.6 | 3.1 | 1.5 | 0.2 |
| setosa | 5 | 3.6 | 1.4 | 0.2 |
| setosa | 5.4 | 3.9 | 1.7 | 0.4 |
| setosa | 4.6 | 3.4 | 1.4 | 0.3 |
| setosa | 5 | 3.4 | 1.5 | 0.2 |
Another very useful feature of huxtable is the ability to specify and merge cells. This is done simply by selecting the rows and columns you’d like to merge of the huxtable object. The top left cell’s value will take on the value of the merged cells.
To tie this in with a practical example, think of spanning headers. As mentioned, since column headers are just rows of the huxtable object, we can create spanning headers by creating 2 rows of column headers and merging cells.
# Create the column headers data frame column_headers <- data.frame( Species = c("", "Species of Flower"), Sepal.Length = c("Sepal", "Length"), Sepal.Width = c("", "Width"), Petal.Length = c("Petal", "Length"), Petal.Width = c("", "Width"), stringsAsFactors = FALSE ) # Create the huxtable table ht <- huxtable::as_hux(rbind(column_headers, iris)) %>% # Merge the Sepal cell over the Length and Width huxtable::merge_cells(1, 2:3) %>% # Merge the Petal cell over the Length and Width huxtable::merge_cells(1, 4:5) %>% # Align the top cells for both Sepal and Petal huxtable::set_align(1,2, 'center') %>% huxtable::set_align(1,4, 'center') %>% # Bold all the column header rows huxtable::set_bold(1:2, 1:ncol(iris), TRUE) %>% # Bottom border on 1st column header row huxtable::set_bottom_border(1, 2:4, 1) %>% # Bottom border on 2nd row huxtable::set_bottom_border(2, 1:ncol(iris), 2) ht[1:10,]
| Species | Sepal.Length | Petal.Length | ||
|---|---|---|---|---|
| Sepal | Petal | |||
| Species of Flower | Length | Width | Length | Width |
| setosa | 5.1 | 3.5 | 1.4 | 0.2 |
| setosa | 4.9 | 3 | 1.4 | 0.2 |
| setosa | 4.7 | 3.2 | 1.3 | 0.2 |
| setosa | 4.6 | 3.1 | 1.5 | 0.2 |
| setosa | 5 | 3.6 | 1.4 | 0.2 |
| setosa | 5.4 | 3.9 | 1.7 | 0.4 |
| setosa | 4.6 | 3.4 | 1.4 | 0.3 |
Getting your huxtable table right takes some experimentation, and when outputting to RTF it will take multiple iterations to get it right. One very important note is that it’s common to have to insert line breaks in your data manually - be it to make your data flow nicely within cells, or to organize column headers properly. Within pharmaRTF, for this you will need to use RTF syntax. Instead of the traditional \n
- this is just \line
. But in R, you need to add an extra backslash (\
) because backslashes are break characters. So to insert a line break in your text, simply add \\line
.
A second step that you need to take is to set escape_contents
to false. This is because by default, huxtable will do some cleaning when generating the output to try to catch certain syntax - and when the RTF generates, the escape character itself has been escaped. The result is that \line
will appear in your document as text. Fortunately, this is just one extra line of code.
# Overwrite the column header cell ht[2, 1] <- "Species of\\line flower" # Set escape contents to false huxtable::escape_contents(ht) <- FALSE # Set display width huxtable::width(ht) <- 1.5 ht[1:10,]
| Species | Sepal.Length | Petal.Length | ||
|---|---|---|---|---|
| Species of\line flower | Sepal | Petal | ||
| Species of Flower | Length | Width | Length | Width |
| setosa | 5.1 | 3.5 | 1.4 | 0.2 |
| setosa | 4.9 | 3 | 1.4 | 0.2 |
| setosa | 4.7 | 3.2 | 1.3 | 0.2 |
| setosa | 4.6 | 3.1 | 1.5 | 0.2 |
| setosa | 5 | 3.6 | 1.4 | 0.2 |
| setosa | 5.4 | 3.9 | 1.7 | 0.4 |
| setosa | 4.6 | 3.4 | 1.4 | 0.3 |
And within the RTF output, the lines will display properly.
Be sure to check out our other vignettes!
vignette("pharmaRTF")
vignette("advanced_usage")
vignette("tf_from_file")


Enter your xml here and press the button below to display it as highlighted by the CodeMirror XML mode
Highlight!
Running a CodeMirror mode outside of the editor. The CodeMirror.runMode
function, defined in lib/runmode.js
takes the following arguments:
text (string)
The document to run through the highlighter.
mode (mode spec)
The mode to use (must be loaded as normal).
output (function or DOM node)
If this is a function, it will be called for each token with two arguments, the token’s text and the token’s style class (may be null
for unstyled tokens). If it is a DOM node, the tokens will be converted to span
elements as in an editor, and inserted into the node (through innerHTML
).


To understand and manage attractive design and layouts, gaining an appreciation for the how to manage the CSS Box Model, Floats and Positioning is paramount. In this third and final refcard in the Core CSS series we turn our attention to the visual models that exist within CSS. You’ll learn not only about how visual models work, but how to troubleshoot and repair common problems too.
THE CSS VISUAL MODEL
The path to master today’s options for layout requires a significant study of the way that browsers work with the markup and style they’re interpreting. Current Web browsers implement what is known as the “CSS Visual Model” and lay out content based on a foundation of lines and boxes.
Lines and Boxes
It’s very likely you’ve heard the terms “inline” and “block” to describe HTML and XHTML elements. I’ll review their meaning here in the context of the model. An inline element by default is one that lies on the line with no subsequent break, unless the line has come to the end of available browser space in which to flow. Boxes that fall on a line in this fashion are called line boxes (Figure 1).
Figure 1. Imagine this is a series of text within a paragraph. Note how the inline elements do not cause a line break, and that they generate what is known as a “line box.”
A block level element by default defines a block, and there is a break between it and the next element.
Figure 2. I’ve taken the original text and placed it within a paragraph element. Then, duplicated the element below, giving us two block boxes each containing inline boxes.
The CSS 2.1 Visual Model, continued
The most critical piece to understand is that every element creates a box. This box is the foundation for what is known as the box modeland is a critical component to understanding how to style elements within your document.
THE BOX MODEL
Every element box can be styled by the box components. In CSS 2.1, the Box Model consists of the content at center, and the top, right, bottom and left borders, padding and margin. The borders, padding and margin values for each or any side of the box are all optional and can be styled using CSS.
Boxes only go to the width and/or height of their content. You can control the width of block boxes by providing a specified width, but in the case of floats, you’ll need to use clearing and other techniques to “stretch” element heights.
Figure 3. The CSS Box Model.
It’s important to point out that because of flow issues within a browser, inline elements can’t take a width. Therefore, while you can style other elements of an inline box, you can’t set an explicit width.
The Box Model, continued
Understanding the box model is critical because it gives designers a greater sense of what they can actually style. For example, you can add backgrounds or styled borders to the content surrounded by the box. A bit of a warning, though, the Box Model in IE6 and below does not follow the CSS box model. Therefore, it is necessary to use the correct DOCTYPE declaration (See Core CSS: Part I Refcard) in IE6 and IE7 to ensure the proper box model is in use. Otherwise, width measurements will be significantly different.
Margin backgrounds in boxes are transparent.
About Normal Flow
Normal flow at its most simplistic is simply the default flow of elements within a document. Here is an example of normal browser flow when we diminish the width of the browser, content will flow down and to the left (Figures 4-6). If we reverse the sizing and expand the browser, the content will flow up and to the right (simply reverse viewing order of Figures 4-6).
Figure 4. A paragraph in the normal flow.
Figure 5. As the browser window is resized, text flows down and to the left. Notice the appearance of a scrollbar.
Figure 6. As we continue to make the browser window smaller, the paragraph reflows to fit the available width, while the text flows to the left in a downward manner, elongating the page.
A great way to gain an appreciation of normal flow is to simply create an HTML page with multiple paragraphs of text, and then size and resize the browser, watching how the flow behaves.
THE POWER AND PROBLEM OF FLOATS
Floats have become a very critical part of today’s CSS approach to visual layout. At first glance, the concept is very simple. While floating elements can assist us in doing all kinds of visual magic, there are challenges inherent to using them, including the way they are rendered in browsers.
The Basic Intention of Floats
Interestingly, floats were not really envisioned as a means for creating columns, although that’s often how we use them. Rather, they were developed to allow text to flow around another element which has been set to the left or the right, such as an image. This is something we see a great deal in design, as you can see in Figure 7.
Figure 7. Floating allows for text to flow around a floated box. In this case, the image is floated right, and the text flows around the image.
The more we use floats for layout, the more challenged we are to find ways of controlling and breaking the manipulation of flow. Floated elements are shifted to the left or right of the normal flow. In the case of Figure 8, the image element is shifted to the left and therefore the text flows to the right.
Figure 8. If the image is floated left, the text flows to the right.
It’s important to note that the markup stays the same—it’s only the CSS that changes. An example of the markup would be:
Barrel Cactus

The colors are beautiful, but the barrel cactus has an inner secret: if you are in need of hydration in the desert, this cactus has a lot of fluid inside and has saved the lives of many.
The CSS values will of be different in terms of manipulating the location of the image and the text flow, in the first case, the image is floated right, and in the second, left. Other elements will simply flow around the floated element once a float has been applied.
The Power and Problem of Floats, continued
Float Behavior
Understanding how floats behave (or don’t) within a browser environment is critical to troubleshooting a variety of issues, particularly when it comes to layout. While floats can be your best layout friend in many, many situations, knowing how floats behave in general will give you the upper hand!
The first thing to know is that floats are not in the normal flow. This means that other text and elements will continue to flow around the floated elements. In Figure 9, we see what happens if two elements are floated to the right and left. If not contained by another element that has an explicit width, the floated elements will continue to spread apart as the browser size increases, and come together as the browser size decreases.
Figure 9. One box floated left, another right. If not contained, these boxes will continue to spread apart or get closer as the browser is resized.
If you’ve ever had text begin to unintentionally crawl up around the side of a floated box, the solution is float clearing (see “Clearing Floats” later in this reference).
In order to get floats to stack up nicely next to one another and avoid this behavior, we simply float them all in the same direction, typically left (Figure 10).
Figure 10. If we float elements in the same direction, they’ll line up next to each other. This is one way of creating columnar designs.
What happens if there’s not enough room within the browser (or the set width of a container element)? The subsequent floated element “falls off” the line and seeks the first available space (Figure 11).
Figure 11. If an element cannot fit into the available space, the box will “fall off” the line and move to the first available space in the flow.
Float Behavior, continued
IE6 will drop the float down in if there is no space, incongruent with other browsers. If you’re developing in a Firefox environment, be sure to test constantly in IE as well. This issue, referred to as “tolerance” can be remedied by modifying widths slightly to accommodate IE.
Floats can be contained by setting explicit widths on containing elements, and on the floated boxes themselves. This doesn’t eradicate tolerance problems, but it gives you a more finite idea of how to mathematically arrange your elements (Figure 12).
Figure 12. By containing elements and giving them a width, we can begin to create columns.
By containing elements, we can create contexts for interface components. If I wanted to create three columns as above, I could create three divs with specific widths, borders, padding and margins for each of the columns, and then set that within another div, which I would give an explicit width too, containing the three individual columns:
Of course, using divs for everything is overkill, because many HTML elements actually have this sort of mechanism built right in! Consider an unordered list with three list items:
- column 1
- column 2
- column 3
As you can see, the

 is an element, and therefore createsa box. We can then style that box as a container for the list items residing within. If there’s a logical reason to use a list, such as with navigation, or linked interface components, consider using semantic elements instead. This is called minimal markup and is an extremely helpful technique.
There’s no such thing as “div” based design. That term is popular but highly inaccurate. In CSS, it’s not that we use divs to create boxes, but that the element boxes are already there. Use divs only where necessary for containment and structure.
The Power and Problem of Floats, continued
Clearing Floats
So what happens when you want to stop the flow of text, or a floated box, and return to the normal flow? You have to clear your floats (Figure 13).
Figure 13. Clearing floats is the process of returning the next consecutive element to the normal flow.
In terms of floats for layout, if you want to be able to have content below floated elements, such as a traditional “footer” where site information will go, clearing is necessary. This allows the subsequent elements to return to the normal flow (Figure 14).
Figure 14. Once the float is properly cleared, we return to the normal flow, which is how we can create a footer beneath the floated columns.
There are numerous ways to clear floats. A very popular one is the creation of a clear class and the use of the property “clear” and a value of both:
People will then use a div or a break element to clear the float:
My preference of the two is the break element, as an empty div is a non-empty element with nothing inside it. While still slightly presentational, at least “break” has meaning in this case (Figures 15 and 16).
Figure 15. The float is properly cleared. Notice how the column to the left doesn’t fill the entire available space –this is normal behavior. The important issue is that the bottom-most eleiment is cleared and does not try to “creep up” into the available space.
Figure 16. Even when a tolerance problem forces the far right column off the line, notice that it does not encroach upon the space above it. This is because it’s not in the normal flow. Also, note t because it’s not in the normal flow. Also, note that despite the tolerance issue, the bottom-most element remains clear of the floated elements.
CSS POSITIONING
CSS positioning is a powerful piece of CSS that allows us to position elements in a variety of ways. One of the problems with positioning is that it has not been well articulated, particularly relative positioning, over the years. It took me a long time to understand exactly what relative positioning really was, or was useful for. Therefore, I’ll start with relative positioning and work from there.
Relative
If the fathers of CSS had been thinking about naming it a little more carefully relative positioning would be called “offset” positioning.
Essentials for relative positioning:
Imagine three paragraphs of text in the normal flow (Figure 17). Using CSS I’ve hidden the visibility of the text in the second paragraph to make the visualization of relative positioning clearer.
Figure 17. Three paragraphs in the normal flow.
Here’s some CSS that offsets the paragraph using relative positioning:
The offset can be seen in Figure 18.
Figure 18. The second paragraph, positioned relatively.
At this point you’re probably wondering, what is that paragraph being positioned to? This is why I say the term relative in this instance is so confusing. The answer is not what you’d expect. A relatively positioned element is positioned in relation to its location in the normal flow. In other words, the browser still “sees” the positioned element in the flow but on the design surface, it’s visually moved from where it would have been. This is why the big space is left behind, almost a ghost of the paragraph. The browser interprets the element as being in the normal flow.
Absolute
Absolute positioning is a little clearer in its terminology, and perhaps a bit more logical in its behavior. An absolutely positioned element:
- Is removed from normal flow
- Is positioned in relation to
- — a positioned parent element
- — the root element of HTML
- Subsequent content flows into the now available space
CSS Positioning, continued
Here’s the CSS used to position the box:
If we briefly revisit normal flow (Figure 19), we can compare the before and after positioning.
Figure 19. Normal flow, again.
Figure 20. The second paragraph, positioned absolutely. Notice how the element is positioned absolutely from the top, left area (this can be the HTML element or another element, such as a div, that is positioned). The element is taken out of the normal flow, which is why the subsequent paragraph flows up into the available space, unlike relative positioning.
Fixed
Fixed positioning is actually a subset of absolute positioning and can be very useful in creating static elements on the design surface while other elements flow behind.
Elements that are fixed are done so in relation to the browser chrome (Figure 21).
Figure 21. The h2 gray box is fixed to the left and top of the browser chrome.
As I scroll the browser, the box remains fixed (Figure 22).
Figure 22. As I scroll, the text flows under the positioned box. True to its term,the box remains fixed.
Fixed positioning isn’t implemented in IE6, although IE7 does implement it, as does IE8. If we were viewing this in IE6, the fixed box would simply scroll off just as if it were a non-positioned element.
Creating a Positioning Context: “Relatively Absolute”
One technique that is very helpful to designers who are using a combination of floats and positioning to accomplish their layouts has been coined ”Relatively Absolute”.
Creating a Positioning Context: “Relatively Absolute”, continued
Remember, a relatively positioned box creates an instance of normal flow, while it itself remains in the normal flow of the document. Therefore, creating areas that stay together as a unit can be accomplished by creating a containing element that is relatively positioned without offset values:
I then styled the list items and links:
This CSS removes the bullets from the list items. I then absolutely position each list item box as I see fit, resulting in a box in the normal flow with three links (Figure 23).
Figure 23. Relatively absolute: Using a combination of positioning to keep like items together within normal flow.
If the browser is resized, everything will flow normally, but the absolutely positioned elements will retain their position within the relative box.
Stacking Order: z-index
An important property in CSS is z-index. This property provides us a third visual dimension of depth with any positioned element (note that the element must be positioned to accept a z-index). This way, we can stack boxes and have them overlap as we’d like.
In Figure 24, I created 3 boxes and used the following CSS to cause them to overlap naturally, without using a z-index. This is the default stacking order behavior when no z-index is involved.
Figure 24. Default stacking order.
I can reverse the stack order using the z-index:
Stacking Order: z-index, continued
Figure 25 shows the results.
Figure 25. Reversing the stack using z-index.
It is important to understand that the higher the number, the “closer” to the screen the item appears. Also, you do not have to use sequential numbers. In fact, designers who want to be very certain that a given element is always on top of a stack might use numbers significantly higher than those lower in the stack:
Figure 26 shows the results, with the red box coming to the foreground.
Figure 26. Bringing a box to the foreground with z-index.
Another point to make regarding z-index is that each positioning context allows for a new instance of z-index. This is why you might see several instances of the same numbers that result in different stacking orders—it just depends on what the designer or developer is attempting to achieve.
CORE CSS WRAP-UP
The goal of the Core CSS series is to ensure that readers are empowered to understand the areas of CSS that are unclear and confusing, as well as give insight into the way browsers behave. Understanding CSS and how browser behaviors influence the work you do empowers you to envision, create and code to a high quality that will allow the sites and applications you design to be manageable, scalable and attractive, too.


Sir, please go to the login page first and login. Then come back here for the content to show
{{cat}}
{{prom.description}}
{{merch.description}}
{{thing.description}}


In Trophy Manager (TM) the only sensitive data collected is email-adresses. These adresses are used solely to contact users in the following cases:
TM stores your selected language in a cookie on your computer, you can also select to remember your login and password, which is stored in the same cookie.
The privacy policy of Trophy Manager can be summed up by this short sentence:
Your data will in no way be released or passed on - ever!
To remove your email from our system simple log in and go to http://trophymanager.com/account/


2 / 7
Mojahed Alshehri
Vice-President
Masters' Student
Cybersecurity
<EMAIL_ADDRESS>Hi, I'm Mojahed Alshehri and I'm a graduate student studying Cybersecurity. I like to do penetration testing and log analysis.
3 / 7
Daniel Nsouli
Secretary
Senior
Computer Science
<EMAIL_ADDRESS>My name is Danny Nsouli. I’m a Computer Science Major and a Business Administration Minor. My academic interests include mobile application development and cybersecurity. I also enjoy playing tennis and watching movies in my spare time.
4 / 7
Kyi Win
Treasurer
Graduate Student
Data Science
<EMAIL_ADDRESS>My name is Kyi Win. I am a second year graduate student studying Data Science. I enjoy creating data visualizations. I studied psychology when I was an undergraduate student. I joined GW cyber because I think knowing about cyber security will be very useful and knowledgable as I am studying data science, and wanted to get involved in a club while in school. During my internship last summer, I built dashboards with Tableau, and I can answer questions related to Tableau or how to use it if anyone is interested.
5 / 7
Neel Bhagwat
Systems Administrator
Sophomore
Computer Science
<EMAIL_ADDRESS>Howdy, I'm a sophomore studying Computer Science, hoping to concentrate in Data Science and Cybersecurity. I am also minoring in Business Administration. Besides computing, I love walking around and exploring various places. If you have any questions, feel free to reach out!
6 / 7
David DiMolfetta
Engagement Manager
Sophomore
Business Analytics
<EMAIL_ADDRESS>Hi, I'm David DiMolfetta, a sophomore studying Business Analysis with a minor in Journalism and Mass Communication.  Talk to me about anything business and be on the lookout for the awesome activities GW Cyber is running this year. Hope to see you there!
7 / 7
Jacob Hollander
Content Reporter
Sophomore
International Affairs
<EMAIL_ADDRESS>Hi! I'm a sophomore from New Haven, Connecticut, studying International Affairs with a double concentration in security policy and Asia studies. I'm the content reporter, and I compile a monthly newsletter on current cybersecurity affairs. In my spare time, I enjoy martial arts, running, and reading.
1 / 7
Theodore Miller
President
Senior
Computer Science
<EMAIL_ADDRESS>Tad, the President of GW Cyber, is a Senior studying Computer Science. Throughout his GWU career, he has maintained internships with several information technology organizations in a variety of cyber roles, and currently works at FireEye as a Security Analyst. He is passionate about cyber security and information technology, and is always excited to share his joy with other people at events.
❮
❯


Secure Solution Europe is an agile multi-trade company specialising in security systems (access control, door entry, intercom, CCTV, automated gates and shutters) offering a wide range of services including the installation, commission, maintenance, repair and emergency callouts with several years’ experience.
We pride ourselves on our outstanding professional service provided by our knowledgable engineers and our attention to detail which takes our service delivery beyond the expected. We are dedicated to provide high quality services to our customers who can rely on us.
We strive to implement a long term relationship with our clients, based on high quality, high safety, timely service and an anticipation of their needs.
We offer fast, efficient and reliable services, covering Greater London and the Home Counties.
We aim to provide our customers with a “First Visit Fix” - meaning our engineers attend the property, identify, diagnose and remediate the fault. In some cases we need to re-attend when a specialist part is required or the work takes much longer than it was originally anticipated, but the new appointment is arranged for the client’s convenience.
Our highly skilled, committed workforce helps to tailor our services to meet our clients’ individual needs. We always try to find ways to bring the most advanced and beneficial solutions according to their requirements.
Our most popular services include system design, installation, commissioning, maintenance and repair for the following areas:
And we also offer Emergency call-outs.
We offer design, installation, maintenance and repair professional access control systems for your requirements.
We always find ways to bring the perfect solutions supplied by top manufacturers according to our client’s requirements from a standalone to a multi-door complex system. These systems can also offer great flexibility as they can be managed remotely and integrated with existing security systems.
For further information please do not hesitate to contact us
These systems can also offer great flexibility as they can be integrated with access control systems which enables residents to gain access using a card, a fob or their fingerprints.
Door Entry systems combined with Intercom systems gives the ability to interact with the caller (see or talk to them) before opening the door.
We offer design, installation, maintenance and repair a wide range of quality systems from simple audio intercoms to complex wireless and GSM systems to allowing you to identify the caller.
We only install equipment from leading manufacturers including ACT, Bell System, BPT, Bticino, Comelit, Fermax, Paxton, Urmet, Videx systems.
For further information please do not hesitate to contact us
We offer design, installation, maintenance and repair CCTV systems for your requirements.
We always find ways to bring the perfect solutions according to our client’s requirements. These systems can also offer great flexibility as they can be monitored remotely and integrated with existing security systems.
For further information please do not hesitate to contact us
We take both your security and safety seriously therefore we offer a service to assess your automated gate and advise if there is any upgrade needed in order to keep your gates in good operative order and to comply with health and safety requirements.
Based on the assessment we can provide you with a quotation for the necessary improvement works.
For further information please contact us.
With New Health and Safety Directive in force, all automated gates and shutters must be “FORCE TESTED” to comply with the current legislation. Also we can offer a service to force test your automated gates ensuring that the closing and opening forces are correct according to the British/European Standards and HSE guidance. For further information please contact us.
Prevention is better than cure, regular maintenance is always cheaper than repair work. All systems require maintenance and it is recommended to be carried out at regular intervals depending on the conditions and the volume of usage. Scheduled checking of automated gates and shutters ensures safe and smooth running of the system and prolongs the operational life of them. Also it helps to spot and mitigate any potential problems before they become a major one.
Reasonable gate maintenance agreements are available for all types of automated gates and shutters. For further information please contact us.
We repair any type of electric gate and shutter parts to be as near to their original condition as possible in order to keep your gates and shutters safe and in good operative order.
On most occasions the repair is carried out on our first visit. However, if the repair is more involved and needs replacement parts, we will complete the survey and the visit will be followed by either a quote or a comprehensive report for repairing the issue.
For further information please do not hesitate to contact us.
Keeping essential equipment in operation is paramount. We offer different types of work to ensure our customers find the best one for their requirements and budget.
Our response times are within the following guidelines:
For further information please contact us
Secure Solution Europe Ltd.
Company registration number: 08304498


Once we agree on this structure, we can create issues for each component.
Components
==========
Price service
-------------
Tracks the price of assets based on price strategies defined in config
Prices come from APIs, and CEXs
Strategy manager
----------------
What spread should be maintained? Buy and sell, or only one?
It interprets the strategy, and tells the order manager where orders
should be placed on the DEX Uses the price service to decide order
prices
Order...


Melissa Nsiah
Contact
(current)
Projects
Photos
Send me a message and I'll reply ASAP!
First Name
Last Name
E-Mail
Message
Submit


Geometry World
Hide Info
Instructions
Move the robot using the arrow keys.
Click on black lines to edit them.
Drag numbers from the side of the screen into line parameters to edit them.
Collect all the stars to win!
Credits
Brittany Welsh
: design, coding, writing
William Ono
: design, coding, sound effects
Christel Bodenbender
: design, art/graphics
The background music is
Watching
, by Kristian Taus
, used under a
Creative Commons BY-NC-SA-1.0
license.
Start!
Show Info
Reset Game
Sorry, your browser does not support the
<canvas>
element.


{% extends "help/base.html" %} {% load i18n %} {% block help_con %}
{% trans "Once you and your friends sync a shared file library onto your computers, you may add, delete or edit files in the library together. Every change you make to the library would be automatically synced to others' computers." %}
{% blocktrans %}Sometimes you and your friends may edit the same file at the same time. Your changes may conflict with each other's. In this case, Syncwerk would keep the first version synced to the cloud unchanged, while rename the other version to a "conflict file". A conflict file's name ends with it's author's email address, plus the current time, e.g. test.txt (SFConflict<EMAIL_ADDRESS>2015-03-07-11-30-28).{% endblocktrans %}
{% endblock %}


reporting on sales performance
Copper’s reporting gives you visibility into what’s working and what’s not so you can optimize your sales process.
Real-time insights into sales performance. Copper shows you your best lead sources, top performers, and tracks sales forecasts against your goals.
 Copper provides out-of-the-box dashboards that automatically track your sales data for you including:
ADVANCED REPORTING
Want to see your sales numbers based on pipeline, owner, source, or other factors? You can do that with Copper.
Success Story
Copper is a core part of how we’ll scale and grow. It’s what gives us the data insights we need to get where we want to be.Dave SpeerHOUWZER
ACTIVITY REPORTING
Gain insight into team productivity and learn what actions led to closed business.
Spark friendly competition with sales leaderboards that show who the top performers are by revenue, meetings set, calls made, and emails sent.
See how your sales number is tracking and where you’re going to end up compared to your goal.
See trends in your closed business with a sales history dashboard that shows average monthly sales and average sale value.
See your potential revenue by expected close date in Copper’s sales forecast reports, keep a pulse on your pipeline, and plan ahead.
Turn data into easy-to-understand insights with our Custom Report Builder that connects directly.
Track leads conversion rates to qualified business opportunities so you know what the difference between high quality and low quality leads.
Know who your top performers are by tracking win rates by individual or by team.
Copper helps you understand why you’re losing deals and make adjustments in your strategy.
Build and share reports with data from multiple sources with our Google Data Studio integration.
Start your 14-day free trial today.


TFA seizes P1M plastic scraps
by Bernard GalangOperatives of the Task Force Aguila (TFA) intercepted some P1 million worth of plastic scrap materials as it was about to exit this free port through the Subic-Clark-Tarlac Expressway (SCTEX) gate the other day.
Arnel Maguillo of TFA said they received information that a white wing van truck was about to leave the free port without proper bring out documents.
When intercepted, TFA operatives found an estimated 10 tons of plastic scrap materials inside the container and the truck was brought to the task force office for documentation.
One Jeolyn Salmoro arrived at the TFA office and claimed that she owns the intercepted materials. But she failed to show appropriate documents for the seized materials.
The TFA found out that Salmoro had no accreditation from the Clark Development Corp.
Earlier, TFA operatives also intercepted a white Mitsubishi L300 FB van containing assorted law materials for metal frames from La Forge Designs, Inc.
The driver of the van, according to TFA, “appeared to be a subcontractor of La Forge.”
The items were brought to TFA Headquarters for inventory and temporary impoundment.


Run the main geographic profiling MCMC. Model parameters are taken from the current active parameter set, and MCMC parameters are passed in as arguments. All output is stored within the project.
run_mcmc( project, K = 3, burnin = 100, samples = 1000, auto_converge = TRUE, converge_test = 100, coupling_on = FALSE, cluster = NULL, pb_markdown = FALSE, store_raw = TRUE, create_maps = TRUE, silent = !is.null(cluster), beta_manual = NULL, rung_store = NULL )
| project | an rgeoprofile_project, as produced by the function
|
|---|---|
| K | the number of sources. |
| burnin | the number of burn-in iterations. |
| samples | the number of sampling iterations. |
| auto_converge | whether convergence should be assessed automatically
every |
| converge_test | test for convergence every |
| coupling_on | whether to implement Metropolis coupling. |
| cluster | option to pass in a cluster environment (see package "parallel"). |
| pb_markdown | whether to run progress bars in markdown mode, in which case they are updated once at the end to avoid large amounts of output. |
| store_raw | whether to store raw MCMC output in addition to summary output. Setting to FALSE can considerably reduce output size in memory. |
| create_maps | whether to create maps of posterior probability and geoprofile. Usually will want to create these maps, but the code runs much faster without this step, hence the option. |
| silent | whether to suppress all console output. |
| beta_manual | allows manual specification of thermodynamic powers used. |
| rung_store | Pick a rung whose output will be stored |
Both longitude and latitude values can be represented to a given
precision level using the arguments precision_lon
and
precision_lat
- for example, a precision of 0.01 means that values
are rounded to the nearest hundredth of a degree. This allows the use of
look-up tables for the likelihood calculation, which significantly speeds
up the MCMC. Set to 0 to use exact values (up to C++ "double" precision)
rather than using look-up tables.