 Most of the time this will be your applications
top-level application Form.
As well as a ContainerControl reference the constructor takes
a parameter indicating the visual style required. Currently two display
styles are supported, VisualStyle.IDE for the Visual Studio .NET
appearance and VisualStyle.Plain for the older Visual C++ Version
6 appearance.
The following code shows how to add docking support to a Form
C#
using Crownwood.Magic.Common;
using Crownwood.Magic.Docking;
public class MyForm : Form
{
protected Crownwood.Magic.Docking.DockingManager _dockingManager = null;
public MyForm()
{
InitializeComponent();
// Create the object that manages the docking state
_dockingManager = new DockingManager(this, VisualStyle.IDE);
}
}
VB.NET
Imports Crownwood.Magic.Common
Imports Crownwood.Magic.Docking
Public Class MyForm
Inherits Form
Protected _dockingManager As Crownwood.Magic.Docking.DockingManager
Public Sub New()
InitializeComponent()
' Create the object that manages the docking state
_dockingManager = New DockingManager(Me, VisualStyle.IDE)
End Sub
End Class
|
|
|
|
|
|
|
|
|
|
|
Now we need to provide the docking manager with descriptions of
each dockable unit. This is the purpose of the Content class.
Each Content object creates an association between a title,
image and Control derived object. You should read the full
documentation of this important class before continuing, use this
link.
The following code shows how to create a Content instance and
add it to the docking manager inside the form constructor. It creates
a RichTextBox control that will act as a dockable notepad for
use by the user.
C#
public MyForm()
{
InitializeComponent();
_dockingManager = new DockingManager(this, VisualStyle.IDE);
Content notePad = new Content(_dockingManager);
notePad.Title = "Notepad";
notePad.Control = new RichTextBox();
notePad.ImageList = _internalImages;
notePad.ImageIndex = _imageIndex;
_dockingManager.Contents.Add(notePad);
}
VB.NET
Public Sub New()
InitializeComponent()
_dockingManager = New DockingManager(Me, VisualStyle.IDE)
Dim notePad As New Content(_dockingManager)
notePad.Title = "Notepad"
notePad.Control = new RichTextBox()
notePad.ImageList = _internalImages
notePad.ImageIndex = _imageIndex
_dockingManager.Contents.Add(notePad)
End Sub
As this is such a common operation the process has been streamlined.
There are several overrides of the Contents.Add method that
will create the required Content instance for you during the
Add process. Here is the recommended approach.
C#
public MyForm()
{
InitializeComponent();
_dockingManager = new DockingManager(this, VisualStyle.IDE);
' This will create and add a new Content object all in one operation
_dockingManager.Contents.Add(new RichTextBox(), "Notepad",
_internalImages, _imageIndex);
}
VB.NET
Public Sub New()
{
InitializeComponent()
_dockingManager = New DockingManager(Me, VisualStyle.IDE)
' This will create and add a new Content object all in one operation
_dockingManager.Contents.Add(New RichTextBox(), "Notepad",
_internalImages, _imageIndex)
End Sub
|
|
|
|
|
|
|
|
|
|
|
Just adding a Content instance will not make it visible to the
user. We want our application to make this instance visible immediately,
so we use the ShowContent method as shown below: -
public MyForm()
{
InitializeComponent();
_dockingManager = new DockingManager(this, VisualStyle.IDE);
_dockingManager.Contents.Add(new RichTextBox(),
"Notepad",
_internalImages,
_imageIndex);
// Make the content with title 'Notepad' visible
_dockingManager.ShowContent(_dockingManager.Contents["Notepad"]);
}
This shows how to find a reference to a Content object by using
the string indexer of the Contents collection. In this particular
case it is a little inefficient as we could have stored the Content
reference that is returned from the call to Contents.Add. Here is a
more efficient example: -
public MyForm()
{
InitializeComponent();
_dockingManager = new DockingManager(this, VisualStyle.IDE);
Content notePad = _dockingManager.Contents.Add(
new RichTextBox(), "Notepad", _internalImages, _imageIndex);
_dockingManager.ShowContent(notePad);
}
At some point in the future you may want to hide this instance again in which
case you can use the HideContent method. To make all the Content
instances visible or invisible use the ShowAllContent and HideAllContent
methods respectively.
|
|
|
|
|
|
|
|
|
|
|
Three lines of code and we have a docking window made visible to the user which
can be redocked and resized. However, at no point so far have we specified exactly
where the new Content gets shown. The docking position for a Content
made visible is the saved position from when it was last hidden. In our case the
instance has never been hidden because it has just been created.
The constructor for the Content will default the saved docking position to
be the left edge. Therefore our last example above will display the content inside
a docking window which is docked against the left edge of the application Form.
The value of the Content.DisplaySize will be used to decide how wide the
docking window should be, this defaults to 150, 150.
If you want to dock against a different edge or even begin in the floating state
then you need to do a little more work. The following code shows the use of the
AddContentWithState method to show the content with a defined initial state: -
public MyForm()
{
InitializeComponent();
_dockingManager = new DockingManager(this, VisualStyle.IDE);
Content notePad = _dockingManager.Contents.Add(
new RichTextBox(), "Notepad", _internalImages, _imageIndex);
// Request new Docking window be created and displayed on the right edge
_dockingManager.AddContentWithState(notePad, State.DockRight);
}
|
|
|
|
|
|
|
|
|
|
|
Using the above method allows a docking window to be made visible and its position
defined. But it does have the drawback that it will always create a new docking
window to host the Content instance. What if we want two or more Content
objects to be hosted inside the same docking window? To achieve this we need to bring
another method called AddContentToWindowContent into use.
Each content is always hosted inside a WindowContent derived object. We can
remember the reference of the newly created WindowContent object and reuse it
as the destination for other Content instances. The following example creates
notePad instances that are placed inside the same docking window, when this happens
the docking window will adopt a tabbed appearance: -
public MyForm()
{
InitializeComponent();
_dockingManager = new DockingManager(this, VisualStyle.IDE);
Content notePad1 = _dockingManager.Contents.Add(
new RichTextBox(), "Notepad1", _internalImages, _imageIndex);
Content notePad2 = _dockingManager.Contents.Add(
new RichTextBox(), "Notepad2", _internalImages, _imageIndex);
WindowContent wc = _dockingManager.AddContentWithState(
notePad1, State.DockRight) as WindowContent;
// Add the second notePad2 to the same WindowContent
_dockingManager.AddContentToWindowContent(notePad2, wc);
}
|
|
|
|
|
|
|
|
|
|
|
There is only one more ability we need to add so that any docking configuration
can be constructed at start-up. We need the ability to place docking windows in
the same column or row. To do this we have to understand more about the actual
structure of objects maintained by the docking code.
Docking is supported by providing three levels of object. Each Content
object exists inside a Window derived object which itself exists inside a
Zone derived object. The WindowContent class is a specialization
of the Window base class that has special knowledge about how to handle
Content objects. It is easiest to explain by providing some examples.
The AddContentWithState method creates a new WindowContent instance
and adds to it the provided Content parameter. Next a Zone is created
and the WindowContent instance placed inside it. The Zone is then added
to the hosting Form and positioned according to the State
parameter.
The AddContentToWindowContent adds the provided Content parameter to the
existing WindowContent instance.
The AddContentToZone method creates a new WindowContent instance and
adds to it the provided Content parameter. It then adds the new
WindowContent to the provided Zone in the correct relative position.
The following example shows how to create three notePad objects, where the first two
are added to the same WindowContent causing a tabbed appearance to occur. The
final notePad is created in its own WindowContent and then added to the same
Zone. The position value of 0 will make the second WindowContent
be positioned first in the Zone.
public MyForm()
{
InitializeComponent();
_dockingManager = new DockingManager(this, VisualStyle.IDE);
Content notePad1 = _dockingManager.Contents.Add(
new RichTextBox(), "Notepad1", _internalImages, _imageIndex);
Content notePad2 = _dockingManager.Contents.Add(
new RichTextBox(), "Notepad2", _internalImages, _imageIndex);
Content notePad3 = _dockingManager.Contents.Add(
new RichTextBox(), "Notepad3", _internalImages, _imageIndex);
WindowContent wc = _dockingManager.AddContentWithState(
notePad1, State.DockRight) as WindowContent;
_dockingManager.AddContentToWindowContent(notePad2, wc);
// Add a new WindowContent to the existing Zone already created
_dockingManager.AddContentToZone(notePad3, wc.ParentZone, 0);
}
You can use the Content.ParentWindowContent property to discover
which WindowContent a Content instance is currently placed
inside. Likewise, the WindowContent.ParentZone property indicates
the Zone a WindowContent instance is inside. Using these and
the above-described methods should allow any start up configuration to be
constructed. Note that the Content.ParentWindowContent property returns
null if the Content is not currently visible.
|
|
|
|
|
|
|
|
|
|
|
If you use the SampleDocking application you will notice that you
cannot redock a docking window between a Form edge and either the
MenuControl or StatusBar controls. In order to achieve this effect
we need to define a couple of the docking manager properties.
The OuterControl property needs to be set to the first control in
the Forms.Control collection that represents the group of controls
that the manager must not dock between. Remember that the order of controls in
the Form.Control collection determines the sizing and positioning of them.
So the last control in the collection is the one that is positioned and sized
first, the second to last control will be positioned and sized in the space that
remains.
As the MenuControl is the most important and needs to be positioned first
it will be last in the collection. The StatusBar is the next most important
and so is second to last in the collection. In this scenario the OuterControl
would be set to a reference of the StatusBar control. This will prevent the
docking manager from reordering any window after the StatusBar in the
collection. If the StatusBar was last in the list and the MenuControl
second to last then the OuterControl would need to reference the
MenuControl instead.
The InnerControl property needs to be set to the last control in the
Forms.Control collection that represents the group of controls that the
manager must not dock after. This might seem odd, as there is unlikely to be a
docked window you would not want the docking windows to be placed inside of. However
there is a situation where this becomes important.
If you have a control that is defined as having the Dock property of
DockStyle.Fill then this control must always occur in the Form.Control
collection before any docking windows. Otherwise you can get the situation where the
control with the DockStyle.Fill value is not sized according to the actual
space left over when all docking windows have been placed. Because this control is
further up the list of controls it calculates its size without taking into account
any docking windows that occur earlier in the collection.
The following shows a MenuControl, StatusBar and a RichTextBox
being created and added to the Form.Control collection. It then sets the
correct InnerControl and OuterControl values to generate the expected
runtime operation.
C#
public MyFormConstructor()
{
// This block would normally occur inside a call to:-
// InitializeComponent();
{
RichTextBox filler = new RichTextBox();
filler.Dock = DockStyle.Fill;
Controls.Add(filler);
StatusBar status = new StatusBar();
status.Dock = DockStyle.Bottom;
Controls.Add(status);
MenuControl menu = new MenuControl();
menu.Dock = DockStyle.Top;
Controls.Add(menu);
}
_dockingManager = new DockingManager(this, VisualStyle.IDE);
_dockingManager.InnerControl = filler;
_dockingManager.OuterControl = status;
// Now create and setup my Content objects
...
}
VB.NET
Public Sub New()
' This block would normally occur inside a call to:-
' InitializeComponent();
Dim filler As New RichTextBox()
filler.Dock = DockStyle.Fill
Controls.Add(filler)
Dim status As New StatusBar()
status.Dock = DockStyle.Bottom
Controls.Add(status)
Dim menu As New MenuControl()
menu.Dock = DockStyle.Top
Controls.Add(menu)
_dockingManager = New DockingManager(Me, VisualStyle.IDE)
_dockingManager.InnerControl = filler
_dockingManager.OuterControl = status
' Now create and setup my Content objects
...
End Sub
|
|
|
|
|
|
|
|
|
|
|
Many applications need to be able to remember several different docking
configurations of the Content objects and be able to switch between
them at runtime. You might also want to save the configuration when the
application is shutdown so that it can be restored at start-up. The code to
save and load configurations is as follows:-
// Save the current configuration to a named file
_dockingManager.SaveConfigToFile("MyFileName.xml");
...
// Load a saved configuration and apply immediately
_dockingManager.LoadConfigFromFile("MyFileName.xml");
There are a couple of issues to remember though. The saving process does
not save the actual Content objects but just the state information
it needs in order to restore that Content to the same docking
size/position later. So the Content object must already exist and be
part of the docking manager when the load operation takes place because
loading will not recreate those objects.
The second point is that the save and load use the Title property of
the Content to identify the information. If you change the Title
of a Content object between saving and loading then the latter process
will fail to associate the saved information to the object. This will not
cause an exception but that Content will not be updated with the
required configuration.
If you need to save the configuration information into a database or simply
save it internally then you do not have to save into a file. There are
matching methods for saving and loading into byte arrays which are easy to
store within your application or to a database. For even greater control use
the methods that take a stream object instance, in which case you must create
and provide the stream object instance, but this gives the developer complete
control over the storage medium.
Some developers might find it useful to save and load some additional custom
details inside the configuration data. This prevents the need for two sets of saved
data which then need to be maintained in parallel. The SaveCustomConfig
event is generated when all the docking information has been written and allows
you to add additional information at the end.
On loading the LoadCustomConfig is event is generated so that the corresponding
information can be read back in again. The following sample code shows a trivial example
of this:-
public void InitialiseComponent()
{
...
// Setup custom config handling at appropriate place in code
_manager.SaveCustomConfig +=
new DockingManager.SaveCustomConfigHandler(OnSaveConfig);
_manager.LoadCustomConfig +=
new DockingManager.LoadCustomConfigHandler(OnLoadConfig);
}
protected void OnSaveConfig(XmlTextWriter xmlOut)
{
// Add an extra node into the config to store some example information
xmlOut.WriteStartElement("MyCustomElement");
xmlOut.WriteAttributeString("ExampleData1", "Hello");
xmlOut.WriteAttributeString("ExampleData2", "World!");
xmlOut.WriteEndElement();
}
protected void OnLoadConfig(XmlTextReader xmlIn)
{
// We are expecting our custom element to be the current one
if (xmlIn.Name == "MyCustomElement")
{
// Read in both the expected attributes
string attr1 = xmlIn.GetAttribute(0);
string attr2 = xmlIn.GetAttribute(1);
// Must move past our element
xmlIn.Read();
}
}
|
|
|
|
|
|
|
|
|
|
|
public virtual void ShowAllContents()
Make all hidden Content objects visible.public virtual void HideAllContents()
Make all visible Content objects hidden.public virtual bool ShowContent(Content c)
If the provided object is hidden then it will be restored to become visible.public virtual bool HideContent(Content c)
If the provided object is visible then it will become hidden.public virtual void HideContent(Content c, bool record, bool reorder)
Provides greater control over actions taken when a Content becomes hidden.
This is provided for internal use by the docking windows framework code.
If record is set then it will record the current Content
position before hiding window.
If reorder is set then it will move the Content to the
end of the Contents collection.public virtual Window CreateWindowForContent(Content c)
Used to create an appropriately configured Window object for
the given Content object. Currently this ensures the caption
bar matches the requested style specified in the constructor.public virtual Zone CreateZoneForContent(State zoneState)
Creates an appropriate Zone object and adds it to the managed control.public WindowContent AddContentWithState(Content c, State newState)
Will create an appropriate Window for hosting the provided
Content and place inside a new Zone which is placed
according to the State given.public WindowContent AddContentToWindowContent(Content c, WindowContent wc)
If you already have a reference to a WindowContent object then
this method will add the provided
Content into that object.public Window AddContentToZone(Content c, Zone z, int index)
If you already have a reference to a Zone object then this will
create a new Window to host the provided Content and then
add the Window to the given relative position inside the Zone.public void ReorderZoneToInnerMost(Zone zone)
Repositions the given reference within the list of Form controls
to the innermost valid point.public void ReorderZoneToOuterMost(Zone zone)
Repositions the given reference within the list of Form controls
to the outermost valid point.public byte[] SaveConfigToArray()
Saves layout information into an array of bytes using Encoding.Unicode.public byte[] SaveConfigToArray(Encoding encoding)
Saves layout information into an array of bytes using caller provided
encoding object.public void SaveConfigToFile(string filename)
Saves layout information into a named file using Encoding.Unicodepublic void SaveConfigToFile(string filename, Encoding encoding)
Saves layout information into a named file using caller provided encoding
object.public void SaveConfigToStream(Stream stream)
Saves layout information into a stream object Encoding.Unicode.public void SaveConfigToStream(Stream stream, Encoding encoding)
Saves layout information into a stream object using caller provided
encoding object.public void LoadConfigFromArray(byte[] buffer)
Loads layout information from given array of bytes.public void LoadConfigFromFile(string filename)
Loads layout information from given filename.public void LoadConfigFromStream(Stream stream)
Loads layout information from given stream object.public Rectangle InnerResizeRectangle(Control source)
Used to compute the rectangle of space left over after taking into
account the size of all the docking windows. When a valid source
is provided it will reduce the rectangle by twice the size of those controls
inside of it.public void ResetColors()
Use this to reset all colors to the defaults used when the docking
manager is first created.public void UpdateInsideFill()
Used internally to update the correct inner most docking window with
the correct docking style when a change has occured to docking layout.public void RemoveShowingAutoHideWindows()
If any of the AutoHide windows is currently being shown then this will
remove it from display immediately.public void BringAutoHideIntoView(Content c)
If the given content instance is in the AutoHide mode then it will be
selected and slide out into view.public virtual void OnShowContextMenu(Point screenPos)
Use this method to initiate the docking context menu at given screen location.
|
|
|
|
|
|
|
|
|
|
|
public ContainerControl Container
The object to which the docking manager instance is attached.
Default: nullpublic ManagerContentCollection Contents
The collection of Content objects that the manager is responsible
for docking.public Control InnerControl
Docking windows will not be allowed to dock inside of the specified
control.
Default: nullpublic Control OuterControl
Docking windows will not be allowed to dock outside of the specified
control.
Default: nullpublic bool ZoneMinMax
If more than one Window is docked in the same column/row should
they have a maximize capability.
Default: truepublic bool InsideFill
When defined the innermost docking window will assume the Fill
docking style so that you can create applications whose client area
consists only of docking windows.
Default: falsepublic bool AutoResize
When defined a resizing of the control will cause the docking windows
to be resized smaller if they would start overlapping. Note that the windows
will not be sized bigger again when the control is increased in size.
Default: truepublic Size InnerMinimum
Defines the minimum size of the inner control, if resizing the application
would cause the inner control to become smaller than this then the docking
windows are resized smaller instead.
Default: Size(20, 20)public VisualStyle Style
Read only property returning the style used when the object was created.public int ResizeBarVector
Defines the width/height of resize bars used between docking windows. A value
of -1 will cause the appropriate default value for the selected style to be
used instead.
Default: -1public Color BackColor
Background drawing color used in the caption bar when the docking window is
not selected.
Default: SystemColors.Controlpublic Color ActiveColor
Background drawing color used in the caption bar when the docking window is
selected.
Default: SystemColors.ActiveCaptionpublic Color ActiveTextColor
Text drawing color used in the caption bar when the docking window is
selected.
Default: SystemColors.ActiveCaptionTextpublic Color InactiveTextColor
Text drawing color used in the caption bar when the docking window is not
selected.
Default: SystemColors.ControlTextpublic Color ResizeBarColor
Background color used to draw the resize bar controls between docking windows.
Default: SystemColors.Controlpublic Font CaptionFont
Used when drawing text in the caption bars.
Default: SystemInformation.MenuFontpublic Font TabControlFont
Used when drawing text in the TabControl that appears when multiple content is
shown inside the same docking window.
Default: SystemInformation.MenuFontpublic bool PlainTabBorder
If the appearance is defined as VisualStyle.Plain and this PlainTabBorder
property is defined then a full dumped border is drawn around the docking window content.
Default: false
|
|
|
|
|
|
|
|
|
|
|
public event ContextMenuHandler ContextMenu
Fired when the user right clicks on the caption area of a docking window which
will attempt to show a context menu. Hook into this event to either cancel it
altogether or to customize the menu commands presented to the user.public event ContentHidingHandler ContentHiding
Fired when the user causes a content object to be hidden. Either when the user
presses the close button on the caption bar or closes a floating form in which
case the event is fired for each content in the floating form. Hook into this
event to cancel the close operation from occuring and so preventing the user
from hiding a content.public event ContentHandler ContentHidden
Fired after a content object has been hidden and occurs from either user or
programmatic actions. You cannot prevent the operation occuring as this event is
generated after the content had already been hidden but can be used to perform
extra processing.public event ContentHandler ContentShown
Fired after a content object has been made visible and occurs from either user
or programmatic actions. You cannot prevent the operation occuring as this event
is generated after the content had already been shown but can be used to
perform extra processing.public event TabControlCreatedHandler TabControlCreated
Fired whenever the docking windows code needs to create a TabControl instance
for use inside a docking window. When generated the control has already been
created and setup with the default properties, but use this event to customize
the properties as required.public event SaveCustomConfigHandler SaveCustomConfig
Fired when persisting out configuration information about the current docking
windows layout. The event is fired at the end of the process and allows the
developer to add custom XML information into the output stream.public event LoadCustomConfigHandler LoadCustomConfig
Fired when persisting in configuration information to restore the docking
configuration to a previously saved state. The event is fired at the end of the
loading process and allows the developer to read back the custom data they
saved previously.Delegate Signatures
void ContextMenuHandler(PopupMenu pm, CancelEventArgs cea);
void ContentHidingHandler(Content c, CancelEventArgs cea);
void ContentHandler(Content c, EventArgs cea);
void TabControlCreatedHandler(Magic.Controls.TabControl tabControl);
void SaveCustomConfigHandler(XmlTextWriter xmlOut);
void LoadCustomConfigHandler(XmlTextReader xmlIn);
|
|
|
|
|
|
|
|
|
|
|
|
|
| Copyright 2003 Crownwood Consulting Ltd. All Rights Reserved |
|
|
|
|


Configure PHP to make sessions time-out after a certain period of inactivity.
Limiting session life-time makes it harder to hijack sessions.
To make sessions time-out after a certain period of inactivity, edit the php.ini file to include the following directive:
session.gc_maxlifetime = 600
The snippet above sets the idle time-out period to 600 seconds.


Object Linking and Embedding (OLE) stored procedures and,
238
On-Line Analytical Processing (OLAP),
35,
39,
45,
46
Open Database Connectivity (ODBC),
8,
9,
47,
52,
54
Configuration Assistant in,
77–78,
78
isolation levels and,
476
ENABLE QUERY OPTIMIZATION and,
407
ORDER BY,
79,
210,
227,
268,
271,
285–287,
358,
592, 595, 596
user-defined data types and,
227
Database Connection Services (DCS) directory in,
181–182,
181
syntax of SELECT statement in,
304


Ups Normal Cafe & Restaurant is a perfect location and no matter the occasion, you are guaranteed with unique dining experience. Whether you are after an intimate dinner for two or a private party, we cater for all. Ups Normal has a function room for up to 40 people. The room has its own bar and sound system so you can enjoy a truly sensational and private event.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Reiciendis ab debitis sit itaque totam, a maiores nihil, nulla magnam porro minima officiis! Doloribus aliquam voluptates corporis et tempora consequuntur ipsam, itaque, nesciunt similique commodi omnis.
“ Thank you for catering our lunch! It was delicious and fresh! Cannot stop raving about it! ”
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Reiciendis ab debitis sit itaque totam, a maiores nihil, nulla magnam porro minima officiis!
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, consequatur. Aliquam quaerat pariatur repellendus veniam nemo, saepe, culpa eius aspernatur cumque suscipit quae nobis illo tempora. Eum veniam necessitatibus, blanditiis facilis quidem dolore! Dolorem, molestiae.
Far far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts.
 The performance may be by a single musician, sometimes then called a recital, or by a musical ensemble, such as an orchestra, choir, or band.
Our private event lunch and dinner menus change seasonally and offer several choices to accommodate a variety of tastes, while our wine list has more than 100 selections from small producers around the world.
Making a reservation at Ups Normal Cafe & Restaurant is easy and takes just a couple of minutes. All you have to do is input your name,input number of visitor and the date and time you require. Please contact the restaurant directly as they may be able to assist. We look forward to welcoming you soon.


domestic | fire | escape lighting | 2010
Every
building
must be designed and
constructed
in such a way that
in the event of an outbreak of fire within the
building
, illumination is
provided to assist in escape.
2.10.0 Introduction
In seeking to escape from a
building
the occupants will find it easier if the
escape routes
are illuminated. Specifically dedicated escape lighting is not
necessary within
dwellings
as it is assumed the occupants will have a degree
of familiarity with the layout, and
escape routes
only begin at the door to the
dwelling
. However in
buildings
containing
flats
and
maisonettes
, the common
escape routes
should be illuminated to assist the occupants of the
building
to
make their way to a
place of safety
.
In the case of
conversions
, as specified in regulation 4, the
building
as
converted
shall meet the requirements of this standard (regulation 12,
schedule 6).
2.10
—
2.10.0
domestic | fire | escape lighting | 2010
2.10.1
Escape route
lighting
Escape route
lighting utilises the artificial lighting within the
building
, but
should be supplied by a fire protected circuit.
Every part of an
escape route
should have artificial lighting supplied by a
protected circuit that provides a level of illumination not less than that
recommended for emergency lighting. Where artificial lighting serves a
protected zone
, it should be via a protected circuit separate from that
supplying any other part of the
escape route
.
Artificial lighting supplied by a protected circuit need not be provided if a
system of emergency lighting is installed.
2.10.2 Protected circuits
A protected circuit is a circuit originating at the main incoming switch or
distribution board, the conductors of which are protected against fire.
Regardless of what system is employed,
escape routes
should be capable of
being illuminated when the
building
is in use. In
conversions
for example, it
may be easier to install self-contained emergency luminaries than to install a
protected circuit to the existing lighting system.
2.10.3 Emergency lighting
Emergency lighting is lighting designed to come into, or remain in, operation
automatically in the event of a local and general power failure.
Emergency lighting should be installed in
buildings
considered to be at higher
risk. In a
building
containing
flats
or
maisonettes
emergency lighting should
be provided in the following areas:
•
an underground car park including any
protected zone
serving it, where
less than 30% of the perimeter of the car park is open to the external air;
•
a
protected zone
or
unprotected zone
serving a
basement storey
or a
protected zone
or unprotected zone in a high rise domestic.
The emergency lighting should be installed in accordance with BS 5266: Part
1: 2005 as read in association with BS 5266: Part 7: 1999 (BS EN: 1838:
1999).
In order to assist the evacuation of occupants in
high rise domestic buildings
,
every
protected lobby
,
protected zone
(including
escape stairs
) and any other
associated
escape route
should be provided with emergency lighting
designed and installed in accordance with BS 5266: Part 1: 2005 as read in
association with BS 5266: Part 7: 1999 (BS EN: 1838: 1999).
2.10.1
—
2.10.3


About
Work
Contact
Hi I'm Cam.
Welcome to my dev page.
Check out some of my projects
CSS/HTML Projects:
Tribute Page
Technical Documentation Page
Product Landing Page
Survey Form Page
JavaScript Projects:
Coming Soon
Visual Basic Projects:
Coming Soon
You can contact me at...


Operator
Operator: object
date.after
date.after: string = "date.after"
date.before
date.before: string = "date.before"
date.between
date.between: string = "date.between"
date.day-of-month
date.day-of-month: string = "date.day-of-month"
date.day-of-month-after
date.day-of-month-after: string = "date.day-of-month-after"
date.day-of-month-before
date.day-of-month-before: string = "date.day-of-month-before"
date.day-of-week
date.day-of-week: string = "date.day-of-week"
date.day-of-week-after
date.day-of-week-after: string = "date.day-of-week-after"
date.day-of-week-before
date.day-of-week-before: string = "date.day-of-week-before"
date.hour
date.hour: string = "date.hour"
date.hour-after
date.hour-after: string = "date.hour-after"
date.hour-before
date.hour-before: string = "date.hour-before"
date.month
date.month: string = "date.month"
date.month-after
date.month-after: string = "date.month-after"
date.month-before
date.month-before: string = "date.month-before"
date.year
date.year: string = "date.year"
fulltext
fulltext: string = "fulltext"
geopoint.near
geopoint.near: string = "geopoint.near"
missing
missing: string = "missing"
number.gt
number.gt: string = "number.gt"
number.inRange
number.inRange: string = "number.inRange"
number.lt
number.lt: string = "number.lt"
similar
similar: string = "similar"
A doubly linked list-based Least Recently Used (LRU) cache. Will keep most recently used items while discarding least recently used items when its limit is reached.
Licensed under MIT. Copyright (c) 2010 Rasmus Andersson http://hunch.se/ Typescript-ified by Oleksandr Nikitin https://tvori.info
Illustration of the design:
entry entry entry entry ______ ______ ______ ______ | head |.newer => | |.newer => | |.newer => | tail | | A | | B | | C | | D | |______| <= older.|______| <= older.|______| <= older.|______|
removed <-- <-- <-- <-- <-- <-- <-- <-- <-- <-- <-- added


We provide the best food
At the Right Price
Happy Hour
Party TIme
Breakfast
Lunch
Dinner
We give alot of care to the way we prepare our meals, Fast food is not an exception. We use approved Ingredients and equipments to ensure your food reaches your plate not only delicious by hygenic too. Oh and we have in-house made sauces that will makes Your Toungue sing all the way. We offer quick service and the best!
See, our drinks recipes have years in the making. We started with simple blends of fresh fruits and now we have a combo of juice fruit blends that leaves tongue satisfied and every thirst quenched. We source our fruits directly from farmers, clean them and perfectly store them so it is ready for you whenever you are!


Welcome to our age checker
Made by real humans
Who were definitely not slaves
We promise
Please enter your date of birth, Earthling!
At what earth age do you expect to die?
Which planet would you like to check?


Although Jest may be considered a React-specific test runner, in fact it is a universal testing platform, with the ability to adapt to any JavaScript library or framework. In this section we’d like to link to community posts and articles about integrating Jest into other popular JS libraries.


|
LTAPI
API to access LiveTraffic's aircraft information
|
#include <memory>
#include <string>
#include <list>
#include <map>
#include <chrono>
#include "XPLMDataAccess.h"
Go to the source code of this file.
Classes | |
| class | LTAPIAircraft |
| Represents one aircraft as controlled by LiveTraffic. More... | |
| struct | LTAPIAircraft::LTAPIBulkData |
| Bulk data transfer structur for communication with LTAPI. More... | |
| struct | LTAPIAircraft::LTAPIBulkData::BulkBitsTy |
| struct | LTAPIAircraft::LTAPIBulkInfoTexts |
| Bulk text transfer structur for communication with LTAPI. More... | |
| struct | LTAPIAircraft::LTLights |
| Structure to return plane's lights status. More... | |
| class | LTAPIConnect |
| Connects to LiveTraffic's dataRefs and returns aircraft information. More... | |
| class | LTDataRef |
| Represents a dataRef and covers late binding. More... | |
Typedefs | |
| typedef std::unique_ptr< LTAPIAircraft > | UPtrLTAPIAircraft |
| Smart pointer to an TLAPIAircraft object. More... | |
| typedef std::map< std::string, UPtrLTAPIAircraft > | MapLTAPIAircraft |
| Map of all aircrafts stored as smart pointers to LTAPIAircraft objects. More... | |
| typedef std::list< UPtrLTAPIAircraft > | ListLTAPIAircraft |
| Simple list of smart pointers to LTAPIAircraft objects. More... | |
| struct LTAPIAircraft::LTAPIBulkData::BulkBitsTy |
| Class Members | ||
|---|---|---|
| bool | bcn: 1 | beacon light |
| unsigned | filler: 2 | unused, fills up to 8 byte alignment |
| bool | land: 1 | landing lights |
| bool | nav: 1 | navigaton lights |
| bool | onGnd: 1 | Is plane on ground? |
| LTFlightPhase | phase: 8 | flight phase, see LTAircraft::FlightPhase |
| bool | strb: 1 | strobe light |
| bool | taxi: 1 | taxi lights |
| typedef std::list<UPtrLTAPIAircraft> ListLTAPIAircraft |
Simple list of smart pointers to LTAPIAircraft objects.
This is used to return aircraft objects which got removed by LiveTraffic, see LTAPIConnect::UpdateAcList()
| typedef std::map<std::string,UPtrLTAPIAircraft> MapLTAPIAircraft |
Map of all aircrafts stored as smart pointers to LTAPIAircraft objects.
This is what LTAPIConnect::UpdateAcList() returns: a map of all aircrafts. They key into the map is the aircraft's key (most often the ICAO transponder hex code).
The value is a smart pointer to an LTAPIAircraft object. As we use smart pointers, object storage is deallocated as soon as objects are removed from the map. Effectively, the map manages storage.
| typedef std::unique_ptr<LTAPIAircraft> UPtrLTAPIAircraft |
Smart pointer to an TLAPIAircraft object.


Graphic Tab Function:
Press a key to move the cursor:
(plan ) North (top of sheet)
nw | ne
W E R
West--S D--East
Z X C
sw | se F Lower
South V Higher
Press . (period) to set the tab distance: (DimLen)
The initial value of DimLen is 1'0" .
Press > (greater) to set the tab angle: (DimAngZ)
The initial value of DimAngZ is 45 degrees.
Directions are valid in any view, even perspective, and can be used to compose in any view.


Modes
ZAP has a 'mode' which can be:
- Safe - no potentially dangerous operations permitted.
- Protected - you can only perform (potentially) dangerous actions on URLs in the scope.
- Standard - does not restrict anything.
- ATTACK - new nodes that are in scope are actively scanned as soon as they are discovered.
It is recommended that you use the Protected mode to ensure that you only attack sites that you mean to.
The mode can be changed via the toolbar
(or the ZAP API) and is persisted between sessions.
Examples of the things that will not be possible in either Safe mode or in Protected mode when not acting on URLs in the Scope:
- Spidering
- Active Scanning
- Fuzzing
- Force Browsing
- Breaking (intercepting)
- Resending requests
You can define the Scan Policy to be used for the Attack mode the Options Active Scan screen.
See also


@brucefenton @dieguito @pwuille Could build your own chain & secure it with Bitcoin. I won't do a whole marketing pitch, but just let you check out the documentation for @KomodoPlatform. Oh it's open source so just launch some tests from CLI. If you want the marketing side...


Umgeni Water Marathon
Howick RSA
Website: www.collegiansharriers.co.za/umgeni.htm
Race Winners (19
runnings)
11 Mar
2007
12
Mar 2006
2005
14
Mar 2004
22 Mar 2003
2002
2001
2000
1999
1998
Notes: 1998 is believed to have been the inaugural year.
This course is two loops along the reservoir behind the Midmar Dam in the
KwaZulu-Natal Midlands.
13
Mar 2016
2:43:24
Muzi Madikwa (RSA)
3:13:54
Lisa Collett (RSA)
15
Mar 2015
2:36:07
Mlondi Zuma (RSA)
3:16:23
Cary-Ann Smith-2
16
Mar 2014
2:37:33
Sanele Ndlela (RSA)
3:12:09
Cary-Ann Smith (RSA)
24
Mar 2013
2:36:36
Luzuko Mdeliswa (RSA)
3:18:57
Pat Damann (RSA)
25
Mar 2012
2:37:07
Muzi Madikwa (RSA)
3:01:47
Melanie vanRooyen-2
20 Mar 2011
2:33:29
Washington Zuma-2
3:11:45
Kerry Koen (RSA)
14
Mar 2010
2:33:36
Washington Zuma (RSA)
2:56:24
Suzette Botha (RSA)
08 Mar
2009
2:31:39
Vusumuzi Sokhela (RSA)
3:11:51
Melanie vanRooyen (RSA)
09
Mar 2008
2:30:53
Bongani Mthembu (RSA)
3:22:31
Julie Shadwell (RSA)
2:33:15
Emanuel Nzama Mthembeni (RSA)
3:16:06
Grace deOliveira-2
2:30:15
Sandile Mahlangu (RSA)
3:11:39
Xolisile Mpulo (RSA)
---
n/a
---
n/a
2:26:28
Arnold Motsoeneng (RSA)
3:33:44
Sajida Abdool (RSA)
2:34:37
Godfrey Koki (ZIM)
3:05:40
Grace deOliveira (RSA)
2:31:24
Calvin Dlamini (RSA)
---
n/a
2:27:52
Jabulani Mnikhati (RSA)
---
n/a
---
n/a
---
n/a
---
n/a
---
n/a
---
n/a
---
n/a
Most Wins
(1998/date)
Men
2
Washington Zuma (RSA)
2010-11
Women
2
Grace deOliveira (RSA)
2003,2007
Melanie vanRooyen (RSA)
2008,2012
Cary-Ann Smith (RSA)
2014-15
Prize Money
(ADR qualified runners)
No prize money has been awarded at this race.
Race Time Bias
(sec/km)
Insufficient data to calculate the race time bias.
Competitive Level
(1990-date)
Insufficient data to calculate the competitive level.
Quality Performances
Men No men under 2:20 Women No women under 2:50
Last Updated on 19 Mar 2016
Contributor: Riel Hauman (24), Klaas Loonstra (16)


@* * This is the main template for the Admin UI. Note that it is *not* used by the attendee-facing front end. * * It takes two arguments, a `String` for the title of the page and an `Html` * object to insert into the body of the page. *@ @(title: String)(content: Html)
@* We use Bootstrap for the main styling of the Admin UI *@ @* DataTables CSS *@ @* Here's where we render the page title `String`. *@


Simple SIR model:
new World size:<400> add People quantity:<200> People Behavior Random_Walk Random_Walk speed:<1> adjust People WhenSick <0>% People Behavior WhenSick Sneeze Sneeze radius:<10> Sneeze duration:<10> Sneeze frequency:<50>% Sneeze infectiousness:<25>% add Plane Plane frequency:<10> Plane quantity:<5> adjust Plane WhenSick <5>% atTime <100> add Intervention TravelBan TravelBan adjust Plane frequency <2>
Start
Stop
Reset
Complete Run
Run 50 iterations
Clear Graph


AMFI :
List |
Portfolio Amount & Weight (%) |
Amount & Deficit by rank |
Deficit by amount |
Notable exclusions |
Notable inclusions
Indices :
List |
Industries Count & Companies Count by Industries
Gold & ETF/Index :
Gold & ETF/Index |
Demat Summary :
List |
Ticker Only |
By Company Rank |
By Company Rank with Reco |
By amount invested |
Distribution - captype (count, amount, pct)
Demat Transaction :
List |
Gap in Months |
statistics - cumulative |
statistics - buy & sell |
Dividend :
List |
Dividend Paying Companies (Sorted by Dividend Amount) |
Dividend Paying Companies (Sorted by Dividend Frequency)
Mutual Fund :
Mutual Fund (mf) List |
Portfolio :
ReBalance |


The HTML


Kiwi women are working for free
by New Zealand Council of Trade UnionsKiwi women are working for free
From Monday 18 November New Zealand women are working for free until the end of the year because of the gender pay imbalance between men and women.
"The gender pay imbalance in the average wage is 11.9%. From 18 November there is 11.9% of the year left, so because women aren’t paid equally to men, they are now working for free until the end of the year," said CTU Vice President Rachel Mackintosh.
"Ensuring everyone is paid fairly regardless of gender is not only possible, it is essential. Creating a more equal society requires a shift in values, it requires our society to value the contribution of everyone. Creating a values shift in our society requires leadership which is where our politicians come in. Our elected representatives can show they truly care about creating a more equal society with the passing of good law which breaks down the barriers to equal pay. We need the Government to pass the Equal Pay Amendment Bill and help make the gender pay imbalance in New Zealand a thing for the history books."
"Pay inequality is even worse for Māori and Pasefika women - they started working for free on 12 October for Māori women (22.1% pay gap) and 29 September for Pacefika women (25.5%)."
"If the gender pay gap continues to close at the same rate it has since 1998, it will be 100 years - 2119 - until women are on average paid the same as men. It will take 36 years (to 2055) on the median wage trend," Mackintosh said.
ENDS


Headless demo using React and Kaliko CMS
This demo project includes both a sample installation of Kaliko CMS as well as a small React application that consumes content through the content API. The main purpose is to show how to fetch content from a decoupled application.
The React application loads and renders CMS content from the start page as well as all articles published under the start page.
Start the project and access the React application by going to /react-app/build/index.html.
For more information
Find more information about this demo project over at GitHub.
Find more information about how to use Kaliko CMS as a headless CMS here.
If you have any questions, please post in the support forum.
Access admin for this demo project
You need to create a user before accessing the administration interface. This is done by opening SetupAdminAccount.aspx in the project root and follow the instructions given there.
Once the user has been created, go to /admin/.
React source code
You'll find the source code for the React application in the \react-app\src\-folder of this project. The requests are being made using axios in the HomePage component (located in the features\home\-folder).
To start the React development server by - standing in the \react-app\-folder - run:npm start
Exploring the content API
Get all page types
/contentapi/v1.0/pagetype/all
Get all article pages
/contentapi/v1.0/pagetype/1/pages
Get the start page
/contentapi/v1.0/page/startpage
Get the start page by ID
/contentapi/v1.0/page/{id}
Get all children of the start page
/contentapi/v1.0/page/{id}/children


Several members of Parliament meet at Azmin's residence tonight
by BernamaPUTRAJAYA (Nov 18): Several members of Parliament (MPs) gathered at the official residence of Economic Affairs Minister Datuk Seri Mohamed Azmin Ali in Precinct 10, here tonight.
However, the motive of the meeting and the number of lawmakers involved remained unknown at press time.
Housing and Local Government Minister Zuraida Kamaruddin, Deputy Transport Minister Datuk Kamaruddin Jaffar and Cameron Highlands MP Ramli Mohd Noor were among those spotted leaving the residence in their respective cars before midnight.
A catering van was also spotted leaving the residence at 10.40pm.
The effort to get Mohamed Azmin’s comment on the meeting, however, was unsuccessful. — Bernama


Welcome To The World Of Music
Here is an PDF object
Here is an embedded object, which might not work due to the unavailability of Adobe flash player!
We have a short audio clip from my favourtie song
We have a video down here to show:
The figure tag can be used to show something like this:
AVICII
Click here for the full song


Beta This is a test version of the layout of this page. Take the survey to help us improve it
Guidance
Guidance on the policies and documents that governing bodies and proprietors of schools must have.
Ref: DFE-00057-2014 PDF , 376KB , 20 pages
Ref: DFE-00057-2014 MS Word Document , 117KB
This is for:
It applies to all schools.


Guillaume Calmettes
The $\chi^2$, statistic to compare proportions to "hypothesized" proportions.
Note:
The $\chi^2$ test for independance can also be applied to a 2x2 contingency table, and will give you the same results (p-value or confidence intervals) than if you were comparing the difference in proportions, or the ratio of the two proportions.
| Response variable |
Explanatory var. | |
| Cat. #1 | Cat. #2 | |
| Yes | 50 | 65 |
| No | 30 | 45 |
So far, we’ve learned how to do inference for a difference in means IF the categorical variable has only two categories (i.e. compare two groups)
Today, we’ll learn how to do hypothesis tests for a difference in mean (or median) across multiple categories (i.e. compare more than two groups)
As young students in Australia, Dominic Kelly and his friends enjoyed watching ants gather on pieces of sandwiches. Later, as a university student, Dominic decided to study this with a more formal experiment. He chose three types of sandwich fillings to compare:
To conduct the experiment he randomly chose a sandwich, broke off a piece, and left it on the ground near an ant hill. After several minutes he placed a jar over the sandwich bit and counted the number of ants. He repeated the process, allowing time for ants to return to the hill after each trial, until he had eight samples for each of the three sandwich fillings.
Dominic's data are shown below:
| Number of ants visiting sandwiches | ||||||||||
| #1 | #2 | #3 | #4 | #5 | #6 | #7 | #8 | $\bar{x}$ | $s$ | |
| Vegemite | 18 | 29 | 42 | 42 | 31 | 21 | 38 | 25 | 30.75 | 9.25 |
| Peanut Butter | 43 | 59 | 22 | 25 | 36 | 47 | 19 | 21 | 34.0 | 14.63 |
| Ham & Pickles | 44 | 34 | 36 | 49 | 54 | 65 | 59 | 53 | 49.25 | 10.79 |
Do ants have a preferential sandwich filling?
$H_0$: $\mu_\texclass{warning}{1}=\mu_\texclass{info}{2}=\mu_\texclass{danger}{3}$
$H_a$: At least one $\mu_i=\mu_j$
We have 3 groups. Why not just carry out a bunch of pair-wise analyses of the difference in mean?
$H_0$: $\mu_\texclass{warning}{1}\neq\mu_\texclass{info}{2}$
$H_0$: $\mu_\texclass{warning}{1}\neq\mu_\texclass{danger}{3}$
$H_0$: $\mu_\texclass{info}{2}\neq\mu_\texclass{danger}{3}$
Each test is carried out at $\alpha=0.05$, so the risk of making a Type I error is $5\%$ each time (rejecting the null when it's true).
These risk of making a Type I errors increases as we multiply the number of tests on the same data:
We need to make multiple comparisons with an overall Type I error of $\alpha=0.05$ (or whichever level is specified). We need an alternative approach that uses one overall test that compares all means at once.
Last time we used an overall test ($\chi^2$) to compare multiple proportions, we can probably do the same for comparing means.
If we have two means to compare, we just need to look at their difference (or ratio) to measure how far apart they are.
Suppose we wanted to compare three means. How could I create something that would measure how different all three means are?
Calculate the average differences between the three means!
| $\bar{x}$ | $s$ | |
| Vegemite | 30.75 | 9.25 |
| Peanut Butter | 34.0 | 14.63 |
| Ham & Pickles | 49.25 | 10.79 |
$d_1=30.75-34.0=\texclass{success}{-3.25}$
$d_2=34.0-49.25=\texclass{success}{-15.25}$
$d_3=49.25-30.75=\texclass{success}{18.5}$
How can we combine those 3 differences into a single statistic of interest so they don't cancel out?
The average (or mean) of the absolute value of the differences in the conditional means, referred as the MAD statistic, provides a measure of how far appart the sample means are on average.
For the ants/sandwiches study:
$\mathrm{MAD}=\frac{\mid d_1\mid + \mid d_2 \mid + \mid d_3 \mid}{3}$
$\mathrm{MAD}=\frac{\mid-3.25\mid+\mid-15.25\mid+\mid-18.5\mid}{3}$
$\mathrm{MAD}=12.33$
The average distance between one of the means to another is 12.33.
The average difference in number of ants that are attracted by a sandwich compared to another one is 12.33. Is it a lot or not?
$H_0$: There is no association between which kind of sandwich is left on the ground and the number of ants that are attracted by it.
All the three long term means ($\mu$) are the same.
$H_0$: $\mu_\texclass{warning}{1}=\mu_\texclass{info}{2}=\mu_\texclass{danger}{3}$
$H_a$: There is an association between the kind of sandwich and the number of ants that are attracted.
$H_a$: at least one of the mean is different
$H_0$: There is no association between which kind of sandwich is left on the ground and the number of ants that are attracted by it.
All the three long term means ($\mu$) are the same.
$H_0$: $\mu_\texclass{warning}{1}=\mu_\texclass{info}{2}=\mu_\texclass{danger}{3}$
If the sandwich filling doesn't affect the number of ants that are attracted, then all the numbers of ants Dominic recorded for each of his trials could have been observed for any of the sandwich fillings.
All the numbers of ants recorded could have come from the same population, and this repartition of numbers just happened by chance.
To simulate the null hypothesis, we have to randomize the groups (shuffle all the pooled numbers of ants observed per filling), redistribute these shuffled numbers into 3 groups (same sample size than original groups) and calculate the resulting MAD statistic each time.
$MAD_\mathrm{original}=12.33$
| Number of ants visiting sandwiches | |||||||||
| #1 | #2 | #3 | #4 | #5 | #6 | #7 | #8 | $\bar{x}$ | |
| Vegemite | 18 | 29 | 42 | 42 | 31 | 21 | 38 | 25 | 30.75 |
| Peanut Butter | 43 | 59 | 22 | 25 | 36 | 47 | 19 | 21 | 34.0 |
| Ham & Pickles | 44 | 34 | 36 | 49 | 54 | 65 | 59 | 53 | 49.25 |
| Number of ants visiting sandwiches | |||||||||
| #1 | #2 | #3 | #4 | #5 | #6 | #7 | #8 | $\bar{x}$ | |
| Vegemite | 47 | 49 | 22 | 42 | 31 | 65 | 38 | 25 | 39.88 |
| Peanut Butter | 53 | 34 | 43 | 21 | 21 | 59 | 54 | 25 | 38.75 |
| Ham & Pickles | 18 | 19 | 44 | 36 | 42 | 29 | 36 | 59 | 35.37 |
$MAD_1=3.0$
| Number of ants visiting sandwiches | |||||||||
| #1 | #2 | #3 | #4 | #5 | #6 | #7 | #8 | $\bar{x}$ | |
| Vegemite | 44 | 29 | 36 | 36 | 43 | 42 | 19 | 25 | 34.25 |
| Peanut Butter | 59 | 25 | 18 | 34 | 47 | 53 | 31 | 21 | 36 |
| Ham & Pickles | 22 | 21 | 49 | 65 | 42 | 59 | 54 | 38 | 43.75 |
$MAD_2=6.33$
Repeat this process 10000 times! ($MAD_1 ... MAD_{10000}$)
We obtain 10000 MAD statistics that could have been observed if there was no association between the sandwich filling and the number of ants attracted to it.
Where does the initial MAD statistic lies in this distribution? What is the probability of getting such an extreme statistic by chance?
The probability of observing such a difference in the number of ants attracted by the sandwiches if the filling had no effect would be $1.3\%$.
There is evidence that ants do not prefer sandwich fillings equally.
From this null hypothesis testing, we can conclude that ants do not prefer sandwich fillings equally. Which filling is particularly attractive?
Several options are possible as follow-up test:
Vegemite vs Peanut Butter:
$30.75 - 34.0 = -3.25$ with $95\%$ CIs ($-14.75, 7.50$)
Vegemite vs Ham & Pickles:
$30.75 - 49.25 = -18.50$ with $95\%$ CIs ($-27.50, -9.375$)
Peanut Butter vs Ham & Pickles:
$34.0 - 49.25 = -15.25$ with $95\%$ CIs ($-26.75, -3.00$)
Ham & Pickles is a big hit at every party in the ant world!
Our original data did not have obvious outliers and the mean was a good-enough descriptor for each of our groups, but other datasets to analyze could contain anomalies.
What could we do if this happen?
Same thing but using the median!!
Just calculate a MAD-like statistic using the median of each group instead of the mean (Mean Median Difference).
Using resampling, you can adapt your statistic of interest depending on the caracteristics of your data!
Pros:
Cons??:
Like for comparing multiple proportions ($\chi^2$), comparing multiple means also has its own more complex statistic with a distribution that can be pretty much modeled by theory.
This new statistic is called an $F$-statistic and the resampling-based (or theory-based) distribution that estimates the null distribution is called an $F$-distribution.
What is this $F$-statistic?
Consider those 3 groups (same mean in left and right panels). Intuitively, in which case the groups seem more different from one to another? Why?
Total
variability
Variability
between groups
Variability
within groups
For the same total variability, the greater the variability between groups will be compared the the variability within groups, the more likely the groups will be different from one to another.
An ANalysis Of VAriance (ANOVA) is a comparison between the variability between groups to the variability within groups. The statistic of interested that reflex this comparison between the two types of variability when performing an ANOVA is the $F$-statistic.
Total
variability
Variability
between groups
Variability
within groups
How to measure variability between groups?
How to measure variability within groups?
How to compare the two measures?
How to determine significance?
To caracterize the variability between groups, we are considering how far each sample mean ($\bar{x}_k$) is from the "Grand mean" ($\bar{x}$, mean of the means)
To caracterize the variability within groups, we are considering how far each data point ($x_{ik}$) inside each sample is from the sample mean ($\bar{x}_k$).
Total
variability
Variability
between groups
Variability
within groups
$\sum_{i=1}^n(x_{i}-\bar{x})^2$
$\sum_{k=1}^{nk}n_{ik}(\bar{x}_k-\bar{x})^2$
$\sum_{i=1}^{n}(x_{ik}-\bar{x}_k)^2$
To caracterize the variability between groups, we are considering how far each sample mean ($\bar{x}_k$) is from the "Grand mean" ($\bar{x}$, mean of the means)
To caracterize the variability within groups, we are considering how far each data point ($x_{ik}$) inside each sample is from the sample mean ($\bar{x}_k$).
Total sum of squares (SST)
Sum of squares due to groups (SSG)
"Error" sum of squares (SSE)
$\sum_{i=1}^n(x_{i}-\bar{x})^2$
$\sum_{k=1}^{nk}n_{ik}(\bar{x}_k-\bar{x})^2$
$\sum_{i=1}^{n}(x_{ik}-\bar{x}_k)^2$
The $F$-statistic is a ratio of the variability between groups and the variability withing groups, but uses the mean variability instead of the total variability for each component.
$F=\frac{\texclass{warning}{\textrm{Mean variability between groups}}}{\texclass{info}{\textrm{Mean variability within groups}}}$
$F=\frac{\texclass{warning}{\textrm{Mean SSG}}}{\texclass{info}{\textrm{Mean SSE}}}=\frac{\texclass{warning}{\textrm{SSG}/(k-1)}}{\texclass{info}{\textrm{SSE}/(n-k)}}$
Notes:
The $F$-statistic equation can then be expressed as:
Note:
Don't worry, nobody calculates it by hand, it would be very tedious. You can rely on technology to do the hard work for you.
The $F$-statistic is just another statistic, like the MAD, this doesn't change the approach to compare different groups.
Null hypothesis testing:
To simulate the null hypothesis, we have to randomize the groups (number of ants observed per filling) and calculate the resulting $F$-statistic each time.
$F_\mathrm{original}=5.63$
| Number of ants visiting sandwiches | |||||||||
| #1 | #2 | #3 | #4 | #5 | #6 | #7 | #8 | $\bar{x}$ | |
| Vegemite | 18 | 29 | 42 | 42 | 31 | 21 | 38 | 25 | 30.75 |
| Peanut Butter | 43 | 59 | 22 | 25 | 36 | 47 | 19 | 21 | 34.0 |
| Ham & Pickles | 44 | 34 | 36 | 49 | 54 | 65 | 59 | 53 | 49.25 |
| Number of ants visiting sandwiches | |||||||||
| #1 | #2 | #3 | #4 | #5 | #6 | #7 | #8 | $\bar{x}$ | |
| Vegemite | 47 | 49 | 22 | 42 | 31 | 65 | 38 | 25 | 39.88 |
| Peanut Butter | 53 | 34 | 43 | 21 | 21 | 59 | 54 | 25 | 38.75 |
| Ham & Pickles | 18 | 19 | 44 | 36 | 42 | 29 | 36 | 59 | 35.37 |
$F_1=0.21$
| Number of ants visiting sandwiches | |||||||||
| #1 | #2 | #3 | #4 | #5 | #6 | #7 | #8 | $\bar{x}$ | |
| Vegemite | 44 | 29 | 36 | 36 | 43 | 42 | 19 | 25 | 34.25 |
| Peanut Butter | 59 | 25 | 18 | 34 | 47 | 53 | 31 | 21 | 36 |
| Ham & Pickles | 22 | 21 | 49 | 65 | 42 | 59 | 54 | 38 | 43.75 |
$F_2=1.06$
Repeat this process 10000 times! ($F_1 ... F_{10000}$)
We obtain 10000 $F$-statistics that could have been observed if there was no association between the sandwich filling and the number of ants attracted to it.
Where does the initial $F$-statistic lies in this distribution? What was the probability of getting such an extreme statistic by chance?
The probability of observing such a difference in the number of ants attracted by the sandwiches if the filling had no effect would be $1.3\%$.
There is evidence that ants do not prefer sandwich fillings equally.
Using the $F$-statistic as our statistic of interest, we obtained the same p-value than when we used the $MAD$, and our conclusions will be the same, i.e. that ants do not prefer sandwich fillings equally. Which filling is particularly attractive?
Several options are possible as follow-up test (like for the MAD analysis ):
Vegemite vs Peanut Butter:
$30.75 - 34.0 = -3.25$ with $95\%$ CIs ($-14.75, 7.50$)
Vegemite vs Ham & Pickles:
$30.75 - 49.25 = -18.50$ with $95\%$ CIs ($-27.50, -9.375$)
Peanut Butter vs Ham & Pickles:
$34.0 - 49.25 = -15.25$ with $95\%$ CIs ($-26.75, -3.00$)
Ham & Pickles is a big hit at every parties in the ant world!
The distribution of the $F$-statistic under the assumption that the null hypothesis is true can be described theoretically by a particular distribution, called $F$-distribution, which depends on the degrees of freedom for the variability between $(k-1)$ and within (n-k) groups.
A p-value is obtained by computing the area under the curve for $F\geq F_{original}$.
(Here again, the p-value obtained is pretty close to what we calculated and the conclusions of our study will be the same).
If you use the MAD, the idea behing comparing multiple ($>2$) means is the same than when you compared only two means.
MAD-like statistics can be designed to fit your particular dataset or study (if you want to analyse the average relative risk, this is possible too).
The MAD can only be performed using a resampling approach (no theory to describe the distribution of the MAD or MAD-like statistics)
The $F$-statistic compares the variability between groups (sample means) to the variability within groups (variance withing the groups). The bigger the difference between groups compared to the variability within groups, the bigger the $F$-statistic.


Package: keychain
summary: Key manager for OpenSSHdescription: Keychain is an OpenSSH key manager, typically run from ~/.bash_profile. When keychain is run, it checks for a running ssh-agent, otherwise it starts one. It saves the ssh-agent environment variables to ~/.keychain/$HOSTNAME-sh, so that subsequent logins and non-interactive shells such as cron jobs can source the file and make passwordless ssh connections. In addition, when keychain runs, it verifies that the key files specified on the command-line are known to ssh-agent, otherwise it loads them, prompting you for a password if necessary
categories: Utils
depends: openssh
source package: keychain
maintainer(s): Jari Aalto (Use the mailing list to report bugs or ask questions. Do not contact the maintainer(s) directly.)
- x86_64
| Version | Package Size | Date | Files | Status |
|---|---|---|---|---|
| 2.6.8-1 | 30 KiB | 2016-11-02 00:00 | [list of files] | stable |
| 2.7.1-1 | 32 KiB | 2018-03-02 00:00 | [list of files] | stable |


{% extends "base_site.html" %} {% load static %} {% load i18n %} {% block extrastyle %} {% endblock %} {% block extrascript %} {% endblock %} {% block content_title %}
| # of tasks | {{project.task_set.count}} |
| Completed | {{project.completed.count}} |
| Running | {{project.running.count}} |
| Waiting | {{project.waiting.count}} |
| Failed | {{project.failed.count}} |
| Held | {{project.held.count}} |
| Priority | Task | Entry | Composition | Running since | Module | Extra arguments |
|---|---|---|---|---|---|---|
| {{j.priority}} | {{j.id}} | {{j.entry.id}} | {{j.entry.name}} | {{j.created}} | {{j.module}} | {{j.kwargs}} |
| Entry | Composition | Running since | Module | Status | Extra arguments | Action | |
|---|---|---|---|---|---|---|---|
| {{j.entry.id}} | {{j.entry.name}} | {{j.created}} | {{j.module}} | {{j.last_job_state}} | {{j.kwargs}} | {% if j.last_job_state != 1 %}{% endif %} |
Note: "status=1" means tasks are running successfully. Otherwise, it is highly recommended to reset the tasks (Press the "Reset" or "Restart ALL" button). If on repeated resets, the task still keeps returning to "state=0", try the "Reset Entry" button (Note: this will recompute the entry from scratch).


#include <md5.h>
Definition at line 65 of file md5.h.
Definition at line 67 of file md5.h.
Definition at line 66 of file md5.h.
Definition at line 68 of file md5.h.


The Swear of the Month Club was founded in March of 2015 by Cory O’Brien, creator of Myths RETOLD. He did it out of the goodness of his heart, a lifelong love of swearing, and a desire for internet money.
Originally, subscribers received one or two neologisms per month, but the club gradually transformed into a linguistic soapbox from which to deliver authoritative pronouncements on the finer points of applied swearology.
In mid-2018, Cory decided it was a shame to keep all this cutting edge swear research locked up behind a paywall, and so this site was born. Here you will find the last years’ worth of articles, free of charge. If you want the rest … well, they’re archived on Patreon.
You can follow Cory here, or email him here.
If you like this kind of shit, you should also check out Strong Language.


Select Table
Users
Tv Shows
Insert Page
Id
First Name
Last Name
Email
Password
Phone Number
Gender
Favorite Genre
Address
Birth Year
isAdmin
Show ID
Name
First Air Date
Origin Country
Original Language
Popularity
Ruppin Popularity
Poster
Episode Number
Episode Name
Ruppin Popularity
Date
Poster


Peak 'OK Boomer' Reached As Naruto Voice Actor Says It On Camera
by Cecilia D'AnastasioOnly a couple of weeks into the meme, we’ve already reached peak “OK boomer.” How do I know that? Someone got Naruto’s voice actor to say it at a convention this weekend, and frankly, I don’t think I ever need to hear it again.
In a Reddit post, an attendee of Minneapolis convention Galaxy Con asked actor Maile Flanagan, who voices the anime hero Naruto, to say the line. Here is is in case you’d like to sample it in your EDM track or—just a suggestion—loop it 200 times to make it your ringtone:
(Posted on Reddit by user That-One-Ho1, and ripped to Twitter.)
If If you do decide to do anything with it—again, a suggestion—please post your monstrosities in the comments.


Today I had the most mindblowing experience of my entire life. I recently ordered a vial of 10x Salvia and it came in about 2 days ago. Last night after work while I was alone in my room, I packed maybe 1/15 of a gram into my water bong and ignited it using a regular bic lighter. I laid down on my bed and stared at my windows. Within 20 seconds of taking the hit, I felt like I had eaten about 2 grams of mushrooms and was in the coming up stage. Mushrooms are the only other trip I've been on. This feeling totally subsided within 20 minutes. I could sense that there was great power in this drug.
I woke up today and started getting ready for school. My friend Alex called me and asked if I wanted to skip school and give the salvia a shot.  We met up and drove around for a couple hours since my mom didn't leave for a couple hours after I left for school. We got something to eat, smoked a joint, and picked up a butane lighter. When we got back, my friend Alex eagerly measured out a bowl (About 1/14th a gram) and smoked it in the bong using the butane lighter. He sat down and began to laugh hysterically. When I saw the fun he was having, I packed my dose in the bong and took my hit.
I remember holding in my hit and laying on the floor where I had a pillow that was pretty dirty from my hardwood floors, it felt really sandy to me and my clothes began to feel extremely uncomfortable and tight-fitting. I no longer wanted to lay down on this pillow. So far, only about 10 seconds had passed. I stood up and thatís when it hit me. Like a train. My entire field of vision kept flashing and twisting. The best way I can explain it I guess was that it was like a strobe light was on and everything was spinning. The flashes began to speed up and I walked over to my bed which Alex was still tripping on. I grabbed a pillow from the bed because I guess I knew I was about to go down hard. I fell to my knees and looked around my room.
I remember that it felt like a dream or a nightmare, but I had not the slightest clue who or where I was, nor did I have any clue I had taken any sort of drug. I collapsed onto the pillow on the floor with my eyes closed. I'm not sure if I was conscious or not, but I was lying on a cement square about 6 cubic feet somewhere in a vast desert. My friend Alex was not even looking at me, but laughing hysterically and I perceived this as a great voice miles above me laughing at me like I was a freak.  I began to come back to reality. Here are my thoughts exactly:
'I'm Kyle. That's Alex over there and he's laughing because he smoked Salvia. Wait I did too. I wasn't really in the desert.
Little by little I began to piece together what had happened to me. This was the most intense experience I've ever had and I've been known to eat 4 1/2 grams of mushrooms like it was candy. I'd like to do it again I suppose, I think I might do it this weekend. If it's worth writing about, maybe you'll hear from me again, this time knowing what to expect. I guess I kind of underestimated Salvia. If it's legal it can't be that bad right? Wrong. I don't recommend trying Salvia if you haven't tripped before. I have and it still took me for a ride.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


K-pop singer Goo Hara found dead at home aged 28
by AFPSEOUL: K-pop star Goo Hara was found dead at her home on Sunday, South Korean police confirmed.
Goo, a former member of girl group Kara, was discovered at her home in Seoul early on Sunday evening, officers said.
The exact cause of death was still under investigation, they added.
South Korea has one of the world’s highest rates of suicide which, according to recent government figures, is among the top causes of death for those under 40.
The 28-year-old’s death comes a month after Sulli —another K-pop star and Goo’s close friend — took her own life after a long struggle with online bullying.
The singer had posted a tearful message on her Instagram shortly after Sulli’s death, grieving the passing of her friend.
In messages posted on social media, fans mourned Goo’s death, with one writing: “I hope you have a good sleep in heaven without any worries.”
After performing in Kara from 2008 to 2015, she focused on her solo career after the group broke up and had just completed a tour of Japan with her latest release.


--- title: "BEWITCHING BIRDS & FANTASTICAL FLORA" date: "2000-01-01 20:07:20 -06:00" categories: - summer subtitle: "ONLINE VIRTUAL SUMMER CAMP" layout: "events" event-image: "fantastical-flora-virtual-camp.jpg" event-dates: "PARTNER CAMP WITH TRACY AVIARY" event-location: "Online via Zoom" button-type: "register" tickets-link: "https://6059.blackbaudhosting.com/6059/Bewitching-Birds-and-Fantastical-Flora-K-2nd" registration-info: " Phone Registration Available: Call Tracy Aviary:<PHONE_NUMBER>" instructor-info: "" member-cost: "$100" public-cost: "$100" event-notes: "online" tickets-button: "" published: false ---
MONDAY-THURSDAY, JULY 20-23 @ 9am - 4pm
For Kindergarten - 2nd Graders
Registration Required through Tracy Aviary
Explore the magic of plants with Red Butte Garden as you discover the extraordinary traits of trees, flowers, and shrubs from around the world. Then, virtually migrate to Tracy Aviary to learn about amazing adaptations of birds - including some that seem straight from fairy tales. You’ll uncover the magic of the plant and animal kingdoms through magic experiments, fantastical art projects, and more!
For more information about Tracy Aviary's virtual summercamps, please visit https://tracyaviary.org/virtualsummercamps


Focused and enthusiastic developer with a keen interest in Software & Web Development. I am a passionate individual who thrives to build and apply algorithms to solve real-world industry problems. I am always on lookout for new opportunities and challenges, feel free to reach out.
B.Tech in Electronics & Communication Engineering
FYP on 5G small cell hetnets
Software development Intern
<EMAIL_ADDRESS>+91<PHONE_NUMBER>


Under the proposed framework, Ofsted will evaluate how effectively local authorities discharge their school improvement functions, particularly in areas where schools are not yet good or are not improving quickly enough.
Ofsted wants to introduce the local authority inspections to ensure that all children and young people have access to a good quality education irrespective of where they live.
In a speech to delegates at the North of England Education Conference last month, HM Chief Inspector, Sir Michael Wilshaw, said that despite year on year improvements, it was unacceptable that 30 per cent of schools, educating 2.3 million children, fell short of being good. He said that Ofsted was committed to investigating the reasons why parents living in local authority areas with the same demographics and levels of deprivation had such widely varying opportunities of finding a good school. In introducing this new framework, Ofsted is looking forward to working with local authorities and other stakeholders to help raise standards and improve lives.
Sir Michael announced that under the new framework Ofsted would carry out inspections where there is evidence of local authorities failing to demonstrate effective leadership or fulfil their statutory duties to promote high standards and fair access to educational opportunity for their children.
Sir Michael said:
If England has any pretentions to be a world-leading education system, we must have higher ambitions and be absolutely committed as a nation to doing something about the wide variations in standards across our country.
Ofsted is proposing to focus inspection where it is needed most, meaning that not all local authorities will be inspected within a prescribed or regular interval. A number of indicators will determine whether an inspection is required such as the proportion of children who attend a good or better school, attainment levels across the local authority, children’s rates of progress in relation to starting points, and the volume of qualifying complaints to Ofsted about schools in a local authority area.
Local authorities will be judged on how well their education and training functions promote improvement, high standards and the fulfilment of educational potential of children and young people in schools.
During inspections, Ofsted will consider:
-
the effectiveness of corporate and strategic leadership of school improvement
-
the extent to which the local authority knows its schools and other providers, their performance and the standards they achieve and how effectively support is focused on areas of greatest need
-
the effectiveness of the local authority’s identification of, and appropriate intervention in, underperforming schools and other providers
-
the impact of local authority support and challenge over time and the rate at which schools and other providers are improving
-
the extent to which the local authority brokers support for schools and other providers
-
the effectiveness of strategies to support highly effective leadership and management in schools and other providers
-
support and challenge for school governance
-
the use of funding to effect improvement, including how it is focused on areas of greatest need.
Rather than a four point scale to judge effectiveness (that is, outstanding, good, requires improvement or inadequate), Ofsted will instead assess the strengths and weaknesses, and the impact, of education and training functions and arrive at a conclusion of whether such functions are being exercised effectively or not.
The findings of the inspections will be published in a letter and local authorities deemed not to be providing an acceptable standard of service delivery may be re-inspected.
Ofsted seeks the widest possible range of views from those who have an interest in, or expertise relating to, local authority support services to ensure that the framework takes proper account of the needs and circumstances of all interested parties.
The closing date for the consultation is 19 March 2013 and inspections are planned to begin on 1 May 2013.
Notes to editors
-
‘A good education for all: inspection of local authority services’
is available online.
-
Ofsted has powers to inspect particular functions which are carried out by a local authority under section 136 of the Education and Inspections Act 2006. This includes inspection of the local authority’s performance of its duties in relation to education and training. The Secretary of State may also require the Chief Inspector to carry out such an inspection.


Boost your productivity
Decode & achieve your goals using PBoard!
SIGN UP // LOGIN
Awesome Features
Clear, Organized, Faster
✓ Decode your ultimate goal
Organize those into yearly, monthly & weekly goals.
✓ Declutter your brain
Using MIT (most important tasks) & To-Do sections
✓ To-Be list
For self improvement & Repetitive Tasks section to accomplish daily life tasks.
✓ Easy Performance Analysis
Compare and keep track of your progress using beautiful charts & statistics.
✓ Divide and Rule!
Divide each task into subtasks and accomplish more!


Doctors have advised shifting Nawaz to US for treatment: PML-N
by Our CorrespondentLAHORE: Pakistan Muslim League-Nawaz (PML-N) Spokesperson Marriyum Aurangzeb on Monday said doctors treating ailing former premier Nawaz Sharif have advised that he be shifted to the United States.
She said the PML-N supremo’s medical reports showed there was an 88 per cent blockage in the arteries circulating blood to his brain.
“Doctors have advised him to consult an expert in the United States. However, transporting him there poses an immense challenge for the medical team,” the spokesperson said.
Marriyum said Nawaz is also expected to undergo a biopsy in light of his latest PET scan. “There has been no improvement in his platelet count despite the high doses of steroids, which were also causing his blood sugar levels to rise,” she said, adding that the reason for the decreasing platelet count is yet to be ascertained.
Three-time former prime minister Nawaz, who is currently receiving treatment at the Harvey Clinic in London, travelled to the British capital in an air ambulance accompanied by younger brother Shehbaz Sharif and personal physician Dr Adnan Malik on November 20 – four days after the Lahore High Court directed the federal government to remove his name from the Exit Control List (ECL) for four weeks.
Prior to that, Nawaz, who is serving a seven-year prison sentence in the Al Azizia corruption reference, was granted eight-week bail on medical grounds by the Islamabad High Court on October 27.
But the deposed prime minister had refused to accept the Pakistan Tehree-e-Insaf (PTI) government’s condition to submit an indemnity bond as a guarantee for his return to the country after treatment.


Studiocanal Turning Horror Short ‘Baghead’ into a Feature Film
by John SquiresAlberto Corredor‘s creepy horror short from a couple years back, Baghead is getting a feature film adaptation courtesy of Studiocanal, with Corredor himself on board to direct.
Deadline details, “[Baghead] revolves around a mysterious figure called Baghead, a diminutive wrinkled up person who is able to manifest the dead and bring them back to our world for short intervals. People seek out the mysterious medium to reconnect with lost loved ones. Once in contact with Baghead however, the title character’s true powers and intentions are revealed and there is a high price to pay for its contact with the deceased.”
“The feature transfer will build on that story line and take a Saw-like approach, adding in supernatural elements.”
Andrew Rona and Alex Heineman of The Picture Company are set to produce, with Roy Lee (Vertigo) and Jake Wagner (Alibi) executive producing alongside Corredor and Lorcan Reilly.


Home
News
Contact
About
WillFinder
WillFinder
Articles
How to Motivate your teen: coming from a teen.
May 25th, 2021
This is the first test post on this website, May 21 2021
This is the first test post on this website, May 21 2021
This is the first test post on this website, May 21 2021
This is the first test post on this website, May 21 2021
This is the first test post on this website, May 21 2021
This is the first test post on this website, May 21 2021
This is the first test post on this website, May 21 2021
About Me
Image
Some text about me in culpa qui officia deserunt mollit anim..
Popular Post
Image
Image
Image
Follow Me
Some text..
Articles
How to Motivate your teen: coming from a teen.
May 25th, 2021
This is the first test post on this website, May 21 2021
This is the first test post on this website, May 21 2021
This is the first test post on this website, May 21 2021
This is the first test post on this website, May 21 2021
This is the first test post on this website, May 21 2021
This is the first test post on this website, May 21 2021
This is the first test post on this website, May 21 2021
About Me
Image
Some text about me in culpa qui officia deserunt mollit anim..
Popular Post
Image
Image
Image
Follow Me
Some text..


Styleguide code licensed under MIT, documents licensed under a Creative Commons Attribution 3.0 United States License. I2P is an anonymous network, exposing a simple layer that applications can use to anonymously and securely send messages to each other.
Templates and styles based on the Reproducible Builds styleguide.


M'Explore 2020
HOME
(current)
ABOUT
DEPARTMENT
EVENTS
WORKSHOPS
CONTACT US
REGISTRATION
GALLERY
M'EXPLORE 2020
National level technical symposium
is temporarily on hold amid Covid-19 effect in our country.. Further updates will be intimated


All Eyez on Me
All Eyez on Me is a movie starring Demetrius Shipp Jr., Danai Gurira, and Kat Graham. Tells the true and untold story of prolific rapper, actor, poet and activist Tupac Shakur.


BusyBoard: no more interruptions during meetings
Working from home has become the norm since the start of the COVID-19 pandemic for me, and it doesn’t look like this will change in the near future. As working from home goes hand in hand with online meetings it can come in handy to be able to notify members of your household that you are busy and prefer not to be interrupted. While there are low-tech solutions available (e.g. putting a rubber band on the door knob …) I decided to make a web app to do this.
During tech job interviews it seems to be common practise to ask applicants to develop a small piece of software during a rather limited amount of time. Only having worked in academia this concept is foreign to me! To check how I would hold up during such an interview, I decided to set a time limit for myself of four hours (half a working day) and see how far I would get.
Picking the right tools
To do this efficiently it is imperative to pick the right tools for the job. As this is a webapp, using Flask is for me a given as this is the framework I’m most comfortable with. We’ll need a database and a way to add/change/remove data so Flask-SQLAlchemy and Flask-Admin are pretty solid options. Furthermore, I’ll need a CSS library to make the front-end look acceptable with little effort. Typically Bootstrap is my goto library for larger projects, though here it would be a little overkill for the intended purpose. Milligram on the other hand is great for small projects. Unfortunately, Milligram doesn’t support panels/cards out of the box, which I really needed to get the layout I had in mind. Given it would be a fair amount of work to implement these from scratch, ultimately I landed on Bulma.
Finally, having some pre-established code skeleton to get started with can come in handy. You could use a cookiecutter for Flask to create a basic app with just a few commands. Though as I never used these, I grabbed some code from a previous project MemoBoard which uses a lot of the same components.
The first hour: Getting a basic app running
You can find the code I whipped up in a little under an hour here. It leverages the boilerplate code from MemoBoard and Flask-Admin to get data in the database and comes with a very basic template (text only) to show who is and isn’t busy. It worked, but it was ugly.
The next two hours: Making it look nice
The layout left much to be desired, so this was improved by adding some CSS to the template. The Bulma CSS framework was great to quickly make some cards for each user, and after some tweaking it looked great. Using some of the more advanced options from Flask-Admin it was also made easy to change the status of users from the admin panel. Though, at this stage I also decided to make it possible for users to add their picture. Flask-Uploads can be used to handle the uploads and there are some options to integrate this with Flask-Admin, which are documented on here. This took a few attempts and a fair amount of time was lost figuring out that Flask-Uploads wasn’t compatible with the most recent version of Werkzeug.
So about three hours into the project ended up with this version. Interesting bits of the code are highlighted here.
The last hour: The final touches
One last feature I really wanted, was to show when someone’s status was updated. An elegant solution here is to hook into an SQLAlchemy event that triggers before an entity is updated. This allows you to change the field last change right before the data is changed into the database. This can also be accomplished in just a few lines of code and will guarantee that any change made through SQLAlchemy to a user, will update the field. To get the timedelta between the current time and the last change in a human readable format the Arrow library is awesome and easy to use.
 As this is about as traditional a Flask app can be I was able to defer a lot to the official documentation.
The Code
If you want to see how this project evolved you can see the commit history in the GitHub repository.
models.py
The database model, only one table is present for users, there are a couple properties to play along with Flask-Upoads and Arrow. Though the cool part is the function on_change and the last line which hooks this on the before_update event of SQLAlchemy. With this small bit of code, each time an entry is changed, the field last_update is automatically updated as well.
from busyboard import db, images
from datetime import datetime
import arrow
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Text)
busy = db.Column(db.Boolean)
busy_with = db.Column(db.Text)
can_be_disturbed = db.Column(db.Boolean)
notes = db.Column(db.Text)
path = db.Column(db.Unicode(128))
last_change = db.Column(db.DateTime, default=datetime.utcnow)
@property
def url(self):
if self.path is None:
return
return images.url(self.path)
@property
def filepath(self):
if self.path is None:
return
return images.path(self.path)
@property
def last_changed(self):
age_arrow = arrow.get(self.last_change)
return age_arrow.humanize()
@staticmethod
def on_change(mapper, connection, target):
target.last_change = datetime.utcnow()
db.event.listen(User, 'before_update', User.on_change)
admin.py
The very first release just used the default ModelView from Flask-Admin. This is great to get started and requires virtually no code at all to get a CRUD interface for a table, for more fine grained control a little extra work is required.
column_editable_list for instance is nice to set, as this allows records to be edited directly from the overview page. CustomIndexView is defined here to hide the Home button in the admin panel (which serves no purpose) and replace the link behind the name with a link to the main app (so you can easily return to the app after making a change) .
The function _list_thumbnail adds a thumbnail preview once an image is uploaded and there is some additional code in the class to link this to the model. The ImageUploadField is added here to allow users to upload an image and write the path to the model in one sweep while preventing users to meddle with the path themselves.
from flask import redirect, url_for
from flask_admin.contrib.sqla import ModelView
from busyboard import form
from jinja2 import Markup
import os
import uuid
from werkzeug import secure_filename
from flask_admin import expose, AdminIndexView
def _list_thumbnail(view, context, model, name):
if not model.filename:
return ''
return Markup(
'<img src="{model.url}" style="width: 150px;">'.format(model=model)
)
class UserAdminView(ModelView):
form_columns = ('name', 'busy', 'busy_with', 'can_be_disturbed', 'notes', 'path')
form_excluded_columns = ('last_updated')
column_editable_list = ('name', 'busy', 'busy_with', 'can_be_disturbed', 'notes')
form_create_rules = ('name', 'busy', 'busy_with', 'can_be_disturbed', 'notes', 'path')
form_edit_rules = ('name', 'busy', 'busy_with', 'can_be_disturbed', 'notes', 'path')
can_create = True
column_formatters = {
'image': _list_thumbnail
}
form_extra_fields = {
'path': form.ImageUploadField(
'Image',
base_path='busyboard/static/images',
url_relative_path='images/',
)
}
class CustomIndexView(AdminIndexView):
def is_visible(self):
# This view won't appear in the menu structure
return False
@expose('/')
def index(self):
return redirect(url_for('main_route'))
init.py
Here is all the code to set up the busyboard app, nothing really surprising here apart maybe the createdb
section.
This adds an command line interface option to create the database using flask createdb
import os
from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy
from flask_admin import Admin, form
from busyboard.admin import UserAdminView, CustomIndexView
from flask_uploads import UploadSet, IMAGES, configure_uploads, patch_request_class
db = SQLAlchemy()
images = UploadSet('images', IMAGES)
def create_app(config):
# Set up app, database and login manager before importing models and controllers
# Important for db_create script
app = Flask(__name__)
app.config.from_object(config)
db.app = app
db.init_app(app)
configure_uploads(app, (images))
patch_request_class(app, 16 * 1024 * 1024)
from busyboard.models import User
admin = Admin(app, name='BusyBoard', template_mode='bootstrap3', index_view=CustomIndexView())
admin.add_view(UserAdminView(User, db.session, endpoint='users'))
@app.route('/')
def main_route():
users = User.query.all()
return render_template('index.html', users=users)
@app.cli.command()
def createdb():
"""
function to create the initial database and migration information
"""
SQLALCHEMY_DATABASE_URI = app.config['SQLALCHEMY_DATABASE_URI']
if SQLALCHEMY_DATABASE_URI.startswith('sqlite:///'):
path = os.path.dirname(os.path.realpath(SQLALCHEMY_DATABASE_URI.replace('sqlite:///', '')))
if not os.path.exists(path):
os.makedirs(path)
db.create_all(app=app)
return app
Conclusion
In about four hours I was able to create a rather funny little app that met all my requirements. This really is a testament to how much you can do with very little time and coding using Python and its ecosystem. It was also interesting to simulate how such a job interview would go, though in case this was serious I would have spend more time on adding tests rather than having users’ images.
Liked this post ? You can buy me a coffee


screener package¶
Submodules¶
screener.crawler module¶
This module represents a web crawler. It gets the data from Alpha Vantage’s API
-
screener.crawler.
add_last_row
(dict, df)[source]¶ Adds a row to the dataframe when the API’s values are updated :param dict: The dictionary with all the data :type dict: dict :param df (: obj:’pandas.DataFrame’:): Stock’s dataframe
-
screener.crawler.
get_dictionary
(ticker, interval)[source]¶ Gets the dictionary that stores all the data from the API :param ticker: Ticker Symbol :type ticker: str :param interval: Time interval :type interval: str
Returns: The dictionary that stores timestamps and the stock’s data Return type: dict
-
screener.crawler.
get_url
(ticker, interval)[source]¶ Sets the URL :param ticker: Ticker Symbol :type ticker: str :param interval: Time interval :type interval: str
Returns: The final URL for the API Return type: str
-
screener.crawler.
parse_dictionary
(dict, current_day)[source]¶ Parse the data from the API’s dictionary :param dict: The dictionary with all the data :type dict: dict :param current_day: Today’s day as an integer :type current_day: int
Returns: obj:’pandas.DataFrame’: The dataframe with dates as indices, and open, high, low, close, and volume values
screener.indicators module¶
This module contains the mathematical formulas to calculate several stock indicators
-
screener.indicators.
movingaverage
(values, window)[source]¶ Calculates a Simple Moving Average :param values: The integer value of the current moving average :type values: int :param window: The window used to calculate the current moving average :type window: int
Returns: The Moving Average with the specified values Return type: int
-
screener.indicators.
rsi_function
(prices, period=14)[source]¶ Calculates the Relative Strength Index (RSI) :param prices: The integer value of the current moving average :type prices: [int] :param period: The number of data points used to calculate the RSI :type period: int
Returns: The list containg the values for the RSI Return type: [int]
screener.intraday_stock module¶
This module plots the candlesticks, volume, moving averages, and RSI
-
screener.intraday_stock.
animate
(i, ticker, stock_name, period, df, fig, MA1, MA2)[source]¶ Updates and animates the graph :param i: Interval :type i: int :param ticker: Ticker symbol :type ticker: str :param stock_name: Stock’s namespace :type stock_name: str :param period: Intraday period (1 or 5 min) :type period: int :param df (: obj:’pandas.DataFrame’:): Stock’s dataframe :param fig (: obj:’matplotlib.figure.Figure’:): Figure :param MA1: Fast Simple Moving Average :type MA1: int :param MA2: Slow Simple Moving Average :type MA2: int
-
screener.intraday_stock.
candlestick_graph_settings
(ax1)[source]¶ Configures the Candlesticks plot :param ax1 (: obj:’matplotlib.axes.Axes’:): Main axis
-
screener.intraday_stock.
graph_data
(stock, df, fig, MA1, MA2)[source]¶ Graphs everything :param stock: Stock’s name :type stock: str :param df (: obj:’pandas.DataFrame’:): Stock’s dataframe :param fig (: obj:’matplotlib.figure.Figure’:): Figure :param MA1: Fast Simple Moving Average :type MA1: int :param MA2: Slow Simple Moving Average :type MA2: int
-
screener.intraday_stock.
rsi_graph_settings
(axrsi)[source]¶ Configures the RSI plot :param axrsi (: obj:’matplotlib.axes.Axes’:): RSI axis
screener.main module¶
This is the main module. It parses the command line arguments and runs the script
-
screener.main.
get_name_from_ticker
(ticker)[source]¶ Returns the company’s name from its ticker Symbol :param ticker: Ticker Symbol :type ticker: str
Returns: The name of the company at index 0 Return type: tuple
-
screener.main.
get_stock_from_name
(name)[source]¶ Returns all the companies in the database that match a given name :param name: The name of the company to search for :type name: str
Returns: The symbol and name of all the companies found in the database Return type: tuple
screener.stock_database module¶
This module contains the functions for database management


New Payment Options has been introduced for ticket bookings.
Mobile Booking is now resumed w.e.f. 05-April-2012.
ID proof is required for getting student concession on tickets.
Ticket Bookings On Mobile: Now book your movie ticket -ANYWHERE ANYTIME through your Mobile Phones.
You are advised not to carry inflammable/dangerous/explosive articles as part of their luggage and also to desist from smoking in the movie halls. Please update your mobile number in our profile to receive SMS alerts for your ticket booking.
Never purchase e-ticket from unauthorized agents or persons.
No refund will be granted on cancellation of tickets .


What if you are running concurrent tests? How many people will end up being a test subject for more than one experiment? This example attempts to show this sort of re-distribution.
First step is to create 1,000 user account identifiers (generated GUIDs), and then ...
Next, we simply divide them into two test groups plus a control group:
Finally, we take those same 1,000 users, but re-distribute them in a similar sized, but different test. The colors below matches the colors in the first test above.


{% extends "sentry/bases/modal.html" %} {% load i18n %} {% block title %}{% trans "Remove Account" %}{% endblock %} {% block main %} {% trans "Scheduled for Removal" %} {% trans "Your account has been deactivated and scheduled for removal." %} {% trans "Thanks for using Sentry! We hope to see you again soon!" %} {% endblock %}
{% trans "Your account has been deactivated and scheduled for removal." %}
{% trans "Thanks for using Sentry! We hope to see you again soon!" %}


When you're ready to handle a vote, wait for the Co-Ordinator to send around the usual bleating mail to the mailing list asking for some volunteer to handle a vote because he has to put up shelves/work too hard/go yak herding in Patagonia.

If you have questions, ask on the UKVoting mailling list. But don't give away results in your questions.
If other members ask questions, keep them confidential if they pertain to votes in progress.
If a UKVoting member is the proponent, use caution. If you are that proponent, be on your best behavior.
Voting in a CFV you are running is highly frowned upon. It is best to just not do it. Believe me, it'll save you a lot more hassle than a single vote is worth!
The coordinator will tell you that it has been assigned to you. This is the "passing of the baton." You should then get the proponent's latest RFD (which can be found in uk.net.news.announce) and the Template CFV. At this point, the proposal becomes your responsibility and you have the corresponding authority as votetaker.
Contact the proponent to notify them that you will be the votetaker for their proposal and that you are writing the CFV.
This can also be a good time to tell the proponent a few things like:
Since you can't take a position on the proposal, you will refer any voters with questions or comments about its content to them.
Write the CFV based on the latest RFD.
Send a copy to the proponent for review.
When the proponent says the CFV is OK, send it to the uk.net.news.announce moderator at<EMAIL_ADDRESS>The CFV including headers should be an attachment to a message which tells the moderator the name of the proposal if it's cross-posted to any moderated newsgroups (list them) where the places are that he needs to fill in dates (usually two: expires and voting deadline). This is followed by the headers and CFV such that the moderator can clip out the remaining lines in the message and post them.
This should be done approximately halfway through the voting period. The subject should now start with "2nd CFV:".
Do not disclose results, even to the proponent, before they are posted in uk.net.news.announce. It's hard to know whether a proponent will be able to restrain themselves or how they'll tell others. When results time arrives, there is a possibility that many people will have an equal interest as the proponent in the results.