Inversion of Control with React Native Components
On 26 December 1945, the CFA Franc, a currency still used by many former French colonies in Africa, was created. At the time, after World War 2, the French Franc (the one actually used in France and previously used in the colonies) had been devalued to maintain a fixed exchange rate against the dollar, and France, in its gracious and loving paternity, didn't want the exports from its colonies to receive a lower value, reducing the amount of money available in the colonial economy.
This new currency had a fixed exchange rate to the dollar. To ensure that the exchange rate could remain fixed, the French government had to keep the foreign reserves of these colonies, as a guarantee that foreign currency won't be bought and sold haphazardly by the local government, making it difficult to maintain the fixed exchange rate.
To this day, many of these countries are still required to hold 50% of their reserves in France, to guarantee the stability of the currency. By not having control of these foreign reserves, these "sovereign" states have effectively given away control of their foreign monetary policy to their former colonial masters. They have inverted control of their power.
In software development, Inversion of Control has for some reason become synonymous with Dependency Injection. This is probably because of the wide usage of IoC containers in many popular frameworks, which are used to find and create dependencies to be plugged into modules or classes that need them. But dependency injection is only a type of inversion of control: where control of the creation of dependencies is handed over to something else, instead of classes and modules creating the dependencies.
In React Native, inversion of control can be used to create cleaner, easier to understand components.
Imagine a scenario where Lerato, a software craftswoman, is creating a log book app to record her distance travelled for tax purposes. This app consists of one screen where she enters the date and the kilometres travelled to reach her client:
import React from 'react';
import { View, TextInput, TouchableOpacity, Text } from 'react-native';
import LogService from './log-service';
class AddLogEntry extends Component {
constructor(props) {
super(props);
this.state = {
distance: 0,
date: ''
}
}
render() {
return (
<View>
<TextInput
onChangeText={date => this.setState({date}) }
value={this.state.date} />
<TextInput
onChangeText={distance => this.setState({distance}) }
value={this.state.distance} />
<TouchableOpacity
onPress={() => LogService.add(this.state.date, this.state.distance)}>
<Text>Add</Text>
</TouchableOpacity>
</View>
);
}
}
She looks at what she has done. And it is good. And it's only the first day.
Later on, a new requirement comes to edit logbook entries. She decides that there are some reusable components that can come out of the first AddLogEntry
component, such as an ActionButton
button component. So she decides to create this:
function ActionButton(props) {
return (
<TouchableOpacity
onPress={() => LogService.add(this.state.date, this.state.distance)}>
<Text>{props.buttonTitle}</Text>
</TouchableOpacity>
);
}
and it is used as follows:
<ActionButton buttonTitle="Add" />
Done. Button inserted. Reusable component done. Well, kinda.
See, the button is still in control of what happens when pressed. Therefore, when using it in different places, one has to add some-kinda flag to it so the new component can figure out what it can do to handle the context specific logic. Or it can invert control to another component who hold the knowledge of what to do. This can be done by having an event callback method that is passed into the component, such as onPress.
function ActionButton(props) {
return (
<TouchableOpacity
onPress={props.onPress}>
<Text>{props.buttonTitle}</Text>
</TouchableOpacity>
);
}
Then the controlling component with the knowledge of what to do will pass a reference of a method to this component:
<ActionButton buttonTitle="Add" onPress={() => doStuff()} />
This is a trivial example, but illustrates 2 different types of React Native components:
- Controlling Orchestrating Components: These are components that hold all state of the current scene, as well as handle all logic such as navigating to new scenes, network calls, showing and hiding of other components, etc.
- User Interaction Components: These components display information to the user, and handle interaction from the user (e.g. text inputs, buttons, date pickers, etc.).
The components which hold all the child components of a particular scene should be the orchestrating components such as the AddLogEntry
component above. They should hold all the state of the scene, as well as handle all interactions external to the scene (e.g. with the navigator, network calls, etc.). All child components should then be user interaction components (e.g. the ActionButton
component). These should be ignorant components, unaware of the context they are used in. They should receive data through their props, and send user interaction data to the orchestrating components through event callbacks, such as onPress
described above, from where the data will be handled according to application logic.
But why are we inverting control from these child user interaction components to the orchestrating components?
Single place for application logic.
If the application logic for that particular scene is split between different components, e.g. one component does network calls, another component handles navigation logic to load new scenes, and yet another does something else, it would be hard to understand what a particular scene does from just looking at the parent component. One would need to search within each of the child components to get a holistic view.More reusable user interaction components
The more ignorant a component is of the different contexts they are used in, the more reusable they are. If they are aware of the contexts they are used in, several conditionals (if-else) need to be placed within these components to handle the context-specific application logic. Ideally, components should be open to extension, but closed to modification of existing logic. Embedding logic requires modification when more contexts are added.More holistic unit tests
If all application logic is held in a single component, all this logic can be tested by simulating interactions with the child components and asserting how the orchestrating component handles the data, rather than having the tests for this logic split between various component specific test files (this is assuming shallow tests that do not render all the child components). This way, the tests can be used as a reliable and holistic specification of what that particular scene should do.
In conclusion, giving control of all application logic to the orchestrating parent components results in clearer and cleaner code and tests, making the application's code base more readable and maintainable by other developers over the long run.


--- layout: post title: Oh Lookie Here date: 2011-10-24 00:44:04.000000000 -04:00 categories: - Books tags: - Blog love - Giveaway - Mary Oliver - Owls and Other Fantasies status: publish type: post published: true meta: aktt_notify_twitter: 'no' _edit_last: '1' dsq_thread_id: '1188562634' author: login: cint email<EMAIL_ADDRESS>display_name: Jacinta first_name: Jacinta last_name: '' ---
I was so excited to find I had won a blog giveaway recently from the lovely MJ at Wander, Wonder, Discover. It is Mary Oliver's Owls and Other Fantasies book.  There are lots of lovely passages throughout the book. I must say The Swan is one of my favourites and Wild Geese too.
The book arrived last week and was waiting for me after a most stressful and emotionally draining day. I love how life seems to balance out like that. I think I may have even given the package a hug!
I took the photo on our new island bench, so you can get a sneaky peaky at what it looks like. It's so sparkly and pretty. We have had a hold up with our pantry doors and a set of drawer fronts that the kitchen company forgot with our initial delivery, and then they arrived at the warehouse damaged, so until they turn up, I will have to make you wait for final photos (so frustrating!). Jacinta x


Provides classes and interfaces for the input method framework. This package enables text editing components to receive text input through input methods. Input methods are software components that let the user enter text in ways other than simple typing on a keyboard. They are commonly used to enter Japanese, Chinese, or Korean - languages using thousands of different characters - on keyboards with far fewer keys. However, the framework also supports input methods for other languages and the use of entirely different input mechanisms, such as handwriting or speech recognition.
For overviews, tutorials, examples, guides, and tool documentation, please see:
@since 1.2


new wcDocker(container, options)
Parameters:
| Name | Type | Argument | Description |
|---|---|---|---|
container |
external:jQuery~selector | external:jQuery~Object | external:domNode | A container element to store the contents of wcDocker. | |
options |
wcDocker~Options |
<optional> |
Options for constructing the instance. |
Members
-
static varCOLLAPSED -
Used when adding or moving a panel to designate the target location as collapsed.
Must be used with docking positions LEFT, RIGHT, or BOTTOM only.Type: String
-
static varDOCK -
Enumerated Docking positions.
Type: String
- Version: 3.0.0
- Source: docker.js, line 99
Properties:
Name Type Default Description MODAL
String modal A floating panel that blocks input until closed FLOAT
String float A floating panel TOP
String top Docks to the top of a target or window LEFT
String left Docks to the left of a target or window RIGHT
String right Docks to the right of a target or window BOTTOM
String bottom Docks to the bottom of a target or window STACKED
String stacked Docks as another tabbed item along with the target -
static varEVENT -
Enumerated Internal events
Type: String
- Version: 3.0.0
- Source: docker.js, line 121
Properties:
Name Type Default Description INIT
String panelInit When the panel is initialized LOADED
String dockerLoaded When all panels have finished loading UPDATED
String panelUpdated When the panel is updated VISIBILITY_CHANGED
String panelVisibilityChanged When the panel has changed its visibility
This event is called with the current visibility state as the first parameter.BEGIN_DOCK
String panelBeginDock When the user begins moving any panel from its current docked position END_DOCK
String panelEndDock When the user finishes moving or docking a panel GAIN_FOCUS
String panelGainFocus When the user brings any panel within a tabbed frame into focus LOST_FOCUS
String panelLostFocus When the user leaves focus on any panel within a tabbed frame CLOSED
String panelClosed When the panel is being closed BUTTON
String panelButton When a custom button is clicked, See wcPanel.addButton ATTACHED
String panelAttached When the panel has moved from floating to a docked position DETACHED
String panelDetached When the panel has moved from a docked position to floating MOVE_STARTED
String panelMoveStarted When the user has started moving the panel (top-left coordinates changed)
This event is called with an object of the current {x, y} position as the first parameter.MOVE_ENDED
String panelMoveEnded When the user has finished moving the panel
This event is called with an object of the current {x, y} position as the first parameter.MOVED
String panelMoved When the top-left coordinates of the panel has changed
This event is called with an object of the current {x, y} position as the first parameter.RESIZE_STARTED
String panelResizeStarted When the user has started resizing the panel (width or height changed)
This event is called with an object of the current {width, height} size as the first parameter.RESIZE_ENDED
String panelResizeEnded When the user has finished resizing the panel
This event is called with an object of the current {width, height} size as the first parameter.RESIZED
String panelResized When the panels width or height has changed
This event is called with an object of the current {width, height} size as the first parameter.SCROLLED
String panelScrolled When the contents of the panel has been scrolled SAVE_LAYOUT
String layoutSave When the layout is being saved, See wcDocker.save RESTORE_LAYOUT
String layoutRestore When the layout is being restored, See wcDocker.restore CUSTOM_TAB_CHANGED
String customTabChanged When the current tab on a custom tab widget associated with this panel has changed, See wcTabFrame CUSTOM_TAB_CLOSED
String customTabClosed When a tab has been closed on a custom tab widget associated with this panel, See wcTabFrame -
static varORIENTATION -
Used for the splitter bar orientation.
Type: Boolean
-
static varPANEL_PLACEHOLDER -
The name of the placeholder panel.
Type: String
-
static varTAB -
Used to determine the position of tabbed widgets for stacked panels.
Note: Not supported on IE8 or below.Type: String
- Version: 3.0.0
- Source: docker.js, line 222
Properties:
Name Type Default Description TOP
String top The default, puts tabs at the top of the frame LEFT
String left Puts tabs on the left side of the frame RIGHT
String right Puts tabs on the right side of the frame BOTTOM
String bottom Puts tabs on the bottom of the frame
Methods
-
functionaddPanel(typeName, location, targetPanel, options) > wcPanel | Boolean -
Add a new docked panel to the docker instance.
Note: It is best to use wcDocker.COLLAPSED after you have added your other docked panels, as it may ensure proper placement.Parameters:
Name Type Argument Description typeName
String The name identifier of the panel to create. location
wcDocker.DOCK The docking location to place this panel. targetPanel
wcPanel | wcDocker.COLLAPSED <optional>
A target panel to dock relative to, or use wcDocker.COLLAPSED to collapse it to the side or bottom. options
wcDocker~PanelOptions <optional>
Other options for panel placement. Returns: wcPanel | Boolean
The newly created panel object, or false if no panel was created.
-
functionbasicMenu(selector, itemListOrBuildFunc, includeDefault) -
Assigns a basic context menu to a selector element. The context Menu is a simple list of options, no nesting or special options.
If you wish to use a more complex context menu, you can use jQuery.contextMenu directly.Parameters:
Name Type Description selector
external:jQuery~selector A selector string that designates the elements who use this menu. itemListOrBuildFunc
Array.<external:jQuery#contextMenu~item> | function An array with each context menu item in it, or a function to call that returns one. includeDefault
Boolean If true, all default menu options will be included. - Deprecated:
-
- Renamed to [wcDocker.menu}wcDocker#menu.
- Source: docker.js, line 816
-
functionbypassMenu() -
Bypasses the next context menu event. Use this during a mouse up event in which you do not want the context menu to appear when it normally would have.
-
functionclear() -
Clears all contents from the docker instance.
-
functionfindPanels(typeName) > Array.<wcPanel> -
Finds all instances of a given panel type.
Parameters:
Name Type Argument Description typeName
String <optional>
The name identifier for the panel. If not supplied, all panels are retrieved. Returns: Array.<wcPanel>
A list of all panels found of the given type.
-
functionfinishLoading(fadeDuration) -
Hides the loading screen.
Parameters:
Name Type Argument Default Description fadeDuration
Number <optional>
0 The fade out duration for the loading screen. -
functionisCollapseEnabled() > Boolean -
Retrieves whether panel collapsers are enabled.
Returns: Boolean
Collapsers are enabled.
-
functionmenu(selector, itemListOrBuildFunc, includeDefault) -
Assigns a basic context menu to a selector element. The context Menu is a simple list of options, no nesting or special options.
If you wish to use a more complex context menu, you can use jQuery.contextMenu directly.Parameters:
Name Type Description selector
external:jQuery~selector A selector string that designates the elements who use this menu. itemListOrBuildFunc
Array.<external:jQuery#contextMenu~item> | function An array with each context menu item in it, or a function to call that returns one. includeDefault
Boolean If true, all default menu options will be included. -
functionmovePanel(panel, location, targetPanel, options) > wcPanel | Boolean -
Moves a docking panel from its current location to another.
Parameters:
Name Type Argument Description panel
wcPanel The panel to move. location
wcDocker.DOCK The new docking location of the panel. targetPanel
wcPanel | wcDocker.COLLAPSED <optional>
A target panel to dock relative to, or use wcDocker.COLLAPSED to collapse it to the side or bottom. options
wcDocker~PanelOptions <optional>
Other options for panel placement. Returns: wcPanel | Boolean
The panel that was created, or false on failure.
-
functionoff(eventType, handler) -
Unregisters a global event.
Parameters:
Name Type Argument Description eventType
wcDocker.EVENT The event type, can be a custom event string or a predefined event. handler
wcDocker~event:onEvent <optional>
The handler function registered with the event. If omitted, all events registered to the event type are unregistered. -
functionon(eventType, handler) > Boolean -
Registers a global event.
Parameters:
Name Type Description eventType
wcDocker.EVENT The event type, can be a custom event string or a predefined event. handler
wcDocker~event:onEvent A handler function to be called for the event. Returns: Boolean
Success or failure that the event has been registered.
-
functionpanelTypeInfo(typeName) > wcDocker~registerOptions -
Retrieves the options data associated with a given panel type when it was registered.
Parameters:
Name Type Description typeName
String The name identifier of the panel. Returns: wcDocker~registerOptions
Registered options of the panel type, or false if the panel was not found.
-
functionpanelTypes(includePrivate) > Array.<String> -
Retrieves a list of all currently registered panel types.
Parameters:
Name Type Description includePrivate
Boolean If true, panels registered as private will also be included with this list. Returns: Array.<String>
A list of panel type names.
-
functionregisterPanelType(name, options, isPrivate) > Boolean -
Registers a new docking panel type to be used later.
Parameters:
Name Type Argument Description name
String The name identifier for the new panel type. options
wcDocker~registerOptions An options object for describing the panel type. isPrivate
Boolean <optional>
DEPRECATED: Use options instead. Returns: Boolean
Success or failure. Failure usually indicates the type name already exists.
-
functionremovePanel(panel) > Boolean -
Removes a docked panel from the window.
Parameters:
Name Type Description panel
wcPanel The panel to remove. Returns: Boolean
Success or failure.
-
functionrestore(dataString) -
Restores a previously saved configuration.
Parameters:
Name Type Description dataString
String A previously saved serialized string, See wcDocker.save. -
functionsave() > String -
Saves the current panel configuration into a serialized string that can be used later to restore it.
Returns: String
A serialized string that describes the current panel configuration.
-
functionstartLoading(label, opacity, textOpacity) -
Shows the loading screen.
Parameters:
Name Type Argument Default Description label
String <optional>
An optional label to display. opacity
Number <optional>
0.4 If supplied, assigns a custom opacity value to the loading screen. textOpacity
Number <optional>
1 If supplied, assigns a custom opacity value to the loading icon and text displayed. -
functiontheme(themeName) > String -
Gets, or Sets the current theme used by docker.
Parameters:
Name Type Description themeName
String If supplied, will activate a theme with the given name. Returns: String
The currently active theme.
-
functionthemePath(path) > String -
Gets, or Sets the path where all theme files can be found. "Themes" is the default folder path.
Parameters:
Name Type Description path
String If supplied, will set the path where all themes can be found. Returns: String
The currently assigned path.
-
functiontrigger(eventType, data) -
Trigger an event on all panels.
Parameters:
Name Type Argument Description eventType
wcDocker.EVENT The event type, can be a custom event string or a predefined event. data
Object <optional>
A custom data object to be passed along with the event. Fires:
Type Definitions
-
inner typedef varCoordinate -
A coordinate structure.
Type: Object
- Source: docker.jsdoc, line 24
Properties:
Name Type Description x
Number X coordinate. y
Number Y coordinate. -
inner typedef varOptions -
Options for a docker instance.
Type: Object
- Source: docker.jsdoc, line 1
Properties:
Name Type Argument Default Description themePath
String <optional>
'Themes' A folder path where all docker theme files can be found. theme
String <optional>
'default' The active docker theme. loadingClass
String <optional>
'fa fa-spinner fa-pulse' Any class name to use for the loading screen icon. allowContextMenu
Boolean <optional>
true Overrides the default right click menu with ones that interact with docker. hideOnResize
Boolean <optional>
false If true, panels will hide their contents as they are being resized. allowCollapse
Boolean <optional>
true Allows users to collapse panels to the sides of the docker view. responseRate
Number <optional>
10 This determines how often updates are performed (in milliseconds). -
inner typedef varPanelOptions -
Options for adding a new panel.
Type: Object
- Source: docker.jsdoc, line 46
Properties:
Name Type Argument Description x
Number | String <optional>
X coordinate of the panel center (if floating). Can be a pixel position, or a string with a 'px' or '%' suffix. y
Number | String <optional>
Y coordinate of the panel center (if floating). Can be a pixel position, or a string with a 'px' or '%' suffix. w
Number | String <optional>
Desired width of the panel. Can be a pixel position, or a string with a 'px' or '%' suffix. h
Number | String <optional>
Desired height of the panel. Can be a pixel position, or a string with a 'px' or '%' suffix. tabOrientation
wcDocker.TAB <optional>
Desired position of tab widgets when using wcDocker.DOCK.STACKED. Not supported on IE8 or below. -
inner typedef varRect -
A rectangle structure.
Type: Object
- Source: docker.jsdoc, line 14
Properties:
Name Type Argument Description x
Number | String <optional>
X coordinate of the rectangle. Can be a pixel position, or a string with a 'px' or '%' suffix. y
Number | String <optional>
Y coordinate of the rectangle. Can be a pixel position, or a string with a 'px' or '%' suffix. w
Number | String <optional>
Width of the rectangle. Can be a pixel position, or a string with a 'px' or '%' suffix. h
Number | String <optional>
Height of the rectangle. Can be a pixel position, or a string with a 'px' or '%' suffix. -
inner typedef varregisterOptions -
Options object for registering new panel types.
- Source: docker.jsdoc, line 57
Properties:
Name Type Argument Description options.onCreate
wcDocker~onCreatePanel A function or an object constructor for the panel. options.icon
String <optional>
A CSS class name to draw an icon in the panels tab widget. options.faicon
String <optional>
An icon name using the Font-Awesome library. You must download and link to the library first. options.title
String | Boolean <optional>
Assign a custom name to the panels tab. A false value will hide the tab entirely. options.isPrivate
Boolean <optional>
If true, the user will not be able to create this panel type. options.limit
Number <optional>
Enforces a limited number of this panel type from being created by the user. options.options
wcPanel~options <optional>
A custom options object to be passed into the new panel constructor or creation function as the second parameter. -
inner typedef varScrollable -
Type: Object
- Source: docker.jsdoc, line 40
Properties:
Name Type Description x
Boolean Whether scrolling is enabled in the horizontal direction. y
Boolean Whether scrolling is enabled in the vertical direction. -
inner typedef varSize -
A 2D size structure.
Type: Object
- Source: docker.jsdoc, line 32
Properties:
Name Type Description x
Number Width. y
Number Height. -
inner typedef functiononCreatePanel(panel, options) -
A function or an object constructor for the panel. This function is called using the 'new' operator.
Parameters:
Name Type Argument Description panel
wcPanel The panel being constructed. options
wcPanel~options <optional>
An options object passed in from wcDocker.registerPanelType's options.options parameter. - Source: docker.jsdoc, line 70
Events
-
inner functiononEvent -
An event handler callback. Each is registered to a event type using the wcDocker.on or [wcPanel.on]{@link wcPanel~on} functions.
Type: function
Parameters:
Name Type Argument Description panel
wcPanel | NULL The panel invoking the event, or NULL if global. data
Object <optional>
A data object passed by the invoker. - Source: docker.jsdoc, line 78


| Opcode/Instruction | Op/En | Description |
|---|---|---|
| 66 0F 38 80 INVEPT r64, m128 | RM | Invalidates EPT-derived entries in the TLBs and paging-structure caches (in 64-bit mode). |
| 66 0F 38 80 INVEPT r32, m128 | RM | Invalidates EPT-derived entries in the TLBs and paging-structure caches (outside 64-bit mode). |
| Op/En | Operand 1 | Operand 2 | Operand 3 | Operand 4 |
| RM | ModRM:reg (r) | ModRM:r/m (r) | NA | NA |
Invalidates mappings in the translation lookaside buffers (TLBs) and paging-structure caches that were derived from extended page tables (EPT). (See Chapter 28, “VMX Support for Address Translation”.) Invalidation is based on the INVEPT type specified in the register operand and the INVEPT descriptor specified in the memory operand.
Outside IA-32e mode, the register operand is always 32 bits, regardless of the value of CS.D; in 64-bit mode, the register operand has 64 bits (the instruction cannot be executed in compatibility mode).
The INVEPT types supported by a logical processors are reported in the IA32_VMX_EPT_VPID_CAP MSR (see Appendix A, “VMX Capability Reporting Facility”). There are two INVEPT types currently defined:
If an unsupported INVEPT type is specified, the instruction fails.
INVEPT invalidates all the specified mappings for the indicated EPTP(s) regardless of the VPID and PCID values with which those mappings may be associated.
The INVEPT descriptor comprises 128 bits and contains a 64-bit EPTP value in bits 63:0 (see Figure 30-1).
IF (not in VMX operation) or (CR0.PE = 0) or (RFLAGS.VM = 1) or (IA32_EFER.LMA = 1 and CS.L = 0) THEN #UD; ELSIF in VMX non-root operation THEN VM exit; ELSIF CPL > 0 THEN #GP(0); ELSE INVEPT_TYPE ← value of register operand; IF IA32_VMX_EPT_VPID_CAP MSR indicates that processor does not support INVEPT_TYPE THEN VMfail(Invalid operand to INVEPT/INVVPID); ELSE // INVEPT_TYPE must be 1 or 2 INVEPT_DESC ← value of memory operand; EPTP ← INVEPT_DESC[63:0]; CASE INVEPT_TYPE OF 1: // single-context invalidation IF VM entry with the “enable EPT“ VM execution control set to 1 would fail due to the EPTP value THEN VMfail(Invalid operand to INVEPT/INVVPID); ELSE Invalidate mappings associated with EPTP[51:12]; VMsucceed; FI; BREAK; 2: // global invalidation Invalidate mappings associated with all EPTPs; VMsucceed; BREAK; ESAC; FI; FI;
See the operation section and Section 30.2.
| #GP(0) | If the current privilege level is not 0. |
| If the memory operand effective address is outside the CS, DS, ES, FS, or GS segment limit. | |
| If the DS, ES, FS, or GS register contains an unusable segment. | |
| If the source operand is located in an execute-only code segment. | |
| #PF(fault-code) | If a page fault occurs in accessing the memory operand. |
| #SS(0) | If the memory operand effective address is outside the SS segment limit. |
| If the SS register contains an unusable segment. | |
| #UD | If not in VMX operation. |
| If the logical processor does not support EPT (IA32_VMX_PROCBASED_CTLS2[33]=0). | |
| If the logical processor supports EPT (IA32_VMX_PROCBASED_CTLS2[33]=1) but does not support the INVEPT instruction (IA32_VMX_EPT_VPID_CAP[20]=0). |
| #UD | The INVEPT instruction is not recognized in real-address mode. |
| #UD | The INVEPT instruction is not recognized in virtual-8086 mode. |
| #UD | The INVEPT instruction is not recognized in compatibility mode. |
| #GP(0) | If the current privilege level is not 0. |
| If the memory operand is in the CS, DS, ES, FS, or GS segments and the memory address is in a non-canonical form. | |
| #PF(fault-code) | If a page fault occurs in accessing the memory operand. |
| #SS(0) | If the memory operand is in the SS segment and the memory address is in a non-canonical form. |
| #UD | If not in VMX operation. |
| If the logical processor does not support EPT (IA32_VMX_PROCBASED_CTLS2[33]=0). | |
| If the logical processor supports EPT (IA32_VMX_PROCBASED_CTLS2[33]=1) but does not support the INVEPT instruction (IA32_VMX_EPT_VPID_CAP[20]=0). |


Depending on the content you’re writing, you can choose HTML elements that match the meaning of your text.
We have already used the paragraph
 tag. Let us look at a few more ways to define your content:
To create a list, you use the following code:

Types of lists

numbered (ordered) use the
 tag

bullet (unordered) lists use the
 tag

The
 tag tells the browser it is a list, and the
 tag tells the browser where each individual item in the list starts and ends
Note that each
 tag is closed before the next one starts. Also note that the
 and
 tags are enclosed within the
 and
 tags. This is called nesting. Nesting is very important when writing HTML code. A child element, like
 must be closed before closing the parent element
.
The image tag  is different from the previous tags in two ways:
Image location: The src attribute defines the location of the image.

The HyperText
part of HTML defines the links we use: hypertext links, called hyperlinks. You
navigate from one document to another or from one web site to another by clicking on links.
A typical link to another web site looks like this:
The href attribute defines the target of the link (where you navigate to when you click).
When you want to link to another web page, you need the complete URL to document:
No matter where you use the link, it contains all the information required to find the correct file, on the correct domain, with the correct protocol. You usually use absolute URLs defining a link from your website to another website.
Find more images of space on  !


◆ wl_shm_buffer_begin_access()
Mark that the given SHM buffer is about to be accessed.
- Parameters
-
An SHM buffer is a memory-mapped file given by the client. According to POSIX, reading from a memory-mapped region that extends off the end of the file will cause a SIGBUS signal to be generated. Normally this would cause the compositor to terminate. In order to make the compositor robust against clients that change the size of the underlying file or lie about its size, you should protect access to the buffer by calling this function before reading from the memory and call wl_shm_buffer_end_access afterwards. This will install a signal handler for SIGBUS which will prevent the compositor from crashing.
After calling this function the signal handler will remain installed for the lifetime of the compositor process. Note that this function will not work properly if the compositor is also installing its own handler for SIGBUS.
If a SIGBUS signal is received for an address within the range of the SHM pool of the given buffer then the client will be sent an error event when wl_shm_buffer_end_access is called. If the signal is for an address outside that range then the signal handler will reraise the signal which would will likely cause the compositor to terminate.
It is safe to nest calls to these functions as long as the nested calls are all accessing the same buffer. The number of calls to wl_shm_buffer_end_access must match the number of calls to wl_shm_buffer_begin_access. These functions are thread-safe and it is allowed to simultaneously access different buffers or the same buffer from multiple threads.
◆ wl_shm_buffer_end_access()
Ends the access to a buffer started by wl_shm_buffer_begin_access.
- Parameters
-
This should be called after wl_shm_buffer_begin_access once the buffer is no longer being accessed. If a SIGBUS signal was generated in-between these two calls then the resource for the given buffer will be sent an error.
◆ wl_shm_buffer_get_data()
Get a pointer to the memory for the SHM buffer.
- Parameters
-
Returns a pointer which can be used to read the data contained in the given SHM buffer.
As this buffer is memory-mapped, reading from it may generate SIGBUS signals. This can happen if the client claims that the buffer is larger than it is or if something truncates the underlying file. To prevent this signal from causing the compositor to crash you should call wl_shm_buffer_begin_access and wl_shm_buffer_end_access around code that reads from the memory.
◆ wl_shm_buffer_ref_pool()
Get a reference to a shm_buffer's shm_pool.
- Parameters
-
Returns a pointer to a buffer's shm_pool and increases the shm_pool refcount.
The compositor must remember to call wl_shm_pool_unref when it no longer needs the reference to ensure proper destruction of the pool.
- See also
- wl_shm_pool_unref
◆ format
| uint32_t wl_shm_buffer::format |
◆ height
| int32_t wl_shm_buffer::height |
◆ offset
| int wl_shm_buffer::offset |
◆ pool
◆ resource
◆ stride
| int32_t wl_shm_buffer::stride |
◆ width
| int32_t wl_shm_buffer::width |
The documentation for this struct was generated from the following file:


Title Human readable name.
Type title is the human readable name for the {{ output_title }}.
Owner Owner company or organization of the {{ output_title }}.
The owner information is only use for Public Formal Identifier (FPI) generation.
Plugin version


Let Us Know
Date
Full Name :
Student ID :
Email :
Phone Number :
URL :
Address :
Zip Code :
Invalid Zip
City :
State :
What did you like about GMU ?
Students
Location
Campus
Atmosphere
Dorm Rooms
Sports
How did you become interested in GMU ?
Friends
Television
Internet
Other
High School Graduation Date:
Month:
-- select --
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec
Year:
How likely would you recommend GMU to others?
Very Likely
Likely
Unlikely
Comments :
Data:
Reset
Please visit http://www.gmu.edu for more information.


I'm passionate about the following things: zebras, binoculars.
I enjoy writing front-end code with these technologies:
Please shout loudly


Accessible Date Picker
View the full library of accessibility solutions.
NOTE: This solution is written using ES2015 and is not compatible with IE11.
This is also written with a mixture of vanilla JS and jQuery. I would like to eventually write in all vanilla.
For mobile I suggest overriding this with the native date input functionality.


--- ---
It's easy enough to drag and drop your application to the Windows Startup group to make it run on Windows startup. But, if you wanted to do this from your program, at the end of your setup program for example, or if you wanted to make your program run just once the next time Windows start, following function might come in handy:
procedure RunOnStartup(sProgTitle, sCmdLine: string; bRunOnce: boolean); var sKey: string; reg : TRegIniFile; begin if bRunOnce then sKey := 'Once' else sKey := ''; reg := TRegIniFile.Create(''); reg.RootKey := HKEY_LOCAL_MACHINE; reg.WriteString( 'Software\Microsoft\Windows\CurrentVersion\Run' + sKey + #0, sProgTitle, sCmdLine ); reg.Free; end;
Usage:
Example:
RunOnStartup('Title of my program', 'MyProg.exe', False);


--- title: Collection Item date: 04-05-1984 ---
The grandest of omelettes. Those that feast on dragon eggs often find that there is very little they would not dare to do.


|
Panda3D
|
The MaterialPool (there is only one in the universe) serves to unify different pointers to the same Material, so we do not (a) waste memory with many different Material objects that are all equivalent, and (b) waste time switching the graphics engine between different Material states that are really the same thing. More...
Static Public Member Functions | |
| static int | garbageCollect () |
| Releases only those materials in the pool that have a reference count of exactly 1; i.e. More... | |
| static Material | getMaterial (Material temp) |
| Returns a Material pointer that represents the same material described by temp, except that it is a shared pointer. More... | |
| static | listContents (Ostream out) |
| Lists the contents of the material pool to the indicated output stream. More... | |
| static | releaseAllMaterials () |
| Releases all materials in the pool and restores the pool to the empty state. More... | |
| static | releaseMaterial (Material temp) |
| Removes the indicated material from the pool. More... | |
| static | write (Ostream out) |
| Lists the contents of the material pool to the indicated output stream. More... | |
The MaterialPool (there is only one in the universe) serves to unify different pointers to the same Material, so we do not (a) waste memory with many different Material objects that are all equivalent, and (b) waste time switching the graphics engine between different Material states that are really the same thing.
The idea is to create a temporary Material representing the lighting state you want to apply, then call get_material(), passing in your temporary Material. The return value will either be a new Material object, or it may be the the same object you supplied; in either case, it will have the same value.
|
static |
Releases only those materials in the pool that have a reference count of exactly 1; i.e.
only those materials that are not being used outside of the pool. Returns the number of materials released.
Returns a Material pointer that represents the same material described by temp, except that it is a shared pointer.
Each call to get_material() passing an equivalent Material pointer will return the same shared pointer.
If you modify the shared pointer, it will automatically disassociate it from the pool.
Also, the return value may be a different pointer than that passed in, or it may be the same pointer. In either case, the passed in pointer has now been sacrificed to the greater good and should not be used again (like any other PointerTo, it will be freed when the last reference count is removed).
|
static |
Lists the contents of the material pool to the indicated output stream.
|
static |
Releases all materials in the pool and restores the pool to the empty state.
|
static |
Removes the indicated material from the pool.
|
static |
Lists the contents of the material pool to the indicated output stream.


tothe
Horizon
.com
Site Plan Document
Home
Audience
Color Scheme
Typography
Element
Font
Sample
<Header>
Georgia
Sample
<nav>
Cambria
Sample
<p>
Times New Roman
Sample


Class yii\imagine\BaseImage
| Inheritance | yii\imagine\BaseImage |
|---|---|
| Subclasses | yii\imagine\Image |
| Available since version | 2.0 |
| Source Code | https://github.com/yiisoft/yii2-imagine/blob/master/BaseImage.php |
BaseImage provides concrete implementation for yii\imagine\Image.
Do not use BaseImage. Use yii\imagine\Image instead.
Public Properties
| Property | Type | Description | Defined By |
|---|---|---|---|
| $driver | array|string | The driver to use. | yii\imagine\BaseImage |
| $thumbnailBackgroundAlpha | string | Background alpha (transparency) to use when creating thumbnails in ImageInterface::THUMBNAIL_INSET
mode with both width and height specified. |
yii\imagine\BaseImage |
| $thumbnailBackgroundColor | string | Background color to use when creating thumbnails in ImageInterface::THUMBNAIL_INSET mode with
both width and height specified. |
yii\imagine\BaseImage |
Public Methods
| Method | Description | Defined By |
|---|---|---|
| autorotate() | Rotates an image automatically based on EXIF information. | yii\imagine\BaseImage |
| crop() | Crops an image. | yii\imagine\BaseImage |
| frame() | Adds a frame around of the image. Please note that the image size will increase by $margin x 2. |
yii\imagine\BaseImage |
| getImagine() | Returns the Imagine object that supports various image manipulations. |
yii\imagine\BaseImage |
| resize() | Resizes an image. | yii\imagine\BaseImage |
| setImagine() | yii\imagine\BaseImage | |
| text() | Draws a text string on an existing image. | yii\imagine\BaseImage |
| thumbnail() | Creates a thumbnail image. | yii\imagine\BaseImage |
| watermark() | Adds a watermark to an existing image. | yii\imagine\BaseImage |
Protected Methods
| Method | Description | Defined By |
|---|---|---|
| createImagine() | Creates an Imagine object based on the specified $driver. |
yii\imagine\BaseImage |
| ensureImageInterfaceInstance() | Takes either file path or ImageInterface. In case of file path, creates an instance of ImageInterface from it. | yii\imagine\BaseImage |
| getBox() | Returns box for an image to be created. | yii\imagine\BaseImage |
| getThumbnailBox() | Returns box for a thumbnail to be created. If one of the dimensions is set to null , another one is calculated
automatically based on width to height ratio of original image box. |
yii\imagine\BaseImage |
| isUpscaling() | Checks if upscaling is going to happen | yii\imagine\BaseImage |
Constants
| Constant | Value | Description | Defined By |
|---|---|---|---|
| DRIVER_GD2 | 'gd2' | GD2 driver definition for Imagine implementation using the GD library. | yii\imagine\BaseImage |
| DRIVER_GMAGICK | 'gmagick' | Gmagick driver definition. | yii\imagine\BaseImage |
| DRIVER_IMAGICK | 'imagick' | Imagick driver definition. | yii\imagine\BaseImage |
Property Details
The driver to use. This can be either a single driver name or an array of driver names. If the latter, the first available driver will be used.
Background alpha (transparency) to use when creating thumbnails in ImageInterface::THUMBNAIL_INSET
mode with both width and height specified. Default is solid.
Background color to use when creating thumbnails in ImageInterface::THUMBNAIL_INSET
mode with
both width and height specified. Default is white.
Method Details
Rotates an image automatically based on EXIF information.
| public static \Imagine\Image\ImageInterface autorotate ( $image, $color = '000000' ) | ||
| $image | string|resource|\Imagine\Image\ImageInterface | Either ImageInterface, resource or a string containing file path |
| $color | string |
Creates an Imagine
object based on the specified $driver.
| protected static \Imagine\Image\ImagineInterface createImagine ( ) | ||
| return | \Imagine\Image\ImagineInterface | The new |
|---|---|---|
| throws | yii\base\InvalidConfigException | if $driver is unknown or the system doesn't support any $driver. |
Crops an image.
For example:
$obj->crop('path\to\image.jpg', 200, 200, [5, 5]);
$point = new \Imagine\Image\Point(5, 5);
$obj->crop('path\to\image.jpg', 200, 200, $point);
| public static \Imagine\Image\ImageInterface crop ( $image, $width, $height, array $start = [0, 0] ) | ||
| $image | string|resource|\Imagine\Image\ImageInterface | Either ImageInterface, resource or a string containing file path |
| $width | integer | The crop width |
| $height | integer | The crop height |
| $start | array | The starting point. This must be an array with two elements representing |
| throws | yii\base\InvalidParamException | if the |
|---|
Takes either file path or ImageInterface. In case of file path, creates an instance of ImageInterface from it.
| protected static \Imagine\Image\ImageInterface ensureImageInterfaceInstance ( $image ) | ||
| $image | string|resource|\Imagine\Image\ImageInterface | |
| throws | yii\base\InvalidParamException |
|---|
Adds a frame around of the image. Please note that the image size will increase by $margin
x 2.
| public static \Imagine\Image\ImageInterface frame ( $image, $margin = 20, $color = '666', $alpha = 100 ) | ||
| $image | string|resource|\Imagine\Image\ImageInterface | Either ImageInterface, resource or a string containing file path |
| $margin | integer | The frame size to add around the image |
| $color | string | The frame color |
| $alpha | integer | The alpha value of the frame. |
Returns box for an image to be created.
If one of the dimensions is set to null
, another one is calculated automatically based on width to height ratio
of original image box.
If both of the dimensions are set then new dimensions are calculated so that image keeps aspect ratio.
You can set $keepAspectRatio to false if you want to force fixed width and height.
| protected static \Imagine\Image\BoxInterface getBox ( \Imagine\Image\BoxInterface $sourceBox, $width, $height, $keepAspectRatio = true ) | ||
| $sourceBox | \Imagine\Image\BoxInterface | Original image box |
| $width | integer | New image width |
| $height | integer | New image height |
| $keepAspectRatio | boolean | Should we keep aspect ratio even if both with and height are set |
| return | \Imagine\Image\BoxInterface | New image box |
|---|
Returns the Imagine
object that supports various image manipulations.
| public static \Imagine\Image\ImagineInterface getImagine ( ) | ||
| return | \Imagine\Image\ImagineInterface | The |
|---|
Returns box for a thumbnail to be created. If one of the dimensions is set to null
, another one is calculated
automatically based on width to height ratio of original image box.
| protected static \Imagine\Image\BoxInterface getThumbnailBox ( \Imagine\Image\BoxInterface $sourceBox, $width, $height ) | ||
| $sourceBox | \Imagine\Image\BoxInterface | Original image box |
| $width | integer | Thumbnail width |
| $height | integer | Thumbnail height |
| return | \Imagine\Image\BoxInterface | Thumbnail box |
|---|
Checks if upscaling is going to happen
| protected static boolean isUpscaling ( \Imagine\Image\BoxInterface $sourceBox, \Imagine\Image\BoxInterface $destinationBox ) | ||
| $sourceBox | \Imagine\Image\BoxInterface | |
| $destinationBox | \Imagine\Image\BoxInterface |
Resizes an image.
If one of the dimensions is set to null
, another one is calculated automatically based on aspect ratio of
original image.
If both of the dimensions are set then new dimensions are calculated so that image keeps aspect ratio.
You can set $keepAspectRatio to false if you want to force fixed width and height.
| public static \Imagine\Image\ImageInterface resize ( $image, $width, $height, $keepAspectRatio = true, $allowUpscaling = false ) | ||
| $image | string|resource|\Imagine\Image\ImageInterface | Either ImageInterface, resource or a string containing file path |
| $width | integer | The width in pixels |
| $height | integer | The height in pixels |
| $keepAspectRatio | boolean | Should the image keep aspect ratio |
| $allowUpscaling | boolean | Should the image be upscaled if needed |
| public static void setImagine ( $imagine ) | ||
| $imagine | \Imagine\Image\ImagineInterface | The |
Draws a text string on an existing image.
| public static \Imagine\Image\ImageInterface text ( $image, $text, $fontFile, array $start = [0, 0], array $fontOptions = [] ) | ||
| $image | string|resource|\Imagine\Image\ImageInterface | Either ImageInterface, resource or a string containing file path |
| $text | string | The text to write to the image |
| $fontFile | string | The file path or path alias |
| $start | array | The starting position of the text. This must be an array with two elements representing |
| $fontOptions | array | The font options. The following options may be specified:
|
| throws | yii\base\InvalidParamException | if |
|---|
Creates a thumbnail image.
If one of thumbnail dimensions is set to null
, another one is calculated automatically based on aspect ratio of
original image. Note that calculated thumbnail dimension may vary depending on the source image in this case.
If both dimensions are specified, resulting thumbnail would be exactly the width and height specified. How it's achieved depends on the mode.
If ImageInterface::THUMBNAIL_OUTBOUND
mode is used, which is default, then the thumbnail is scaled so that
its smallest side equals the length of the corresponding side in the original image. Any excess outside of
the scaled thumbnail’s area will be cropped, and the returned thumbnail will have the exact width and height
specified.
If thumbnail mode is ImageInterface::THUMBNAIL_INSET
, the original image is scaled down so it is fully
contained within the thumbnail dimensions. The rest is filled with background that could be configured via
yii\imagine\Image::$thumbnailBackgroundColor and yii\imagine\Image::$thumbnailBackgroundAlpha.
| public static \Imagine\Image\ImageInterface thumbnail ( $image, $width, $height, $mode = \Imagine\Image\ManipulatorInterface::THUMBNAIL_OUTBOUND ) | ||
| $image | string|resource|\Imagine\Image\ImageInterface | Either ImageInterface, resource or a string containing file path |
| $width | integer | The width in pixels to create the thumbnail |
| $height | integer | The height in pixels to create the thumbnail |
| $mode | string | Mode of resizing original image to use in case both width and height specified |
Adds a watermark to an existing image.
| public static \Imagine\Image\ImageInterface watermark ( $image, $watermarkImage, array $start = [0, 0] ) | ||
| $image | string|resource|\Imagine\Image\ImageInterface | Either ImageInterface, resource or a string containing file path |
| $watermarkImage | string|resource|\Imagine\Image\ImageInterface | Either ImageInterface, resource or a string containing watermark file path |
| $start | array | The starting point. This must be an array with two elements representing |
| throws | yii\base\InvalidParamException | if |
|---|


{% extends '_layouts/layout_2-3.html' %} {% block page_title %}Offline Vouching Identity Service{{serviceName}}{% endblock %} {% block pageTitle %}Offline Vouching Identity Service{% endblock %} {% block content %}
Ask the patient questions to verify the clinical record is theirs
This should take place discreetly and ideally in the context of a planned appointment.
It is extremely important that the questions posed do not incidentally disclose confidential information to the applicant before their identity is verified.


PopupView is a component that allows you to open a popup with a container.
PopupView
The popup can be closed by mouse out or by clicking on outside area.


In UP, Ajit Singh had met Uddhav's fate in 1989
by Sanjay PandeyLike the Shiv Sena president Uddhav Thackeray, for Rashtriya Lok Dal (RLD) leader Ajit Singh also the post of chief minister of Uttar Pradesh in 1989 had appeared to be so close yet so far.
It was Samajwadi Party (SP) patron Mulayam Singh Yadav, who then headed Lok Dal (B), and whose party had contested the 1989 Assembly polls in the state in alliance with Janata Party, Lok Dal (A) and Jan Morcha.
All these four parties had merged and formed the Janata Dal.
The alliance had secured 208 seats and needed barely five more for an absolute majority in the house, whose strength then was 425.
V P Singh, who was the leader of Jan Morcha and was the prime minister, had declared before the Assembly polls that Ajit Singh would be the chief minister if the alliance formed its government. Mulayam was projected as the deputy chief minister.
Mulayam, however, staked claim on the post of CM after the polls and managed to engineer defections in Lok Dal (A) of Ajit Singh winning some of his MLAs.
It was then decided that voting would take place to decide who the CM would be. With the defected MLAs Mulayam emerged winner by merely five votes.
Uddhav Thackeray like Ajit Singh was pipped to the post by Ajit Pawar.
The old timers said that Ajit Singh could have become CM but for the dilly-dallying on the part of V P Singh.
"This time too if the Congress had acted fast, there could have been a Cong-NCP-Shiv Sena government in Maharashtra today," remarked a veteran UP Congress leader here.


|
Open
Game Engine 2D is a free, open
source, full features, and cross-platform 2D game engine.
It aims to help developers to create 2D games via only flat files (such
as ini and script files),
so that games could be written only once and played under any platform
supported.
Find project details
please see http://sourceforge.net/projects/oge2d
Download source files
please see http://sourceforge.net/projects/oge2d/files
Get user guide
please see http://oge2d.sourceforge.net/manual/index.html
Get game design tool
please see http://ogm2d.sourceforge.net
Project blog
please see http://lin.is-programmer.com
Forum
please see http://ogm2d.prophpbb.com
|


Gatekeeper Batracos:
Well, you still look soft to me, but Johnny gave you his Approval. That's good enough for me.. ready for Tanta Seer Ugoros? Or are you just going to stand there all day..


Work to set up first medical college in Nilgiris to begin soon: Tamil Nadu Minister
The Centre has sanctioned six medical colleges for Tamil Nadu and one will be established in this tourist town at a cost of Rs 350 crore, he told reporters here.
by PTIWork to set up the first medical college in the hilly Nilgiris district will begin soon, Tamil Nadu Municipal Administration Minister S P Velumani said on Wednesday.
The Centre has sanctioned six medical colleges for Tamil Nadu and one will be established in this tourist town at a cost of Rs 350 crore, he told reporters here.
As the building of now-defunct Hindustan Photo Films is in good condition, the college will come up there and work is likely to be completed by the end of the year, he said.
Velumani, who was here to distribute welfare schemes to the tune of Rs 16.45 crore, said the government will sanction 100 green-houses to those affected by the recent rains.
Similarly, the district administration’s request to construct two bridges which were washed away in the floods a couple of days ago, at an outlay of Rs 10 crore, will be taken to the Chief Minister for approval, he said.


A Processing.js cursor(PImage) Example
Click on the grey canvas to see the cursor change!
Cursor Image Order: Cursor Image Order:
Best viewed in Firefox


WITNESS LIST General Investigating Committee March 6, 2003-8:00A Houston Police Dept. Crime Lab On: Bobzean, Robert (HPD Crime Lab) Bolding, James (Houston Crime Lab) Bradford, Clarence O'Neal (Houston Police Department) Carradine, Cassie (Dept. of Public Safety Crime Lab Services) Caskey, Caroline (Identigene, Inc) Eisenberg, Ph.D, Arthur (Univ of North Texas Health Science Center) Fallon, Timothy (Self and Director, Bexar County Crime Laboratories) Graham, Bert (Harris County D.A. Office) Holland, R. W. (Houston Police Department) Johnson, Elizabeth (Self) Jones, Jolanda (Self and Criminal Defense Attorney) Krueger, Donald (Retired HPD Crime Lab Director) LaCoss, Jennifer (Self) Ribnik, Leslie (Self and Attorney) Rios, Irma (Dept. of Public Safety Crime Lab Service) Urbanovsky, Ron (Dept. of Public Safety, Crime Laboratory Service)


Preparation time
over 2 hours
Cooking time
less than 10 mins
Serves
Makes 8
Dietary
Speckled with figs and the spiky taste of black pepper, these flatbreads make a stunning addition to any mezze table.
Mix the flour and salt in a bowl. Add the fast action yeast and stir well.
In a jug, mix together the milk, water and honey.
Pour the contents of the jug into the dry ingredients. Add the yoghurt and oil and bring together with your hands to form a soft dough. Turn out onto a lightly floured work surface and knead for about five minutes, or until the dough is smooth and elastic.
Place the dough in an oiled bowl, cover and leave to prove in a warm place for 1½ hours. After proving, knead the dough again to knock it back.
Push the dried figs and black pepper into the dough and knead firmly to incorporate into the dough.
Divide the dough into eight equal portions and roll out on a floured surface to approximately 1cm/½in thick.
Lightly dust two baking trays with flour and arrange the flatbreads next to each other on the trays, leaving plenty of room between each one. Cover with a clean cloth and leave to prove for a further 15-20 minutes.
Preheat the grill to a medium setting and grill the flatbreads for about 2-3 minutes each side, or until lightly browned. Do not move away from the grill while they are cooking or you could end up with singed flat breads!


Authentication method
Token based authentication (mobile ready)
Session based authentication
User profile
0; else noEntities">
{{ entity.name }}
No entity found. You need an entity to add custom fields to your users.
Emails enabled
0; else noEmailAddon">
{{ addon.name }}
You need
Mailjet addon installed
to send email from your Materia Application such as a signup email


A little about salmon cookies!
Salmon cookies are uniquely designed cookie cooked up by a man who's obsession over seafood is only trumped by his love for baked goods. After a rough start, Salmon cookies have taken off!
Salmon cookies are uniquely designed cookie cooked up by a man who's obsession over seafood is only trumped by his love for baked goods. After a rough start, Salmon cookies have taken off!


Preparation time
less than 30 mins
Cooking time
10 to 30 mins
Serves
Serves 4
Inspired by a trip to Spain, James Martin uses woodfire-roasted red peppers to flavour a smoky sauce for pork fillet.
For the pork, preheat the oven to 200C/180C Fan/Gas 6.
Season the pork fillet with the pimenton, salt and freshly ground black pepper.
Heat an ovenproof frying pan until hot, add the oil, then the pork fillet and sear until golden-brown on all sides (about 30-45 seconds on each side). Transfer the pan to the oven and roast for 6-8 minutes. Remove from the oven and rest for 5 minutes in the pan before serving.
For the sauce, heat the oil in a pan, add the garlic, rosemary and chorizo. Cook until the chorizo is crisp and has released its oil. Add the pimenton, beans and peppers and cook for a 2-3 minutes. Add the cream and cook until the volume of the sauce has reduced by half.
To serve, place the sauce in the centre of serving bowls. Slice the fillet and place on top. Garnish with the herb oil, parsley cress and warm jus.


Round 1: To built model from ice cream sticks…
Round 2: That's a Surprise
Rules for Round 1: The participants will be provided the ice cream sticks(100-150) and glue…the participants will be given 45 minutes to built their imagination..
Selections criteria: to qualify for next round a judges panel will decide the model as per the creativity uniqueness and originality..
Winner: will be decided by judges
Members: 2 (Min)- 3 (Max)
6th March 2017
1:00 pm onwards
CF
Rs 20/- per person
Charmy Patel -<PHONE_NUMBER>


The World Is Beautiful
you should feel the SunShine
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Best visuals with elgent animaton and sleek gradient layers to make it look professional and attractive
No more slow loading No Need for different codes for diffent elements every thing is short and clen
We care about our clients time, So every thing is on right schedule So, there's nothing to be worrieda about
No more slow loading No Need for different codes for diffent elements every thing is short and clen
We care about our clients time, So every thing is on right schedule So, there's nothing to be worrieda about
Best visuals with elgent animaton and sleek gradient layers to make it look professional and attractive
Usage of the Internet is becoming more common due to rapid advancement of technology and the power of globalization. Societies are becoming more inter-connected. Thoughts from different
Getin TouchUsage of the Internet is becoming more common due to rapid advancement of technology and the power of globalization. Societies are becoming more inter-connected. Thoughts from different
Get Started


dynDNS Check
Domain:
IPv4:
checking ...
IPv6:
checking ...
dedyn.io is a dynDNS service provided by
deSEC
.


| deleteAllVisibleCookies |
|
|
| setTimeout |
100000 |
|
| open |
/vivo/ |
|
| assertTitle |
VIVO |
|
| clickAndWait |
link=Log in |
|
| assertTitle |
Log in to VIVO |
|
| type |
loginName |
<EMAIL_ADDRESS>|
| type |
loginPassword |
Password |
| clickAndWait |
loginForm |
|
| clickAndWait |
link=Index |
|
| clickAndWait |
link=Faculty Member |
|
| assertTitle |
Faculty Member |
|
| clickAndWait |
link=Faculty, Jane |
|
| assertTitle |
Faculty, Jane |
|
| click |
//div[@id='wrapper-content']/ul/li[12] |
|
| clickAndWait |
css=a.add-RO_0000056 > img.add-individual |
|
| assertTitle |
Edit |
|
| clickAndWait |
link=Cancel |
|
| assertTitle |
Faculty, Jane |
|
| clickAndWait |
css=a.add-RO_0000056 > img.add-individual |
|
| assertTitle |
Edit |
|
| clickAndWait |
submit |
|
| assertTitle |
Edit |
|
| verifyTextPresent |
Please select a value in the Organization Type field. |
|
| verifyTextPresent |
Please select a value in the Type of Educational Training field. |
|
| select |
id=typeSelector |
label=College |
| clickAndWait |
id=submit |
|
| assertTitle |
Edit |
|
| verifyTextPresent |
Please select a value in the Type of Educational Training field. |
|
| select |
id=typeSelector |
label=College |
| type |
id=relatedIndLabel |
Carroll College |
| clickAndWait |
id=submit |
|
| assertTitle |
Edit |
|
| verifyTextPresent |
Please select a value in the Type of Educational Training field. |
|
| select |
id=typeSelector |
label=College |
| type |
id=relatedIndLabel |
Carroll College |
| select |
name=trainingType |
label=Academic Studies or Other Training |
| select |
id=degreeUri |
label=B.S. Bachelor of Science |
| type |
majorField |
Business Administration |
| type |
startField-year |
|
| type |
endField-year |
1980 |
| clickAndWait |
submit |
|
| refreshAndWait |
10000 |
|
| refreshAndWait |
10000 |
|
| refreshAndWait |
10000 |
|
| refreshAndWait |
10000 |
|
| refreshAndWait |
10000 |
|
| assertTitle |
Faculty, Jane |
|
| verifyTextPresent |
B.S. in Business Administration, Carroll College 1980 |
|
| verifyElementPresent |
link=Carroll College |
|
| clickAndWait |
css=a.add-RO_0000056 > img.add-individual |
|
| assertTitle |
Edit |
|
| select |
id=typeSelector |
label=University |
| type |
relatedIndLabel |
Carroll University |
| select |
name=trainingType |
label=Academic Studies or Other Training |
| type |
dept |
Business Department |
| select |
id=degreeUri |
label=M.B.A. Master of Business Administration |
| type |
majorField |
Business Administration |
| type |
startField-year |
1998 |
| type |
endField-year |
2000 |
| clickAndWait |
submit |
|
| refreshAndWait |
10000 |
|
| refreshAndWait |
10000 |
|
| refreshAndWait |
10000 |
|
| refreshAndWait |
10000 |
|
| refreshAndWait |
10000 |
|
| assertTitle |
Faculty, Jane |
|
| verifyTextPresent |
B.S. in Business Administration, Carroll College 1980 |
|
| verifyElementPresent |
link=Carroll College |
|
| verifyTextPresent |
M.B.A. in Business Administration, Carroll University , Business Department 1998 - 2000 |
|
| verifyElementPresent |
link=Carroll University |
|
| clickAndWait |
css=a.add-RO_0000056 > img.add-individual |
|
| assertTitle |
Edit |
|
| select |
id=typeSelector |
label=University |
| type |
relatedIndLabel |
University of Wisconsin |
| select |
name=trainingType |
label=Academic Studies or Other Training |
| select |
id=degreeUri |
label=M.Ed. Master of Education |
| type |
majorField |
Business Education |
| type |
info |
Graduate School Fellowship |
| type |
startField-year |
2002 |
| type |
endField-year |
|
| clickAndWait |
submit |
|
| refreshAndWait |
10000 |
|
| refreshAndWait |
10000 |
|
| refreshAndWait |
10000 |
|
| refreshAndWait |
10000 |
|
| refreshAndWait |
10000 |
|
| assertTitle |
Faculty, Jane |
|
| verifyTextPresent |
B.S. in Business Administration, Carroll College 1980 |
|
| verifyElementPresent |
link=Carroll College |
|
| verifyTextPresent |
M.B.A. in Business Administration, Carroll University , Business Department 1998 - 2000 |
|
| verifyElementPresent |
link=Carroll University |
|
| verifyTextPresent |
M.Ed. in Business Education, University of Wisconsin , Graduate School Fellowship 2002 - |
|
| verifyElementPresent |
link=University of Wisconsin |
|
| clickAndWait |
link=Home |
|
| clickAndWait |
link=Log out |
|
| assertTitle |
VIVO |
|


[gecode-users] memory exception
frank lemoine
benouna84 at live.fr
Fri Jan 22 19:40:38 CET 2010
hello gecode users,
i working on a CSP problem that involve graphs nodes, from 10 to 999 nodes it's ok no problem but when i try more than 1000 nodes i've this message:
Exception: memory : heap memory exhausted.
Stopping
so I wonder if there are solutions to this limitation
Frank.
_________________________________________________________________
Découvrez Windows 7 en 7 secondes !
http://clk.atdmt.com/FRM/go/181574577/direct/01/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.gecode.org/pipermail/users/attachments/20100122/d36fc385/attachment.htm>
More information about the users
mailing list


Sign Up
Log In
Kool Store
Home
Catalogs
FAQs
Policies
About
Shop
Details
Contact
Free Shipping on any order above $50
Contact Us
Our Location
Vote For Future Products
Name of Shirt
By: JohnDoe
3
3
Name of Shirt
By: JohnDoe
3
3
Name of Shirt
By: JohnDoe
3
3
Name of Shirt
By: JohnDoe
3
3


job:
[kill job]
[delete job records]
[delete all job data]
Job info
Job is
started:
Waiting
Running
Done
Failed
Map
0
0
0
0
Reduce
0
0
0
0
Current nodes
Map Inputs
Results
Filter:
show
status
|
configure
Disco 0.2.4


黒の手番です。11 はどう動かしますか？
Unlimited
pips Black=137 White=112
(CorrectAnswer= 0/0, ErrorScore= 0)
1. Bar/24 7/6 7/5 eq:-0.333 44.18% (G:10.06% B:0.36%) 55.82% (G:24.14% B:0.88%) 2. Bar/24 10/9 10/8 eq:-0.391 (-0.058) 43.58% (G: 8.67% B:0.32%) 56.42% (G:24.83% B:0.76%) 3. Bar/24 8/7 8/6 eq:-0.409 (-0.076) 42.66% (G: 9.01% B:0.32%) 57.34% (G:25.69% B:0.75%) 4. Bar/24 9/8 9/7 eq:-0.540 (-0.207) 40.02% (G: 8.40% B:0.32%) 59.98% (G:27.49% B:0.90%) 5. Bar/24 10/7 eq:-0.667 (-0.334) 38.85% (G: 7.16% B:0.24%) 61.15% (G:30.36% B:1.58%)


The Philosophy
Flourish! celebrates the open source philosophy that software source code should be free to use and modify, easily shared, and available to anyone. This has allowed for the creation of invaluable software such as the Linux kernel, the Firefox web browser, Wikipedia, and the Apache web server, enabling the modern connected world as we experience it today.


An uncaught exception prevents Augury from continuing. A stack trace is reproduced below. Send Report
{{error.error.stack}}


Follow these steps to configure the optimization nodes:
- Under the Parameters & Constraints tab of the optimization wizard, select one of the follow node types:
- O2-8: For relatively simple strategies with less than 100 assets.
- O4-12: For strategies with less than 500 assets and simple universe selections.
- O8-16: For complex strategies and machine learning.
- Select a maximum number of nodes to use.
After configuring the nodes, click Launch Optimization to start the optimizer.


This product is available via the open source license described at the end of this document.
pvService is a set of network based services for use by High Level Control applications. pvServiceCPP is the C++ implementation of pvService.
Clients access a service via pvAccess which provides network access for pvData. Both pvData and pvAccess are described elsewhere.
Each service provides a client interface that hides pvData and pvAccess details and provides data in form that makes sense for the service. The client architecture is described in the next section.
A brief list of the services provided is:
As mentioned in the introduction, each service provides network access via pvAccess. pvAccess provides "objects" to the user via callbacks. pvAccess also provides threads for communication between a client and a server. With any C++ application memory management is an important consideration.
The service client architecture hides most of the memory management, threading, and pvData issues from the client. It does this via the following features:
Each service, with the exception of error reporting and monitors, provides a synchronous interface to the service client. In order to allow a client to efficiently use multiple services each request that needs to block has two methods associated with each request, a method that initiates the request but returns immediately, and a method that blocks until the request completes. For example most services connect to the server via the following two methods:
Each method returns a status. status is defined in pvDataCPP. This is normally used as follows:
Status::shared_pointer status; ... status xxx->connect(); if(!status->isOK()) { //take some action } status =xxx->waitConnect(2.0); if(!status->isOK()) { //take some action }
A client could access several services simultaneously via code like the following:
status = serviceA->connect() if(!status->isOK()) {...} status = serviceB->connect() if(!status->isOK()) {...} ... status = serviceA->waitConnect() if(!status->isOK()) {...} status = serviceB->waitConnect() if(!status->isOK()) {...} ...
Errors are reported to a client via the client supplied inteface Requester It has the methods:
virtual void monitorEvent();
An implementation is provided in testApp/gather/requesterImpl.h:
class RequesterImpl : public GatherMonitorRequester { public: RequesterImpl(String requesterName,FILE *fd,FILE *auxfd); void startMonitor(Gather::shared_pointer const & gather); virtual String getRequesterName(); virtual void message(String message,MessageType messageType); virtual void monitorEvent(); private: ... };
The default implementation of:
These are the methods that a client is likely to override.
The client is responsible for managing the error reporting and monitor notification interfaces. In additiion each service provides a client callable method that creates an instance of the service. The create method returns the client interface for accessing the service. The interface provides a method named destroy. This is called to terminate client access to the service. The destroy method takes care of all cleanup.
Each service also handles any race conditions associated with accessing memory via separate threads. The general technique is as follows:
The problem is the interaction between client requests and pvAccess callbacks. A service keeps a "state" that describes the current state of interaction with the client. It contains code that checks that a client never calls a method in an incorrect state. Also only client calls result in state changes. Remember that each request has two methods: xxxRequest and waitxxxRequest. The service has an event, which has signal and wait methods, which coordinates between the client calls and the pvAccess callbacks. The waitxxxRequest ALWAYS calls event wait and a pvAccess callback ALWAYS calls event signal when the request is finished. This prevents almost all race conditions. Note that no locking is necessary.
The only possible problem is in an event wait times out. This is almost always because it is not possible to connect to the server or becaiuse the client has specified a short timeout. Most services do the following what a timeout occurs. It terminated the connection to the server by destoying the pvAccess channel that provides the connection to the server. This means that the client must reconnect, i.e. the state becomes "idle".
The create gather service creates gather records that can be accessed by the gather service. For now only the client side of create gather is implemented so a javaIOC must provide the service side of create gather.
The gather service accesses a set of V3 IOC records and presents the data as arrays. See the gather service for details.
The javaIOC implementation provides the following: A createGather record creates and installs gather records. The create gather describes in this section accesses this record.
The interface for create gather is provided by gatherClient.h. The following are the client methods methods for create gather
class CreateGather ... { CreateGather(String serverName,Requester::shared_pointer const &requester); void destroy(); Status::shared_pointer connect(); Status::shared_pointer waitConnect(double timeOut); Status::shared_pointer sendRequest( StringArray channelNames, int numberChannels, String gatherRecordName, bool temporary, bool monitor, bool channelsAreArrays); Status::shared_pointer waitRequest(); ... }
where:
The Gather service attaches to a record created by the CreateGather service.
The gather service provides the ability to monitor for data changes.
The client must implement the following method:
class GatherRequester : public Requester { virtual void monitorEvent(); };
Method monitorEvent is implemented as follows:
void RequesterImpl::monitorEbect() { while(gatherMonitor->poll()) { //gatherData has all the data // look at default implementation to see how to access the data } }
Gather has the methods:
class Gather ... { Gather( String serverName, GatherRequester::shared_pointer requester, bool channelsAreArrays, String commands, String exceptions ); void destroy(); Status::shared_pointer connect(); Status::shared_pointer waitConnect(double timeOut); GatherDataScalar::shared_pointer getGatherDataScalar(); GatherDataArray::shared_pointer getGatherDataArray(); Status::shared_pointer createMonitor(GatherMonitorRequester::shared_pointer const&gatherMonitorRequester); Status::shared_pointer waitCreateMonitor(); GatherMonitor::shared_pointer getGatherMonitor(); Status::shared_pointer get(); Status::shared_pointer waitGet(); Status::shared_pointer putBad(epics::pvData::BooleanArray isBad,int numberChannels); Status::shared_pointer waitPutBad(); Status::shared_pointer putValue(epics::pvData::DoubleArray value); Status::shared_pointer waitPutValue(); ... }
where
GatherData provides the data for the user. The gather record on the server connects to the value field of a set of caV3 records. All caV3 value fields must be a scalar or an array. If the value fields are scalar then a GatherDataArray is created and if they are arrays then a GatherDataArray is created,
GatherData is:
class GatherData : private epics::pvData::NoDefaultMethods { public: Alarm getAlarm(); TimeStamp getTimeStamp(); int getNumberChannels(); bool anyBad(); bool isBad(int index); bool badChange(); bool allConnected(); bool isConnected(int index); bool connectionChange(); int getSeverity(int index); bool severityChange(); // other methods not meant for client protected: ... }; class GatherDataScalar : public GatherData { public: DoubleArray getValue(); void setValue(DoubleArray value,int length); private: ... }; class GatherDataArray : public GatherData { public: DoubleArray getValue(int index); int32 getLength(int index); void setValue(DoubleArray value,int length,int index); private: ... };
GatherData is the base clase. It has the methods:
GatherDataScalar has the method:
GatherDataArray has the methods:
It is possible to monitor the value field of a gather record. The monitor value support implements the following:
class GatherMonitor { public: virtual bool poll() = 0; };
where:
A monior client must implement the following:
class GatherMonitorRequester : public GatherRequester { public: virtual void monitorEvent() = 0; };
This the client must implement all the methods if GatherRequester and must also implement:
The client does something like the following:
void GatherMonitorIsBad::monitorEvent(Monitor* monitor) { while(gatherMonitor->poll()) { // data is obtained by gatherData->>getValue(); // gatherData is either dataGatherScalar or dataGatherArray } }
Copyright (c) 2008 Martin R. Kraimer Copyright (c) 2007 Control System Laboratory, (COSYLAB) Ljubljana Slovenia Copyright (c) 2010 Brookhaven National Laboratory Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ________________________________________________________________________ This software is in part copyrighted by Brookhaven National Laboratory(BNL) In no event shall BNL be liable to any party for direct, indirect, special, incidental, or consequential damages arising out of the use of this software, its documentation, or any derivatives thereof, even if BNL has been advised of the possibility of such damage. BNL specifically disclaims any warranties, including, but not limited to, the implied warranties of merchantability, fitness for a particular purpose, and non-infringement. This software is provided on an "as is" basis, and BNL has no obligation to provide maintenance, support, updates, enhancements, or modifications. ________________________________________________________________________ This software is in part copyrighted by the BERLINER SPEICHERRING GESELLSCHAFT FUER SYNCHROTRONSTRAHLUNG M.B.H. (BESSY), BERLIN, GERMANY. In no event shall BESSY be liable to any party for direct, indirect, special, incidental, or consequential damages arising out of the use of this software, its documentation, or any derivatives thereof, even if BESSY has been advised of the possibility of such damage. BESSY specifically disclaims any warranties, including, but not limited to, the implied warranties of merchantability, fitness for a particular purpose, and non-infringement. This software is provided on an "as is" basis, and BESSY has no obligation to provide maintenance, support, updates, enhancements, or modifications. ________________________________________________________________________ This software is in part copyrighted by the Deutsches Elektronen-Synchroton, Member of the Helmholtz Association, (DESY), HAMBURG, GERMANY. In no event shall DESY be liable to any party for direct, indirect, special, incidental, or consequential damages arising out of the use of this software, its documentation, or any derivatives thereof, even if DESY has been advised of the possibility of such damage. DESY specifically disclaims any warranties, including, but not limited to, the implied warranties of merchantability, fitness for a particular purpose, and non-infringement. This software is provided on an "as is" basis, and DESY has no obligation to provide maintenance, support, updates, enhancements, or modifications. ________________________________________________________________________


| absolute | fun | glamorous | healthy | rugged | total |
|---|---|---|---|---|---|
| official | {{fo}} | {{go}} | {{ho}} | {{ro}} | {{to}} |
| unofficial | {{fu}} | {{gu}} | {{hu}} | {{ru}} | {{tu}} |
| relative | fun | glamorous | healthy | rugged | total |
|---|---|---|---|---|---|
| official | {{fo_rel}}% | {{go_rel}}% | {{ho_rel}}% | {{ro_rel}}% | 100% |
| unofficial | {{fu_rel}}% | {{gu_rel}}% | {{hu_rel}}% | {{ru_rel}}% | 100% |


Here is a list of my projects to date:
A little about me:
I am 23 years old, and have studied at clackamas community college and receieved an associate's degree. my most recent job experience is with a furniture store called Ethan Allen. I was the warehouse manager there. I soon start a new job leasing apartments. I decided to enroll in Epicodus' evening intro course to enhance my understanding of code. I previously knew a little about css and html but I feel a lot better equipped already! When I'm not coding or working, I like to climb, snowboard, read, and hike. I really enjoy the outdoors.
Here is a picture of one of my favorite animals: the majestic Panda Bear.
Here are things Pandas like to do, in order:


Totally Trivial Trivia!
START
Time remaining :
seconds
DONE
All Done !
Correct answers:
Incorrect answers:
Unanswered:


SANKALP
Home
Funds
Register/Sign in
Contact US
Contact US
Your Name:
Submit
Email:
Submit
Anything you want to say?
Submit


{% trans 'What resources do you want to access?' %}
{% comment %}Translators: This text explains that Library Bundle partners are not shown in this list.{% endcomment %}
{% blocktranslate trimmed %}
Library Bundle partners are not shown as eligibility is determined automatically.
{% endblocktranslate %}
{% if any_waitlisted %}
{# Translators: the HTML is so that the word 'waitlisted' will look the same as it does in the page above; please translate 'waitlisted' the same way you did elsewhere in this file. #}
{% blocktranslate trimmed %}
You can apply to Waitlisted
partners, but they don't have access grants available right now. We will process those applications when access becomes available.
{% endblocktranslate %}
{% endif %}


Jaccard Index, in general, is used to determine how similar two sets are based on difference between their intersection and their union. For a graph, these sets are composed of the neighbours of each node, resulting in a high similarity score being assigned to any pair of nodes which are connected to similar neighbours.


« Previous Demo:
Fullscreen Image Blur Effect
Images by BarbraGolba
Back to the Codrops Article
Elastic Image Slideshow with Thumbnail Preview
Passionate
Seeker
Creative
Duet
Friendly
Devil
Tranquilent
Compatriot
Insecure
Hussler
Loving
Rebel
Crazy
Friend
Current
Slide 6
Slide 1
Slide 2
Slide 3
Slide 4
Slide 5
Slide 7
Demo 1
|
Demo 2 (with autoplay)
Resize the window to see the slider adjusting


Best Method and Code: BERT large
Best Method and Code: L MIXED
Last Update: 2019-05-14
Paper: Universal Sentence Encoder
Best Method and Code: USE_T+CNN
Last Update: 2019-04-10
Paper: ACL 2018 Disconnected Recurrent Neural Networks for Text Categorization
Best Method and Code: DRNN
Best Method and Code: SGCN
Last Update: 2019-06-06
Best Method and Code: SGCN
Last Update: 2019-06-06
Paper: COLING 2016 High Accuracy Rule-based Question Classification using Question Syntax and Semantics
Best Method and Code: Rules
Best Method and Code: SGCN
Last Update: 2019-06-06
Best Method and Code: SGCN
Last Update: 2019-06-06
Paper: Compositional coding capsule network with k-means routing for text classification
Best Method and Code: CCCapsNet
Last Update: 2019-06-09


Building/hacking/using on MS-Windows¶
- Maintainer
Frank Fesevur<EMAIL_ADDRESS>This part of the documentation is written by Frank Fesevur, co-maintainer of universal-ctags and the maintainer of the Windows port of this project. It is still very much a work in progress. Things still need to be written down, tested or even investigated. When building for Windows you should be aware that there are many compilers and build environments available. This is a summary of available options and things that have been tested so far.
Compilers¶
There are many compilers for Windows. Compilers not mentioned here may work but are not tested.
Microsoft Visual Studio¶
Obviously there is Microsoft Visual Studio 2013. Many professional developers targeting Windows use Visual Studio. Visual Studio comes in a couple of different editions. Their Express and Community editions are free to use, but a Microsoft-account is required to download the .iso and when you want to continue using it after a 30-days trial period. Other editions of Visual Studio must be purchased.
Installing Visual Studio will give you the IDE, the command line compilers and the MS-version of make named nmake.
Note that ctags cannot be built with Visual Studio older than 2013 anymore. There is C99 (or C11) coding used that generates syntax errors with VS2012 and older. This could affect compilers from other vendors as well.
GCC¶
There are three flavors of GCC for Windows:
MinGW http://www.mingw.org
MinGW-w64 http://mingw-w64.sourceforge.net
TDM-GCC http://tdm-gcc.tdragon.net
MinGW started it all, but development stalled for a while and no x64 was available. Then the MinGW-w64 fork emerged. It started as a 64-bit compiler, but soon they included both a 32-bit and a 64-bit compiler. But the name remained, a bit confusing. Another fork of MinGW is TDM-GCC. It also provides both 32-bit and 64-bit compilers. All have at least GCC 4.8. MinGW-w64 appears to be the most used flavor of MinGW at this moment. Many well known programs that originate from GNU/Linux use MinGW-w64 to compile their Windows port.
Building ctags from the command line¶
Microsoft Visual Studio¶
Most users of Visual Studio will use the IDE and not the command line to compile a project. But by default a shortcut to the command prompt that sets the proper path is installed in the Start Menu. When this command prompt is used nmake -f mk_mvc.mak
will compile ctags. You can also go into the win32
subdirectory and run msbuild ctags_vs2013.sln
for the default build. Use msbuild ctags_vs2013.sln /p:Configuration=Release
to specifically build a release build. MSBuild is what the IDE uses internally and therefore will produce the same files as the IDE.
If you want to build an iconv enabled version, you must specify WITH_ICONV=yes
and ICONV_DIR
like below:
nmake -f mk_mvc.mak WITH_ICONV=yes ICONV_DIR=path/to/iconvlib
If you want to build a debug version using mk_mvc.mak
, you must specify DEBUG=1
like below:
nmake -f mk_mvc.mak DEBUG=1
If you want to create PDB files for debugging even for a release version, you must specify PDB=1
like below:
nmake -f mk_mvc.mak PDB=1
GCC¶
General
All the GCC’s come with installers or with zipped archives. Install or extract them in a directory without spaces.
GNU Make builds for Win32 are available as well, and sometimes are included with the compilers. Make sure it is in your path, for instance by copying the make.exe in the bin directory of your compiler.
Native win32 versions of the GNU/Linux commands cp, rm and mv can be useful. rm is almost always used in by the clean
target of a makefile.
CMD
Any Windows includes a command prompt. Not the most advanced, but it is enough to do the build tasks. Make sure the path is set properly and make -f mk_mingw.mak
should do the trick.
If you want to build an iconv enabled version, you must specify WITH_ICONV=yes
like below:
make -f mk_mingw.mak WITH_ICONV=yes
If you want to build a debug version, you must specify DEBUG=1
like below:
make -f mk_mingw.mak DEBUG=1
MSYS / MSYS2
From their site: MSYS is a collection of GNU utilities such as bash, make, gawk and grep to allow building of applications and programs which depend on traditional UNIX tools to be present. It is intended to supplement MinGW and the deficiencies of the cmd shell.
MSYS comes in two flavors; the original from MinGW and MSYS2. See https://www.msys2.org/ about MSYS2.
MSYS is old but still works. You can build ctags with it using make -f mk_mingw.mak
. The Autotools are too old on MSYS so you cannot use them.
MSYS2 is a more maintained version of MSYS, but specially geared towards MinGW-w64. You can also use Autotools to build ctags.
If you use Autotools you can enable parsers which require jansson, libxml2 or libyaml, and can also do the Units testing with make units
.
The following packages are needed to build a full-featured version:
base-devel (make, autoconf)
mingw-w64-{i686,x86_64}-toolchain (mingw-w64-{i686,x86_64}-gcc, mingw-w64-{i686,x86_64}-pkg-config)
mingw-w64-{i686,x86_64}-jansson
mingw-w64-{i686,x86_64}-libxml2
mingw-w64-{i686,x86_64}-libyaml
mingw-w64-{i686,x86_64}-xz
If you want to build a single static-linked binary, you can use the following command:
./autogen.sh
./configure --disable-external-sort --enable-static
make
--disable-external-sort
is a recommended option for Windows builds.
Cygwin
Cygwin provides ports of many GNU/Linux tools and a POSIX API layer. This is the most complete way to get the GNU/Linux terminal feel under Windows. Cygwin has a setup that helps you install all the tools you need. One drawback of Cygwin is that it has poor performance.
It is easy to build a Cygwin version of ctags using the normal GNU/Linux build steps. This ctags.exe will depend on cygwin1.dll and should only be used within the Cygwin ecosystem.
The following packages are needed to build a full-featured version:
libiconv-devel
libjansson-devel
libxml2-devel
libyaml-devel
Cygwin has packages with a recent version of MinGW-w64 as well. This way it is easy to cross-compile a native Windows application with make -f mk_mingw.mak CC=i686-w64-mingw32-gcc
.
You can also build a native Windows version using Autotools.
./autogen.sh
./configure --host=i686-w64-mingw32 --disable-external-sort
make
If you use Autotools you can also do the Units testing with make units
.
Some anti-virus software slows down the build and test process significantly, especially when ./configure
is running and during the Units tests. In that case it could help to temporarily disable them. But be aware of the risks when you disable your anti-virus software.
Cross-compile from GNU/Linux
All major distributions have both MinGW and MinGW-w64 packages. Cross-compiling works the same way as with Cygwin. You cannot do the Windows based Units tests on GNU/Linux.
Building ctags with IDEs¶
I have no idea how things work for most GNU/Linux developers, but most Windows developers are used to IDEs. Not many use a command prompt and running the debugger from the command line is not a thing a Windows developers would normally do. Many IDEs exist for Windows, I use the two below.
Microsoft Visual Studio¶
As already mentioned Microsoft Visual Studio 2013 has the free Express and Community editions. For ctags the Windows Desktop Express Edition is enough to get the job done. The IDE has a proper debugger. Project files for VS2013 can be found in the win32 directory.
Please know that when files are added to the sources.mak, these files need to be added to the .vcxproj and .vcxproj.filters files as well. The XML of these files should not be a problem.
Code::Blocks¶
Code::Blocks is a decent GPL-licensed IDE that has good gcc and gdb integration. The TDM-GCC that can be installed together with Code::Blocks works fine and I can provide a project file. This is an easy way to have a free - free as in beer as well as in speech - solution and to have the debugger within the GUI as well.
Other differences between Microsoft Windows and GNU/Linux¶
There other things where building ctags on Microsoft Windows differs from building on GNU/Linux.
Filenames on Windows file systems are case-preserving, but not case-sensitive.
Windows file systems use backslashes
"\"
as path separators, but paths with forward slashes"/"
are no problem for a Windows program to recognize, even when a full path (include drive letter) is used.The default line-ending on Windows is CRLF. A tags file generated by the Windows build of ctags will contain CRLF.
The tools used to build ctags do understand Unix-line endings without problems. There is no need to convert the line-ending of existing files in the repository.
Due to the differences between the GNU/Linux and Windows C runtime library there are some things that need to be added to ctags to make the program as powerful as it is on GNU/Linux. At this moment regex and fnmatch are borrowed from glibc. mkstemp() is taken from MinGW-w64’s runtime library. scandir() is taken from Pacemaker.
Units testing needs a decent
bash
shell, some unix-like tools (e.g.diff
,sed
) and Python 3.5 or later. It is only tested using Cygwin or MSYS2.