Cancellable optimistic updates in Angular 2 and Redux
Angular 2 and redux are 2 technologies that are getting a lot of traction these days. Angular 2 is a SPA (single-page-app) framework and redux is a state management tool. Most developers that are using Angular 2 are using the @ngrx/store variant of the redux principle. Because I’m one of them I will be using @ngrx/store instead of redux.js for this article. Don’t let that bother you, what you are about to read can be used with redux.js in the exact same way. If you have never heard about redux, I strongly advice to read the documentation first.
Optimistic updates
Redux has a client-side store that has all the data and state your client-side application needs. Therefore, it is the single source of truth for your frontend. When something in that store changes, your components get updated automatically. Let’s say that we are implementing a winecellar application which will obviously contain an array of wines.
Scenario: we want to remove a wine from the winecellar.
A user goes to the index page of our application, clicks a delete button in the datagrid which will call an angular service to remove a wine. The service does an HTTP call to a server, and when the wine finally gets deleted, the service responds with a 200 response (ok). When that happens we can update the redux store and our view gets updated.
The code explained above might look like this:
remove(wine: Wine): void {
this.http.delete(`${API_URL}/wines/${wine._id}`).subscribe(() => {
// dispatch the action to the store, when the call was successful
this.store.dispatch({type: REMOVE_WINE, payload: {_id: wine._id}});
});
}
This is the traditional way of doing things, but I think we can do it better. What if we would update the store, regardless of the HTTP response the server returns? We click the delete button in the datagrid, call the angular service like we already did. But in that service we update the store directly (parallel with the http call)
The code explained above might look like this:
remove(wine: Wine): void {
// dispatch directly to the store
this.store.dispatch({type: REMOVE_WINE, payload: {_id: wine._id}};
// we still have to subscribe because http calls return cold observables
this.http.delete(`${API_URL}/wines/${wine._id}`).subscribe();
}
This is a pretty nice change: Our application has just gotten a lot faster and snappier. Every time the user does an action, the store gets updated immediately, which means that the components will get updated immediately as well. We never have to wait for http responses again.
There is one exception to this rule: When adding data, the backend has to return an ID which means that for POST calls we will have to postpone the store update until we get a 200 response. (otherwise we would have id-less wines in our store, and we can’t have that)
What if the server-call fails?
What if the user’s internet-connection is lost? Or the backend doesn’t return a 200 response but an error. Our store will already be updated, the wine will be lost when it’s in fact still in the database. In some scenarios you want to prevent that kind of behavior. In those cases we want to rollback that specific action, but not interfere with the rest of the actions. It has to be completely safe.
We would like to implement something like this:
remove(wine: Wine): void {
// create an action
let action = {type: REMOVE_WINE, payload: {_id: wine._id}};
//dispatch the action to the store
this.store.dispatch(action);
// call the backend
this.http.delete(`${API_URL}/wines/${wine._id}`)
.subscribe(
// on success, do nothing
() => {},
// on error, rollback the action
() => {
this.store.dispatch({type: "UNDO_ACTION", payload: action});
// maybe show somekind of errormessage to show the user that it's action failed
});
}
It turns out that when using the redux pattern, this only takes 12 lines of code (without comments :-)). We will have to create a parent reducer that will delegate to our root reducer. The parent reducer will keep track of all the actions, so they can be rolled back. The implementation looks like this:
import {ApplicationState} from "../statemanagement/state/ApplicationState";
import {Action, ActionReducer} from "@ngrx/store";
export function handleUndo(rootReducer: ActionReducer<ApplicationState>)
: ActionReducer<ApplicationState> {
// keep the executedActions
let executedActions: Array<Action> = [];
return (state: ApplicationState, action: Action) => {
if (action.type === "UNDO_ACTION") {
// if the action is UNDO_ACTION,
// then call all the actions again on the rootReducer,
// except the one we want to rollback
let newState: any = {};
executedActions = executedActions.filter(eAct => eAct !== action.payload);
// update the state for every action untill we get the
// exact same state as before, but without the action we want to rollback
executedActions.forEach(executedAction =>
newState = rootReducer(newState, executedAction));
return newState;
}
// push every action that isn't an UNDO_ACTION to the executedActions property
executedActions.push(action);
// just delegate
return rootReducer(state, action);
};
}
So basically, when an action is being rolled back, every action that has been taken before is being executed on a piece of state again. When that piece of state is updated, it will return it and the store will be updated with the same state, except the one that our rolled back action created.
To make sure the actions can be undone, we have to make redux use the piece of code above. This is how you could use it in Angular 2.
@NgModule({
// instead of passing the rootReducer directly
// like we would have done before, wrap it in the handleUndo function
imports: [StoreModule.provideStore(handleUndo(rootReducer))/*, ...*/],
/* ... */
})
export class AppModule {
}
Possible improvements
Won’t it become slow after a while, replaying all these actions? Some facts:
- Actions are very cheap
- They will update the store only once, we execute the actions ourselves, so ui won't get updated
- Actions only get replayed when there is an error
- The devtools also work like that, enables [timetraveling](https://onsen.io/blog/react-redux-devtools-with-time-travel)
What if it would become slow? We can implement a buffer. Let’s say that we only want the last 100 actions to be kept.
export function handleUndo(rootReducer: ActionReducer<ApplicationState>,
bufferSize = 100): ActionReducer<ApplicationState> {
let executedActions: Array<Action> = [];
let initialState = undefined;
return (state: ApplicationState, action: Action) => {
if (action.type === "UNDO_ACTION") {
// if the action is UNDO_ACTION,
// then call all the actions again on the rootReducer,
// except the one we want to rollback
let newState: any = initialState;
executedActions = executedActions.filter(eAct => eAct !== action.payload);
// update the state for every action untill we get the
// exact same state as before, but without the action we want to rollback
executedActions.forEach(executedAction =>
newState = rootReducer(newState, executedAction));
return newState;
}
// push every action that isn't an UNDO_ACTION to the executedActions property
executedActions.push(action);
let updatedState = rootReducer(state, action);
if (executedActions.length === bufferSize + 1) {
let firstAction = executedActions[0];
// calculate the state x (buffersize) actions ago
initialState = rootReducer(initialState, firstAction);
// keep the correct actions
executedActions = executedActions.slice(1, bufferSize + 1);
}
return updatedState;
};
}
Conclusion
The redux pattern has opened amazing doors for frontend development. Just like realtime became a breeze we can do optimistic updates with almost no effort. The reason why you would do optimistic updates is that your application becomes amazingly fast and snappy! When implementing optimistic updates, the user will experience a native, mobile feeling.
Here you can find the npm package I’ve created for angular, called ngrx-undo
Let me know if you enjoyed this article!


Branded Foods
Households
Veggies & Fruits
Vegetables
Fruits
Kitchen
Short Codes
Beverages
Soft Drinks
Juices
Pet Food
Frozen Foods
Frozen Snacks
Frozen Nonveg
Bread & Bakery
Best Deals For New Products
Search result:
0
Popular Brands
Food
vegetables & Fruits
Beverages


Transport hubs are most cost-effective if they are located at places that are along many movement traces
and are either close to where the traces start, end or merge. Such hubs represent minimal detours and are
attractive for travelers. Try to beat Gordian by selecting road segments for potential hub locations that
are within a user-defined distance from the start of as many movement traces as possible. As a little
hint: A segment is brighter the more movement traces pass through it. A triangle is larger the more
movement traces start from it. Good luck!


Creates two instances for the claimed device to illustrate the use of device Retain/Release functionality.


Postman is an easy testing environment, where you can simply import and run prepared tests.
Download latest Postman application to use prepared Postman tests here.
You can download Postman tests with environmental variables for all the endpoints by clicking "Download" button below.
After downloading the files, import them into Postman and start testing.


{% extends 'public/_layouts/_rightbar.html' %} {% block title %} Students {% endblock %} {% block body %}
{# List of students by departments #} {% if department %} {# loop through all departments #} {% for dept in department %} {% if dept %}{{ student.matric }} - {{ student.department }}


Bosasa To Auction Off Assets In Order To Settle Debt
by NT EditorBosasa’s assets will be auctioned off next month to settle the debt the company owed to creditors.
The embattled company, now named African Global Operations and most of its subsidiaries, were liquidated earlier this year.
The company has been hit by allegations of corruption, dodgy dealings and bribery of prominent politicians in order to secure billions in lucrative contracts.
CEO Gavin Watson died in August in a car accident days before he was expected to appear at the Zondo commission of inquiry.
He had been fingered by former COO Angelo Agrizzi as the mastermind behind the corruption.
Clive Lazarus, from Park Village Auctions, is in charge of the sale: “We’re selling a copper plant, about a 120 vehicles and some beautiful office furniture and house furniture.”
Park Village Auctions also said the companies in question were Global Technology Systems (Pty) Ltd, Bosasa Properties (Pty) Ltd, Rodcor (Pty) Ltd, African Global Operations (Pty) Ltd, Watson Corporate Academy (Pty) Ltd, On-IT-1 (Pty) Ltd, Bosasa IT (Pty), Bosasa Supply Chain Management (Pty), Leading Prospect Trading 111 (Pty), Bosasa Youth Development Centres (Pty) Ltd, Black Rox Security Intelligence Services (Pty) Ltd, giving rise to the extensive variety of lots to be sold.


| /wai-aria/alertdialog_modal_true-manual.html (1/2, 50.00%, 0.40% of total) | OK | OK | OK | OK | OK |
| alertdialog modal true 1 | - | FAIL | FAIL | - | PASS |
| FF02: | assert_true: "property accessible is false" failed
Actual value: true
; expected true got false |
| GC02: | assert_true: "property accessible is false" failed
Actual value: true
; expected true got false |
|
| /wai-aria/application_activedescendant-manual.html (2/2, 100.00%, 0.79% of total) | OK | OK | OK | OK | OK |
| application activedescendant | PASS | FAIL | FAIL | FAIL | FAIL |
| FF02: | assert_true: "property AXSubrole is AXWebApplication" failed
Actual value: None
; "property AXRoleDescription is web application" failed
Actual value: group
; expected true got false |
| GC02: | assert_true: "property AXSubrole is AXWebApplication" failed
Actual value: AXLandmarkApplication
; "property AXRoleDescription is web application" failed
Actual value: application
; expected true got false |
| WK01: | assert_true: "property states doesNotContain STATE_FOCUSED" failed
Actual value: ['STATE_ENABLED', 'STATE_FOCUSABLE', 'STATE_FOCUSED', 'STATE_HORIZONTAL', 'STATE_SENSITIVE', 'STATE_SHOWING', 'STATE_VISIBLE']
; expected true got false |
| WK02: | assert_true: "property AXFocused is false" failed
Actual value: true
; expected true got false |
|
| application activedescendant 1 | FAIL | FAIL | FAIL | FAIL | FAIL |
| FF01: | assert_true: "property states contains STATE_FOCUSED" failed
Actual value: ['STATE_ENABLED', 'STATE_OPAQUE', 'STATE_SENSITIVE', 'STATE_SHOWING', 'STATE_VISIBLE', 'STATE_SELECTABLE_TEXT']
; "property states contains STATE_FOCUSABLE" failed
Actual value: ['STATE_ENABLED', 'STATE_OPAQUE', 'STATE_SENSITIVE', 'STATE_SHOWING', 'STATE_VISIBLE', 'STATE_SELECTABLE_TEXT']
https://bugzil.la/1359045: [NEW] A container's active descendant should expose ATK_STATE_FOCUSABLE in addition to ATK_STATE_FOCUSED
; expected true got false |
| FF02: | assert_true: "property AXFocused is true" failed
Actual value: false
; "result AXUIElementIsAttributeSettable(AXFocused) is true" failed
Actual value: false
; expected true got false |
| GC02: | assert_true: "result AXUIElementIsAttributeSettable(AXFocused) is true" failed
Actual value: false
; expected true got false |
| WK01: | assert_true: "property states contains STATE_FOCUSED" failed
Actual value: ['STATE_ENABLED', 'STATE_HORIZONTAL', 'STATE_SENSITIVE', 'STATE_SHOWING', 'STATE_VISIBLE']
; "property states contains STATE_FOCUSABLE" failed
Actual value: ['STATE_ENABLED', 'STATE_HORIZONTAL', 'STATE_SENSITIVE', 'STATE_SHOWING', 'STATE_VISIBLE']
; expected true got false |
| WK02: | assert_true: "property AXFocused is true" failed
Actual value: false
; "result AXUIElementIsAttributeSettable(AXFocused) is true" failed
Actual value: false
; expected true got false |
|
| /wai-aria/application_activedescendant_value_changes-manual.html (2/2, 100.00%, 0.79% of total) | OK | OK | OK | OK | OK |
| application activedescendant value changes | PASS | FAIL | FAIL | FAIL | FAIL |
| FF02: | assert_true: "property AXSubrole is AXWebApplication" failed
Actual value: None
; "property AXRoleDescription is web application" failed
Actual value: group
; "result AXUIElementIsAttributeSettable(AXFocused) is true" failed
Actual value: false
; "event type is AXSelectedChildrenChanged" failed
; expected true got false |
| GC02: | assert_true: "property AXSubrole is AXWebApplication" failed
Actual value: AXLandmarkApplication
; "property AXRoleDescription is web application" failed
Actual value: application
; "event type is AXSelectedChildrenChanged" failed
; expected true got false |
| WK01: | assert_true: "property states doesNotContain STATE_FOCUSED" failed
Actual value: ['STATE_ENABLED', 'STATE_FOCUSABLE', 'STATE_FOCUSED', 'STATE_HORIZONTAL', 'STATE_SENSITIVE', 'STATE_SHOWING', 'STATE_VISIBLE']
; expected true got false |
| WK02: | assert_true: "property AXFocused is false" failed
Actual value: true
; "event type is AXSelectedChildrenChanged" failed
; expected true got false |
|
| application activedescendant value changes 1 | FAIL | FAIL | FAIL | FAIL | FAIL |
| FF01: | assert_true: "property states contains STATE_FOCUSED" failed
Actual value: ['STATE_ENABLED', 'STATE_OPAQUE', 'STATE_SENSITIVE', 'STATE_SHOWING', 'STATE_VISIBLE', 'STATE_SELECTABLE_TEXT']
; "property states contains STATE_FOCUSABLE" failed
Actual value: ['STATE_ENABLED', 'STATE_OPAQUE', 'STATE_SENSITIVE', 'STATE_SHOWING', 'STATE_VISIBLE', 'STATE_SELECTABLE_TEXT']
https://bugzil.la/1359045: [NEW] A container's active descendant should expose ATK_STATE_FOCUSABLE in addition to ATK_STATE_FOCUSED
; "event type is object:state-changed:focused" failed
; expected true got false |
| FF02: | assert_true: "property AXFocused is true" failed
Actual value: false
; "result AXUIElementIsAttributeSettable(AXFocused) is true" failed
Actual value: false
; "event type is AXFocusedUIElementChanged" failed
; expected true got false |
| GC02: | assert_true: "result AXUIElementIsAttributeSettable(AXFocused) is true" failed
Actual value: false
; "event type is AXFocusedUIElementChanged" failed
; expected true got false |
| WK01: | assert_true: "property states contains STATE_FOCUSED" failed
Actual value: ['STATE_ENABLED', 'STATE_HORIZONTAL', 'STATE_SENSITIVE', 'STATE_SHOWING', 'STATE_VISIBLE']
; "property states contains STATE_FOCUSABLE" failed
Actual value: ['STATE_ENABLED', 'STATE_HORIZONTAL', 'STATE_SENSITIVE', 'STATE_SHOWING', 'STATE_VISIBLE']
; "event type is object:state-changed:focused" failed
; expected true got false |
| WK02: | assert_true: "property AXFocused is true" failed
Actual value: false
; "result AXUIElementIsAttributeSettable(AXFocused) is true" failed
Actual value: false
; "event type is AXFocusedUIElementChanged" failed
; expected true got false |
|
| /wai-aria/cell-manual.html (2/2, 100.00%, 0.79% of total) | OK | OK | OK | OK | OK |
| cell | FAIL | FAIL | FAIL | FAIL | PASS |
| FF01: | assert_true: "result atktablegetncolumns() is 8" failed
Actual value: 1
https://bugzil.la/1356997: [NEW] atk_table_get_n_{columns,rows} should report the values of aria-{col,row}count
; expected true got false |
| FF02: | assert_true: "property AXARIAColumnCount is 8" failed
Actual value: None
; expected true got false |
| GC02: | assert_true: "property AXARIAColumnCount is 8" failed
Actual value: None
; expected true got false |
| WK01: | assert_true: "result atktablegetncolumns() is 8" failed
Actual value: 1
https://webkit.org/b/171172: [NEW] [ATK] atk_table_get_n_rows() and atk_table_get_n_columns() should return values of aria-rowcount and aria-colcount, if present
; expected true got false |
|
| cell 1 | FAIL | FAIL | FAIL | FAIL | PASS |
| FF01: | assert_true: "result atktablecellgetposition() contains column=3" failed
Actual value: (1, row=0, column=0)
https://bugzil.la/1357188: [NEW] atk_table_cell_get_position() should report the values of aria-rowindex and aria-colindex
; expected true got false |
| FF02: | assert_true: "property AXARIAColumnIndex is 4" failed
Actual value: None
; expected true got false |
| GC02: | assert_true: "property AXARIAColumnIndex is 4" failed
Actual value: None
; expected true got false |
| WK01: | assert_true: "result atktablecellgetposition() contains column=3" failed
Actual value: (1, row=0, column=0)
https://webkit.org/b/171176: [NEW] [ATK] atk_table_cell_get_position() should return values of aria-rowindex and aria-colindex, if present
; expected true got false |
|
| /wai-aria/cell_colindex_4-manual.html (1/1, 100.00%, 0.40% of total) | OK | OK | OK | OK | OK |
| cell colindex 4 | FAIL | FAIL | FAIL | FAIL | PASS |
| FF01: | assert_true: "result atktablecellgetposition() contains column=3" failed
Actual value: (1, row=0, column=0)
https://bugzil.la/1357188: [NEW] atk_table_cell_get_position() should report the values of aria-rowindex and aria-colindex
; expected true got false |
| FF02: | assert_true: "property AXARIAColumnIndex is 4" failed
Actual value: None
; expected true got false |
| GC02: | assert_true: "property AXARIAColumnIndex is 4" failed
Actual value: None
; expected true got false |
| WK01: | assert_true: "result atktablecellgetposition() contains column=3" failed
Actual value: (1, row=0, column=0)
https://webkit.org/b/171176: [NEW] [ATK] atk_table_cell_get_position() should return values of aria-rowindex and aria-colindex, if present
; expected true got false |
|
| /wai-aria/cell_rowindex_4-manual.html (1/1, 100.00%, 0.40% of total) | OK | OK | OK | OK | OK |
| cell rowindex 4 | FAIL | FAIL | FAIL | FAIL | PASS |
| FF01: | assert_true: "result atktablecellgetposition() contains row=3" failed
Actual value: (1, row=0, column=0)
https://bugzil.la/1357188: [NEW] atk_table_cell_get_position() should report the values of aria-rowindex and aria-colindex
; expected true got false |
| FF02: | assert_true: "property AXARIARowIndex is 4" failed
Actual value: None
; expected true got false |
| GC02: | assert_true: "property AXARIARowIndex is 4" failed
Actual value: None
; expected true got false |
| WK01: | assert_true: "result atktablecellgetposition() contains row=3" failed
Actual value: (1, row=0, column=0)
https://webkit.org/b/171176: [NEW] [ATK] atk_table_cell_get_position() should return values of aria-rowindex and aria-colindex, if present
; expected true got false |
|
| /wai-aria/columnheader_colindex_4-manual.html (1/1, 100.00%, 0.40% of total) | OK | OK | OK | OK | OK |
| columnheader colindex 4 | FAIL | FAIL | FAIL | FAIL | PASS |
| FF01: | assert_true: "result atktablecellgetposition() contains column=3" failed
Actual value: (1, row=0, column=0)
https://bugzil.la/1357188: [NEW] atk_table_cell_get_position() should report the values of aria-rowindex and aria-colindex
; expected true got false |
| FF02: | assert_true: "property AXARIAColumnIndex is 4" failed
Actual value: None
; expected true got false |
| GC02: | assert_true: "property AXARIAColumnIndex is 4" failed
Actual value: None
; expected true got false |
| WK01: | assert_true: "result atktablecellgetposition() contains column=3" failed
Actual value: (1, row=0, column=0)
https://webkit.org/b/171176: [NEW] [ATK] atk_table_cell_get_position() should return values of aria-rowindex and aria-colindex, if present
; expected true got false |
|
| /wai-aria/columnheader_rowindex_4-manual.html (1/1, 100.00%, 0.40% of total) | OK | OK | OK | OK | OK |
| columnheader rowindex 4 | FAIL | FAIL | FAIL | FAIL | PASS |
| FF01: | assert_true: "result atktablecellgetposition() contains row=3" failed
Actual value: (1, row=0, column=0)
https://bugzil.la/1357188: [NEW] atk_table_cell_get_position() should report the values of aria-rowindex and aria-colindex
; expected true got false |
| FF02: | assert_true: "property AXARIARowIndex is 4" failed
Actual value: None
; expected true got false |
| GC02: | assert_true: "property AXARIARowIndex is 4" failed
Actual value: None
; expected true got false |
| WK01: | assert_true: "result atktablecellgetposition() contains row=3" failed
Actual value: (1, row=0, column=0)
https://webkit.org/b/171176: [NEW] [ATK] atk_table_cell_get_position() should return values of aria-rowindex and aria-colindex, if present
; expected true got false |
|
| /wai-aria/combobox_haspopup_false-manual.html (1/1, 100.00%, 0.40% of total) | OK | OK | OK | OK | OK |
| combobox haspopup false | FAIL | FAIL | FAIL | PASS | FAIL |
| FF01: | assert_true: "property states doesNotContain STATE_HAS_POPUP" failed
Actual value: ['STATE_ENABLED', 'STATE_EXPANDABLE', 'STATE_EXPANDED', 'STATE_OPAQUE', 'STATE_SENSITIVE', 'STATE_SHOWING', 'STATE_VISIBLE', 'STATE_SELECTABLE_TEXT', 'STATE_HAS_POPUP']
; expected true got false |
| FF02: | assert_true: "property AXRole is AXComboBox" failed
Actual value: AXPopUpButton
; "property AXRoleDescription is combo box" failed
Actual value: pop up button
; "property AXExpanded is true" failed
Actual value: None
; expected true got false |
| GC02: | assert_true: "property actions doesNotContain AXShowMenu" failed
Actual value: (
AXShowMenu,
AXScrollToVisible
)
https://github.com/w3c/aria/issues/570: [OPEN] Core-AAM: AXPress and AXShowMenu on aria-haspopup is potentially misleading/confusing
; expected true got false |
| WK02: | assert_true: "property actions doesNotContain AXShowMenu" failed
Actual value: (
AXShowMenu,
AXScrollToVisible
)
https://github.com/w3c/aria/issues/570: [OPEN] Core-AAM: AXPress and AXShowMenu on aria-haspopup is potentially misleading/confusing
; expected true got false |
|
| /wai-aria/dialog_modal_true-manual.html (1/2, 50.00%, 0.40% of total) | OK | OK | OK | OK | OK |
| dialog modal true 1 | - | FAIL | FAIL | - | PASS |
| FF02: | assert_true: "property accessible is false" failed
Actual value: true
; expected true got false |
| GC02: | assert_true: "property accessible is false" failed
Actual value: true
; expected true got false |
|
| /wai-aria/errormessage_object_in_valid_state-manual.html (2/2, 100.00%, 0.79% of total) | OK | OK | OK | OK | OK |
| errormessage object in valid state | FAIL | FAIL | FAIL | FAIL | FAIL |
| FF01: | assert_true: "property relations doesNotContain RELATION_ERROR_MESSAGE" failed
Actual value: ['RELATION_LABELLED_BY', 'RELATION_ERROR_MESSAGE']
; expected true got false |
| FF02: | assert_true: "property TBD is TBD" failed
; expected true got false |
| GC02: | assert_true: "property TBD is TBD" failed
; expected true got false |
| WK01: | assert_true: "property relations doesNotContain RELATION_ERROR_MESSAGE" failed
Actual value: ['RELATION_LABELLED_BY', 'RELATION_ERROR_MESSAGE']
; expected true got false |
| WK02: | assert_true: "property TBD is TBD" failed https://webkit.org/b/165190
; expected true got false |
|
| errormessage object in valid state 1 | FAIL | - | - | FAIL | - |
| FF01: | assert_true: "property relations doesNotContain RELATION_ERROR_FOR" failed
Actual value: ['RELATION_ERROR_FOR']
; expected true got false |
| WK01: | assert_true: "property relations doesNotContain RELATION_ERROR_FOR" failed
Actual value: ['RELATION_ERROR_FOR']
; expected true got false |
|
| /wai-aria/grid_colcount_8-manual.html (1/1, 100.00%, 0.40% of total) | OK | OK | OK | OK | OK |
| grid colcount 8 | FAIL | FAIL | FAIL | FAIL | PASS |
| FF01: | assert_true: "result atktablegetncolumns() is 8" failed
Actual value: 1
https://bugzil.la/1356997: [NEW] atk_table_get_n_{columns,rows} should report the values of aria-{col,row}count
; expected true got false |
| FF02: | assert_true: "property AXARIAColumnCount is 8" failed
Actual value: None
; expected true got false |
| GC02: | assert_true: "property AXRole is AXTable" failed
Actual value: AXGrid
; expected true got false |
| WK01: | assert_true: "result atktablegetncolumns() is 8" failed
Actual value: 1
https://webkit.org/b/171172: [NEW] [ATK] atk_table_get_n_rows() and atk_table_get_n_columns() should return values of aria-rowcount and aria-colcount, if present
; expected true got false |
|
| /wai-aria/grid_rowcount_3-manual.html (1/1, 100.00%, 0.40% of total) | OK | OK | OK | OK | OK |
| grid rowcount 3 | FAIL | FAIL | FAIL | FAIL | PASS |
| FF01: | assert_true: "result atktablegetnrows() is 3" failed
Actual value: 1
https://bugzil.la/1356997: [NEW] atk_table_get_n_{columns,rows} should report the values of aria-{col,row}count
; expected true got false |
| FF02: | assert_true: "property AXARIARowCount is 3" failed
Actual value: None
; expected true got false |
| GC02: | assert_true: "property AXRole is AXTable" failed
Actual value: AXGrid
; expected true got false |
| WK01: | assert_true: "result atktablegetnrows() is 3" failed
Actual value: 1
https://webkit.org/b/171172: [NEW] [ATK] atk_table_get_n_rows() and atk_table_get_n_columns() should return values of aria-rowcount and aria-colcount, if present
; expected true got false |
|
| /wai-aria/keyshortcuts_multiple_shortcuts-manual.html (1/1, 100.00%, 0.40% of total) | OK | OK | OK | OK | OK |
| keyshortcuts multiple shortcuts | PASS | FAIL | FAIL | FAIL | FAIL |
| FF02: | assert_true: "result The element with role="button" and id="test", does not expose aria-keyshortcuts is true" failed
Actual value: None
ERROR: The element with role="button" and id="test", does not expose aria-keyshortcuts is not supported
ERROR: 'NoneType' object is not callable
; expected true got false |
| GC02: | assert_true: "result The element with role="button" and id="test", does not expose aria-keyshortcuts is true" failed
Actual value: None
ERROR: The element with role="button" and id="test", does not expose aria-keyshortcuts is not supported
ERROR: 'NoneType' object is not callable
; expected true got false |
| WK01: | assert_true: "property objectAttributes contains keyshortcuts:Shift+Space Alt+Space" failed
Actual value: ['computed-role:button', 'xml-roles:button', 'html-id:test', 'tag:div', 'toolkit:WebKitGtk']
https://webkit.org/b/171175: [NEW] [ATK] Expose value of aria-keyshortcuts as object attribute
; expected true got false |
| WK02: | assert_true: "result The element with role="button" and id="test", does not expose aria-keyshortcuts is true" failed
Actual value: None
ERROR: The element with role="button" and id="test", does not expose aria-keyshortcuts is not supported
ERROR: 'NoneType' object is not callable
https://webkit.org/b/159215: [NEW] AX: ARIA 1.1 @aria-keyshortcuts
; expected true got false |
|
| /wai-aria/keyshortcuts_one_shortcut-manual.html (1/1, 100.00%, 0.40% of total) | OK | OK | OK | OK | OK |
| keyshortcuts one shortcut | PASS | FAIL | FAIL | FAIL | FAIL |
| FF02: | assert_true: "result The element with role="button" and id="test", does not expose aria-keyshortcuts is true" failed
Actual value: None
ERROR: The element with role="button" and id="test", does not expose aria-keyshortcuts is not supported
ERROR: 'NoneType' object is not callable
; expected true got false |
| GC02: | assert_true: "result The element with role="button" and id="test", does not expose aria-keyshortcuts is true" failed
Actual value: None
ERROR: The element with role="button" and id="test", does not expose aria-keyshortcuts is not supported
ERROR: 'NoneType' object is not callable
; expected true got false |
| WK01: | assert_true: "property objectAttributes contains keyshortcuts:Shift+Space" failed
Actual value: ['computed-role:button', 'xml-roles:button', 'html-id:test', 'tag:div', 'toolkit:WebKitGtk']
https://webkit.org/b/171175: [NEW] [ATK] Expose value of aria-keyshortcuts as object attribute
; expected true got false |
| WK02: | assert_true: "result The element with role="button" and id="test", does not expose aria-keyshortcuts is true" failed
Actual value: None
ERROR: The element with role="button" and id="test", does not expose aria-keyshortcuts is not supported
ERROR: 'NoneType' object is not callable
https://webkit.org/b/159215: [NEW] AX: ARIA 1.1 @aria-keyshortcuts
; expected true got false |
|
| /wai-aria/option_selected_value_changes-manual.html (3/3, 100.00%, 1.19% of total) | OK | OK | OK | OK | OK |
| option selected value changes | PASS | FAIL | FAIL | FAIL | FAIL |
| FF02: | assert_true: "event type is AXSelectedChildrenChanged" failed
; expected true got false |
| GC02: | assert_true: "event type is AXSelectedChildrenChanged" failed
; expected true got false |
| WK01: | assert_true: "event type is object:state-changed:selected" failed https://webkit.org/b/171186
; expected true got false |
| WK02: | assert_true: "event type is AXSelectedChildrenChanged" failed
; expected true got false |
|
| option selected value changes 1 | PASS | FAIL | FAIL | FAIL | FAIL |
| FF02: | assert_true: ERROR: No results reported from ATTA; expected true got false |
| GC02: | assert_true: ERROR: No results reported from ATTA; expected true got false |
| WK01: | assert_true: "event type is object:selection-changed" failed https://webkit.org/b/171186
; expected true got false |
| WK02: | assert_true: ERROR: No results reported from ATTA; expected true got false |
|
| option selected value changes 2 | PASS | - | - | FAIL | - |
|
| /wai-aria/row_colindex_4-manual.html (1/2, 50.00%, 0.40% of total) | OK | OK | OK | OK | OK |
| row colindex 4 1 | FAIL | FAIL | FAIL | FAIL | PASS |
| FF01: | assert_true: "result atktablecellgetposition() contains column=3" failed
Actual value: (1, row=0, column=0)
https://bugzil.la/1357188: [NEW] atk_table_cell_get_position() should report the values of aria-rowindex and aria-colindex
; expected true got false |
| FF02: | assert_true: "property AXARIAColumnIndex is 4" failed
Actual value: None
; expected true got false |
| GC02: | assert_true: "property AXARIAColumnIndex is 4" failed
Actual value: None
; expected true got false |
| WK01: | assert_true: "result atktablecellgetposition() contains column=3" failed
Actual value: (1, row=0, column=0)
https://webkit.org/b/171176: [NEW] [ATK] atk_table_cell_get_position() should return values of aria-rowindex and aria-colindex, if present
; expected true got false |
|
| /wai-aria/row_rowindex_4-manual.html (1/2, 50.00%, 0.40% of total) | OK | OK | OK | OK | OK |
| row rowindex 4 1 | FAIL | FAIL | FAIL | FAIL | PASS |
| FF01: | assert_true: "result atktablecellgetposition() contains row=3" failed
Actual value: (1, row=0, column=0)
https://bugzil.la/1357188: [NEW] atk_table_cell_get_position() should report the values of aria-rowindex and aria-colindex
; expected true got false |
| FF02: | assert_true: "property AXARIARowIndex is 4" failed
Actual value: None
; expected true got false |
| GC02: | assert_true: "property AXARIARowIndex is 4" failed
Actual value: None
; expected true got false |
| WK01: | assert_true: "result atktablecellgetposition() contains row=3" failed
Actual value: (1, row=0, column=0)
https://webkit.org/b/171176: [NEW] [ATK] atk_table_cell_get_position() should return values of aria-rowindex and aria-colindex, if present
; expected true got false |
|
| /wai-aria/rowheader_colindex_4-manual.html (1/1, 100.00%, 0.40% of total) | OK | OK | OK | OK | OK |
| rowheader colindex 4 | FAIL | FAIL | FAIL | FAIL | PASS |
| FF01: | assert_true: "result atktablecellgetposition() contains column=3" failed
Actual value: (1, row=0, column=0)
https://bugzil.la/1357188: [NEW] atk_table_cell_get_position() should report the values of aria-rowindex and aria-colindex
; expected true got false |
| FF02: | assert_true: "property AXARIAColumnIndex is 4" failed
Actual value: None
; expected true got false |
| GC02: | assert_true: "property AXARIAColumnIndex is 4" failed
Actual value: None
; expected true got false |
| WK01: | assert_true: "result atktablecellgetposition() contains column=3" failed
Actual value: (1, row=0, column=0)
https://webkit.org/b/171176: [NEW] [ATK] atk_table_cell_get_position() should return values of aria-rowindex and aria-colindex, if present
; expected true got false |
|
| /wai-aria/rowheader_rowindex_4-manual.html (1/1, 100.00%, 0.40% of total) | OK | OK | OK | OK | OK |
| rowheader rowindex 4 | FAIL | FAIL | FAIL | FAIL | PASS |
| FF01: | assert_true: "result atktablecellgetposition() contains row=3" failed
Actual value: (1, row=0, column=0)
https://bugzil.la/1357188: [NEW] atk_table_cell_get_position() should report the values of aria-rowindex and aria-colindex
; expected true got false |
| FF02: | assert_true: "property AXARIARowIndex is 4" failed
Actual value: None
; expected true got false |
| GC02: | assert_true: "property AXARIARowIndex is 4" failed
Actual value: None
; expected true got false |
| WK01: | assert_true: "result atktablecellgetposition() contains row=3" failed
Actual value: (1, row=0, column=0)
https://webkit.org/b/171176: [NEW] [ATK] atk_table_cell_get_position() should return values of aria-rowindex and aria-colindex, if present
; expected true got false |
|
| /wai-aria/searchbox_activedescendant-manual.html (1/2, 50.00%, 0.40% of total) | OK | OK | OK | OK | OK |
| searchbox activedescendant 1 | FAIL | FAIL | FAIL | FAIL | FAIL |
| FF01: | assert_true: "property states contains STATE_FOCUSED" failed
Actual value: ['STATE_ENABLED', 'STATE_OPAQUE', 'STATE_SENSITIVE', 'STATE_SHOWING', 'STATE_VISIBLE', 'STATE_SELECTABLE_TEXT']
; "property states contains STATE_FOCUSABLE" failed
Actual value: ['STATE_ENABLED', 'STATE_OPAQUE', 'STATE_SENSITIVE', 'STATE_SHOWING', 'STATE_VISIBLE', 'STATE_SELECTABLE_TEXT']
https://bugzil.la/1359045: [NEW] A container's active descendant should expose ATK_STATE_FOCUSABLE in addition to ATK_STATE_FOCUSED
; "event type is object:state-changed:focused" failed
; expected true got false |
| FF02: | assert_true: "property AXFocused is true" failed
Actual value: false
; "result AXUIElementIsAttributeSettable(AXFocused) is true" failed
Actual value: false
; "event type is AXFocusedUIElementChanged" failed
; expected true got false |
| GC02: | assert_true: "result AXUIElementIsAttributeSettable(AXFocused) is true" failed
Actual value: false
; "event type is AXFocusedUIElementChanged" failed
; expected true got false |
| WK01: | assert_true: "property states contains STATE_FOCUSED" failed
Actual value: None
ERROR: Object not found
; "property states contains STATE_FOCUSABLE" failed
Actual value: None
ERROR: Object not found
; "event type is object:state-changed:focused" failed
; expected true got false |
| WK02: | assert_true: "property AXFocused is true" failed
Actual value: false
; "result AXUIElementIsAttributeSettable(AXFocused) is true" failed
Actual value: false
; "event type is AXFocusedUIElementChanged" failed
; expected true got false |
|
| /wai-aria/searchbox_activedescendant_value_changes-manual.html (2/2, 100.00%, 0.79% of total) | OK | OK | OK | OK | OK |
| searchbox activedescendant value changes | PASS | FAIL | FAIL | FAIL | FAIL |
| FF02: | assert_true: "property AXSubrole is AXSearchField" failed
Actual value: None
; "property AXRoleDescription is search text field" failed
Actual value: text field
; "event type is AXSelectedChildrenChanged" failed
Actual value: false
; "result array isNot true" failed
; expected true got false |
| GC02: | assert_true: "result array isNot true" failed
; expected true got false |
| WK01: | assert_true: "property states doesNotContain STATE_FOCUSED" failed
Actual value: ['STATE_EDITABLE', 'STATE_ENABLED', 'STATE_FOCUSABLE', 'STATE_FOCUSED', 'STATE_HORIZONTAL', 'STATE_SENSITIVE', 'STATE_SHOWING', 'STATE_SINGLE_LINE', 'STATE_VISIBLE']
; expected true got false |
| WK02: | assert_true: "property AXFocused is false" failed
Actual value: true
; "result array isNot true" failed
; expected true got false |
|
| searchbox activedescendant value changes 1 | FAIL | FAIL | FAIL | FAIL | FAIL |
| FF01: | assert_true: "property states contains STATE_FOCUSED" failed
Actual value: ['STATE_ENABLED', 'STATE_OPAQUE', 'STATE_SENSITIVE', 'STATE_SHOWING', 'STATE_VISIBLE', 'STATE_SELECTABLE_TEXT']
; "property states contains STATE_FOCUSABLE" failed
Actual value: ['STATE_ENABLED', 'STATE_OPAQUE', 'STATE_SENSITIVE', 'STATE_SHOWING', 'STATE_VISIBLE', 'STATE_SELECTABLE_TEXT']
https://bugzil.la/1359045: [NEW] A container's active descendant should expose ATK_STATE_FOCUSABLE in addition to ATK_STATE_FOCUSED
; "event type is object:state-changed:focused" failed
; expected true got false |
| FF02: | assert_true: "property AXFocused is true" failed
Actual value: false
; "result AXUIElementIsAttributeSettable(AXFocused) is true" failed
Actual value: false
; "event type is AXFocusedUIElementChanged" failed
; expected true got false |
| GC02: | assert_true: "result AXUIElementIsAttributeSettable(AXFocused) is true" failed
Actual value: false
; "event type is AXFocusedUIElementChanged" failed
; expected true got false |
| WK01: | assert_true: "property states contains STATE_FOCUSED" failed
Actual value: None
ERROR: Object not found
; "property states contains STATE_FOCUSABLE" failed
Actual value: None
ERROR: Object not found
; "event type is object:state-changed:focused" failed
; expected true got false |
| WK02: | assert_true: "property AXFocused is true" failed
Actual value: false
; "result AXUIElementIsAttributeSettable(AXFocused) is true" failed
Actual value: false
; "event type is AXFocusedUIElementChanged" failed
; expected true got false |
|
| /wai-aria/table_colcount_-1-manual.html (1/1, 100.00%, 0.40% of total) | OK | OK | OK | OK | OK |
| table colcount -1 | FAIL | FAIL | FAIL | FAIL | PASS |
| FF01: | assert_true: "result atktablegetncolumns() is -1" failed
Actual value: 1
https://bugzil.la/1356997: [NEW] atk_table_get_n_{columns,rows} should report the values of aria-{col,row}count
; expected true got false |
| FF02: | assert_true: "property AXARIAColumnCount is -1" failed
Actual value: None
; expected true got false |
| GC02: | assert_true: "property AXARIAColumnCount is -1" failed
Actual value: None
; expected true got false |
| WK01: | assert_true: "result atktablegetncolumns() is -1" failed
Actual value: 1
https://webkit.org/b/171172: [NEW] [ATK] atk_table_get_n_rows() and atk_table_get_n_columns() should return values of aria-rowcount and aria-colcount, if present
; expected true got false |
|
| /wai-aria/table_colcount_8-manual.html (1/1, 100.00%, 0.40% of total) | OK | OK | OK | OK | OK |
| table colcount 8 | FAIL | FAIL | FAIL | FAIL | PASS |
| FF01: | assert_true: "result atktablegetncolumns() is 8" failed
Actual value: 1
https://bugzil.la/1356997: [NEW] atk_table_get_n_{columns,rows} should report the values of aria-{col,row}count
; expected true got false |
| FF02: | assert_true: "property AXARIAColumnCount is 8" failed
Actual value: None
; expected true got false |
| GC02: | assert_true: "property AXARIAColumnCount is 8" failed
Actual value: None
; expected true got false |
| WK01: | assert_true: "result atktablegetncolumns() is 8" failed
Actual value: 1
https://webkit.org/b/171172: [NEW] [ATK] atk_table_get_n_rows() and atk_table_get_n_columns() should return values of aria-rowcount and aria-colcount, if present
; expected true got false |
|
| /wai-aria/table_rowcount_-1-manual.html (1/1, 100.00%, 0.40% of total) | OK | OK | OK | OK | OK |
| table rowcount -1 | FAIL | FAIL | FAIL | FAIL | PASS |
| FF01: | assert_true: "result atktablegetnrows() is -1" failed
Actual value: 1
https://bugzil.la/1356997: [NEW] atk_table_get_n_{columns,rows} should report the values of aria-{col,row}count
; expected true got false |
| FF02: | assert_true: "property AXARIARowCount contains -1" failed
Actual value: None
; expected true got false |
| GC02: | assert_true: "property AXARIARowCount contains -1" failed
Actual value: None
; expected true got false |
| WK01: | assert_true: "result atktablegetnrows() is -1" failed
Actual value: 1
https://webkit.org/b/171172: [NEW] [ATK] atk_table_get_n_rows() and atk_table_get_n_columns() should return values of aria-rowcount and aria-colcount, if present
; expected true got false |
|
| /wai-aria/table_rowcount_3-manual.html (1/1, 100.00%, 0.40% of total) | OK | OK | OK | OK | OK |
| table rowcount 3 | FAIL | FAIL | FAIL | FAIL | PASS |
| FF01: | assert_true: "result atktablegetnrows() is 3" failed
Actual value: 1
https://bugzil.la/1356997: [NEW] atk_table_get_n_{columns,rows} should report the values of aria-{col,row}count
; expected true got false |
| FF02: | assert_true: "property AXARIARowCount is 3" failed
Actual value: None
; expected true got false |
| GC02: | assert_true: "property AXARIARowCount is 3" failed
Actual value: None
; expected true got false |
| WK01: | assert_true: "result atktablegetnrows() is 3" failed
Actual value: 1
https://webkit.org/b/171172: [NEW] [ATK] atk_table_get_n_rows() and atk_table_get_n_columns() should return values of aria-rowcount and aria-colcount, if present
; expected true got false |
|
| /wai-aria/treeitem_selected_value_changes-manual.html (3/3, 100.00%, 1.19% of total) | OK | OK | OK | OK | OK |
| treeitem selected value changes | PASS | FAIL | FAIL | FAIL | FAIL |
| FF02: | assert_true: "event type is AXSelectedChildrenChanged" failed
; expected true got false |
| GC02: | assert_true: "event type is AXSelectedChildrenChanged" failed
; expected true got false |
| WK01: | assert_true: "event type is object:state-changed:selected" failed https://webkit.org/b/171185
; expected true got false |
| WK02: | assert_true: "event type is AXSelectedChildrenChanged" failed
; expected true got false |
|
| treeitem selected value changes 1 | PASS | FAIL | FAIL | FAIL | FAIL |
| FF02: | assert_true: ERROR: No results reported from ATTA; expected true got false |
| GC02: | assert_true: ERROR: No results reported from ATTA; expected true got false |
| WK01: | assert_true: "event type is object:selection-changed" failed https://webkit.org/b/171185
; expected true got false |
| WK02: | assert_true: ERROR: No results reported from ATTA; expected true got false |
|
| treeitem selected value changes 2 | PASS | - | - | FAIL | - |
|


|
Popularity:
Describes how popular the package is relative to other packages.
[more]
|
100
|
|
Health:
Code health derived from static analysis.
[more]
|
100
|
|
Maintenance:
Reflects how tidy and up-to-date the package is.
[more]
|
70
|
|
Overall:
Weighted score of the above.
[more]
|
94
|
We analyzed this package on Nov 16, 2018, and provided a score, details, and suggestions below. Analysis was completed with status completed using:
Detected platforms: Flutter, web, other
No platform restriction found in primary library
package:http/http.dart
.
The description is too short. (-20 points)
Add more detail about the package, what it does and what is its target use case. Try to write at least 60 characters.
Maintain an example. (-10 points)
Create a short demo in the
example/
directory to show how to use this package. Common file name patterns include:
main.dart
,
example.dart
or you could also use
http.dart
.
| Package | Constraint | Resolved | Available |
|---|---|---|---|
| Direct dependencies | |||
| Dart SDK | >=1.23.0-dev.0.0 <2.0.0 | ||
| async | >=1.10.0 <3.0.0 | 2.0.8 | |
| http_parser | >=0.0.1 <4.0.0 | 3.1.3 | |
| path | >=0.9.0 <2.0.0 | 1.6.2 | |
| Transitive dependencies | |||
| charcode | 1.1.2 | ||
| collection | 1.14.11 | ||
| meta | 1.1.6 | ||
| source_span | 1.4.1 | ||
| string_scanner | 1.0.4 | ||
| typed_data | 1.1.6 | ||
| Dev dependencies | |||
| test | ^1.3.0 |


The module manager, Zend\ModuleManager\ModuleManager, is a very simple class which is responsible for iterating over an array of module names and triggering a sequence of events for each. Instantiation of module classes, initialization tasks, and configuration are all performed by attached event listeners.
Events triggered by Zend\ModuleManager\ModuleManager
Triggered for each module that is to be loaded. The listener(s) to this event are responsible for taking a module name and resolving it to an instance of some class. The default module resolver shipped with ZF2 simply looks for the class {modulename}\Module, instantiating and returning it if it exists.
The name of the module may be retrieved by listeners using the getModuleName() method of the Event object; a listener should then take that name and resolve it to an object instance representing the given module. Multiple listeners can be attached to this event, and the module manager will trigger them in order of their priority until one returns an object. This allows you to attach additional listeners which have alternative methods of resolving modules from a given module name.
By default, Zend Framework provides several useful module manager listeners.
Provided Module Manager Listeners
If a module class either implements Zend\ModuleManager\Feature\InitProviderInterface, or simply defines an init() method, this listener will call init() and pass the current instance of Zend\ModuleManager\ModuleManager as the sole parameter.
Like the OnBootstrapListener, the init() method is called for every module implementing this feature, on every page request and should only be used for performing lightweight tasks such as registering event listeners.
If a module class implements Zend\ModuleManager\Feature\BootstrapListenerInterface, or simply defines an onBootstrap() method, this listener will register the onBootstrap() method with the Zend\Mvc\Application bootstrap event. This method will then be triggered during the bootstrap event (and passed an MvcEvent instance).
Like the InitTrigger, the onBootstrap() method is called for every module implementing this feature, on every page request, and should only be used for performing lightweight tasks such as registering event listeners.
If a module class implements Zend\ModuleManager\Feature\ServiceProviderInterface, or simply defines an getServiceConfig() method, this listener will call that method and aggregate the return values for use in configuring the ServiceManager.
The getServiceConfig() method may return either an array of configuration compatible with Zend\ServiceManager\Config, an instance of that class, or the string name of a class that extends it. Values are merged and aggregated on completion, and then merged with any configuration from the ConfigListener falling under the service_manager key. For more information, see the ServiceManager documentation.
Unlike the other listeners, this listener is not managed by the DefaultListenerAggregate; instead, it is created and instantiated within the Zend\Mvc\Service\ModuleManagerFactory, where it is injected with the current ServiceManager instance before being registered with the ModuleManager events.
Additionally, this listener manages a variety of plugin managers, including view helpers, controllers, and controller plugins. In each case, you may either specify configuration to define plugins, or provide configuration via a Module class. Configuration follows the same format as for the ServiceManager. The following table outlines the plugin managers that may be configured this way (including the ServiceManager), the configuration key to use, the ModuleManager feature interface to optionally implement (all interfaces specified live in the Zend\ModuleManager\Feature namespace) , and the module method to optionally define to provide configuration.
| Plugin Manager | Config Key | Interface | Module Method |
|---|---|---|---|
| Zend\Mvc\Controller\ControllerManager | controllers | ControllerProviderInterface | getControllerConfig |
| Zend\Mvc\Controller\PluginManager | controller_plugins | ControllerPluginProviderInterface | getControllerPluginConfig |
| Zend\Filter\FilterPluginManager | filters | FilterProviderInterface | getFilterConfig |
| Zend\Form\FormElementManager | form_elements | FormElementProviderInterface | getFormElementConfig |
| Zend\Stdlib\Hydrator\HydratorPluginManager | hydrators | HydratorProviderInterface | getHydratorConfig |
| Zend\InputFilter\InputFilterPluginManager | input_filters | InputFilterProviderInterface | getInputFilterConfig |
| Zend\Mvc\Router\RoutePluginManager | route_manager | RouteProviderInterface | getRouteConfig |
| Zend\Serializer\AdapterPluginManager | serializers | SerializerProviderInterface | getSerializerConfig |
| Zend\ServiceManager\ServiceManager | service_manager | ServiceProviderInterface | getServiceConfig |
| Zend\Validator\ValidatorPluginManager | validators | ValidatorProviderInterface | getValidatorConfig |
| Zend\View\HelperPluginManager | view_helpers | ViewHelperProviderInterface | getViewHelperConfig |
Configuration follows the examples in the ServiceManager configuration section. As a brief recap, the following configuration keys and values are allowed:
| Config Key | Allowed values |
|---|---|
| services | service name/instance pairs (these should likely be defined only in Module classes) |
| invokables | service name/class name pairs of classes that may be invoked without constructor arguments |
| factories | service names pointing to factories. Factories may be any PHP callable, or a string class name of a class implementing Zend\ServiceManager\FactoryInterface, or of a class implementing the __invoke method (if a callable is used, it should be defined only in Module classes) |
| abstract_factories | array of either concrete instances of Zend\ServiceManager\AbstractFactoryInterface, or string class names of classes implementing that interface (if an instance is used, it should be defined only in Module classes) |
| initializers | array of PHP callables or string class names of classes implementing Zend\ServiceManager\InitializerInterface (if a callable is used, it should be defined only in Module classes) |
When working with plugin managers, you will be passed the plugin manager instance to factories, abstract factories, and initializers. If you need access to the application services, you can use the getServiceLocator() method, as in the following example:
1 2 3 4 5 6 7 8 9 10 11 | public function getViewHelperConfig()
{
return array('factories' => array(
'foo' => function ($helpers) {
$services = $helpers->getServiceLocator();
$someService = $services->get('SomeService');
$helper = new Helper\Foo($someService);
return $helper;
},
));
}
|
This is a powerful technique, as it allows your various plugins to remain agnostic with regards to where and how dependencies are injected, and thus allows you to use Inversion of Control principals even with plugins.
The source code of this file is hosted on GitHub. Everyone can update and fix errors in this document with few clicks - no downloads needed.


Govt to open 1,000 new Janaushadhi Kendras in 2020
by PTIThe government is planning to open 1,000 new 'Janaushadhi Kendras' across the country and is looking to cover all the districts by the end of 2019-20, Parliament was informed on Tuesday.
As on November 11 this year, 5,754 Janaushadhi Kendras are functional across the country.
"The plan is to open 1,000 new Janaushadhi Kendras in FY 2019-20. It is also planned to cover all the districts of the country by the end of FY 2019-20," Minister of Chemicals and Fertilizers D V Sadananda Gowda said in a reply to the Lok Sabha.
Pradhan Mantri Bharatiya Janaushadhi Pariyojana (PMBJP) has covered 689 out of 725 districts of the country, he added.
"As on November 11, 2019, the product basket of PMBJP comprises 900 medicines and 154 surgical and consumables. The plan is to expand this basket to 1,200 medicines and 200 surgical/consumables by the end of 2019-20," Gowda said.


Instagram appears to be down for many users around the world. The issue appears to be unevenly distributed, with it working for some users, and not for others. The week of downtime continues with one more high-profile outage, with Instagram users turning to Twitter and other social platforms to complain about outages. The hashtag #Instagramdown is now trending on Twitter, and multiple Android users told us that their app has been crashing, although others have confirmed that it's still working fine. The official Instagram handle on Twitter has not posted anything about the outage so far, but the trending hashtag makes it clear that this is a widespread issue. According to the website status trackers at DownDetector, Instagram's issues started to pick up steam at around 5PM on Friday, and seem to have peaked at around 8PM. Instagram and other Facebook products like WhatsApp and Messenger, along with Facebook, were all down just a little earlier this month as well. In that outage, the downtime was largely reported in most parts of Europe, though it grew and impacted other regions as well. The image sharing social network is joining a number of popular platforms that have faced outages this week. We saw a major Google outage at the start of the week, and Netflix was also offline on Thursday. Instant messaging platform Telegram faced an outage on Thursday, and Facebook-owned Instagram has joined this growing list on Friday.


{% load static %}
Rating: {{movie.rating.averageRating}}
Genres: {{movie.genres}}
No movies are available.


--- layout: resource title: Ireland ---
Technology has a language. It’s called code. At Apple we believe coding is an essential skill. Learning to code teaches you how to solve problems and work together in creative ways.  We think everyone should have the opportunity to create something that can change the world. So Apple has designed a programme that lets anyone learn, write and teach code.
Swift Playgrounds is a revolutionary app for iPad that makes learning Swift interactive and fun.
Know any other resources? Send us an email or add links to this page with a Pull request on GitHub!


Tab
The tab module aims to combine multiple components and design paradigms, like collapses, accordions, carousels and tabs, into one general-purpose component. Tabs are very simple in structure, responsive on mobile and they allow for layout customization so that you can turn them into accordions or collapses whenever you want.
All examples showcased refer to the mini-default flavor, some class names and styles might differ based on the flavor you're using.
Quick overview
Spoilers, collapses, accordions, tabs, carousels have been a staple of modern design for quite a long time. All of these elements are implemented using the tab module's single generic container. The tab container replaces all of these design paradigms with one component that is very flexible and responsive in order to let you present your website or app's content any way you like. Tabbed navigation is very easy to implement, while collapse, accordion and carousel components use the stacked architecture of tabs. As usual, the tab container is responsive and accessible, allowing you to deliver your content properly to all devices and users.
Quick start
To use the tab module, simply include the link to the flavor you are using and start writing your HTML page as usual. One suggestion we will make is to add the following line inside your HTML page's
to utilize the viewport meta tag:
<meta name="viewport" content="width=device-width, initial-scale=1">
Basic syntax
Tab 1
This is the first tab's content.
Tab 2
This is the second tab's content.
Tab 3
This is the third tab's content.
Tab 4
This is the fourth tab's content.
The tab container's basic syntax is composed of two components, presented below in the order they should be added to the DOM tree:
- At the outermost level of the tab container is a

element implementing the.tabs
class. This serves as the wrapper of the tab container. - Inside the
.tabs
container, add a set of the following three elements for each tab:- First, add an
<input type="radio">
element. Give it aname
and anid
in order to be able to link to it and group it with the rest of the radio buttons in the container. - Follow the
<input>
element with a
element linking to it. Inside this element, add the text you want to be shown as the title of your tab. - Finally, add a

immediately after the
's closing tag. This will be the panel that contains the tab's content. Inside this element, you can add all the content you want in your tab (headings, images, text).
- First, add an
Tabs are responsive and will collapse into a stacked display on smaller screens, allowing the user to view the actual content more easily. The tab container's syntax is accessible, but parts of it might confuse screen readers, so we suggest adding the aria-hidden="true"
attribute to all the <input>
and
elements inside the .tabs
container.
Sample code

 <input type="radio" name="tab-group" id="tab1" checked aria-hidden="true"> Tab 1

Tab 1

This is the first tab's content.

 <input type="radio" name="tab-group" id="tab2" aria-hidden="true"> Tab 2

Tab 2

This is the second tab's content.

 <input type="radio" name="tab-group" id="tab3" aria-hidden="true"> Tab 3

Tab 3

This is the third tab's content.

Notes
- Tabs are compatible with modern browsers, but might not display properly in older browsers.
- Remember to add the
checked
attribute to one of your<input>
s if you want that tab to be the one displayed by default. If none is specified, the first one will be displayed. - The
height
of the tab container's panel area is400px
. If you want to change this default size, please check out the customization page. - Using the method described above for making tabs accessible, screen readers will ignore tab controls and only read the content of tabs.

 <input type="checkbox" name="tab-group" id="tab1" checked aria-hidden="true"> Tab 1

Bad Tab

Don't: Do not use checkboxes inside the default .tabs
container, otherwise you might notice unexpected behavior. If you want to use an <input type="checkbox">
, check out the next section.

 <input type="radio" name="tab-group" id="tab1" checked aria-hidden="true"> Tab 1

Lonely Tab

Don't: You can add a single tab in a .tabs
container, but what use would that be? You should probably read the next section to see what you can do with a stacked tab container instead.

 <input type="radio" name="tab-group" id="tab1" checked aria-hidden="true"> Tab 1 <input type="radio" name="tab-group" id="tab2" aria-hidden="true"> Tab 2

Bad Tab

Bad Tab

Don't: The syntax and structure of the tab container is very strict. Try to follow it exactly as described in this section.

 <input type="radio" name="tab-group" id="tab1" checked> Tab

Not fully accessible tab

Don't: Remember to use the aria-hidden="true"
attribute to make your tabs fully accessible.
Stacked tabs
Section 1
This is the first accordion section's content.
Section 2
This is the second accordion section's content.
This is the first collapse section's content.
This is the second collapse section's content.
Apart from the normal tab layout, you can make your tabs stacked instead, using the .stacked
class in your .tabs
container element. Stacked tabs are more versatile, allowing you to use checkboxes and/or radio buttons to implement collapses, accordions and spoilers. Carousel-styled elements can also be displayed in this fashion, if you wish. Remember to use the aria-hidden="true"
attribute to make your tabs fully accessible, as before.
Sample code

 <input type="radio" name="accordion" id="a1" checked aria-hidden="true"> Accordion section 1

Section 1

This is the first accordion section's content.

 <input type="radio" name="accordion" id="a2"aria-hidden="true"> Accordion section 2

Section 2

This is the second accordion section's content.

 <input type="checkbox" id="c1" aria-hidden="true"> Collapse section 1

This is the first collapse section's content.

 <input type="checkbox" id="c2" aria-hidden="true"> Collapse section 2

This is the second collapse section's content.

Notes
.stacked
tabs can be used with either checkboxes or radio buttons.- You can mix and match checkboxes and radio buttons, but we suggest you do not do so, unless you think it is necessary for your design.

 <input type="checkbox" id="c1" aria-hidden="true"> Single collapse

This is a singular collapse.

Do: You can implement single collapses (otherwise known as spoilers), using a .tabs
.stacked
container with only one checkbox-based tab.

 <input type="radio" name="accordion" id="a1" checked aria-hidden="true"> Single accordion section

This accordion section cannot close once opened

Don't: Avoid having a single radio-based tab in a .tabs
.stacked
container, as this might result in unexpected behavior.
If you want to learn more about mini.css's modules, go back to the modules page and choose another module to see its documentation.


Carefully track your acquires and releases when using a semaphore or other reference counting mechnisms to ensure the counting stays balanced.
If a semaphore becomes unbalanced it could either block system execution (too many acquires) or it could allow too many threads to access a resource (too many releases). Other reference counting mechanisms could cause other unexpected results such as memory leaks or release of interfaces before your code is done using them.
When using a semaphore or any other reference counting mechanism.
Trace your execution paths to make sure that each aquire is matched with a release. It is easiest to do this if the match is always made in the same function so that you don't have to trace between multiple functions or components. In the case of a semaphore it is best practice to use the resource for as little time as possible so matching a release closely to an acquire is a good idea.
Be especially careful with error paths. When using exceptions place the release call in a finally block to ensure it is called in the course of normal execution or in the case of an exception. When using normal error handling logic, ensure that each return path out of a function releases the correct number of references.
In the following example, the semaphore is acquired before the read call and is released after the parseBuffer
call. However, it is not released in the case of an error with the read.
bool ReadFromSocket(SOCKET socket, char *recvBuffer, int len)
{
//first read from the socket
gSemaphore.Aquire();
int ret = read(socket, recvBuffer, len, 0);
if (ret >= 0)
{
//now parse the buffer
parseBuffer(recvBuffer, len);
gSemaphore.Release();
return true;
}
else
{
//can call WSAGetLastError if we need error details
return false;
}
}
In the following example, the semaphore is acquired before the read call and is released after the parseBuffer
call and also in the error handler.
bool ReadFromSocket(SOCKET socket, char *recvBuffer, int len)
{
//first read from the socket
gSemaphore.Aquire();
int ret = read(socket, recvBuffer, len, 0);
if (ret >= 0)
{
//now parse the buffer
parseBuffer(recvBuffer, len);
gSemaphore.Release();
return true;
}
else
{
gSemaphore.Release();
return false;
}
}


RUCKY LOCALIZATION
CONTRIBUTE
| Progress | Code | Language | Contributors |
| 100% | ar | Arabic | Mayank Metha D via AI |
| 32% | br | Breton | ebrezhoneg |
| 97% | bg | Bulgarian | Mayank Metha D via AI |
| 100% | zh | Chinese Simplified | Mayank Metha D via AI, Oslo Oslo |
| 100% | zh-rTW | Chinese Traditional | Mayank Metha D via AI |
| 100% | cs | Czech | xrup, Lukas Novotny |
| 100% | da | Danish | Mayank Metha D via AI |
| 100% | nl | Dutch | Mayank Metha D via AI |
| 100% | en | English (GB) | Mayank Metha D, Andrew Dolan |
| 100% | en-rUS | English (US) | Mayank Metha D, Andrew Dolan |
| 100% | fi | Finnish | Mayank Metha D via AI |
| 100% | fr | French | Mayank Metha D via AI, xrup |
| 100% | de | German | Mayank Metha D via AI, Niels Hessenmüller(UsPdSr), Ferdinand von Wedekind, WuerfelDev, Michael Haider, acrylicpaintboy |
| 100% | hi | Hindi | Mayank Metha D |
| 100% | hu | Hungarian | Mayank Metha D via AI |
| 0% | is | Icelandic | xrup |
| 100% | it | Italian | Mayank Metha D via AI |
| 100% | ja | Japanese | ook rio |
| 100% | ko | Korean | Mayank Metha D via AI |
| 2% | no | Norwegian | Oslo Oslo |
| 100% | pl | Polish | Mayank Metha D via AI |
| 100% | pt | Portuguese | Mayank Metha D via AI, igorruckert |
| 100% | ru | Russian | Mayank Metha D via AI |
| 100% | sk | Slovak | xrup, Vladimír Kubala |
| 100% | es | Spanish | Mayank Metha D via AI |
| 100% | sv | Swedish | Mayank Metha D via AI |
| 100% | tr | Turkish | Mayank Metha D via AI |
| 100% | uk | Ukrainian | Mayank Metha D via AI |


- Privacy Your privacy is very important to us. We designed our Data Policy to make important disclosures about how you can use TransAssist to share with others and how we collect and can use your content and information.
- Safety We do our best to keep TransAssist safe, but we cannot guarantee it. We need your help to keep TransAssist safe, which includes the following commitments by you:
- You will not post unauthorized commercial communications (such as spam) on TransAssist.
- You will not collect users' content or information, or otherwise access TransAssist, using automated means (such as harvesting bots, robots, spiders, or scrapers) without our prior permission.
- You will not upload viruses or other malicious code.
- You will not solicit login information or access an account belonging to someone else.
- You will not bully, intimidate, or harass any user.
- You will not post content that: is hate speech, threatening, or pornographic; incites violence; or contains nudity or graphic or gratuitous violence.
- You will not develop or operate a third-party application containing alcohol-related, dating or other mature content (including advertisements) without appropriate age-based restrictions.
- You will not use TransAssist to do anything unlawful, misleading, malicious, or discriminatory.
- You will not do anything that could disable, overburden, or impair the proper working or appearance of TransAssist, such as a denial of service attack or interference with page rendering or other TransAssist functionality.
- You will not facilitate or encourage any violations of this Statement or our policies.
- Registration and Account Security TransAssist users provide their real names and information, and we need your help to keep it that way. Here are some commitments you make to us relating to registering and maintaining the security of your account:
- You will not provide any false personal information on TransAssist, or create an account for anyone other than yourself without permission.
- You will not create more than one personal account.
- If we disable your account, you will not create another one without our permission.

- You will keep your contact information accurate and up-to-date.
- You will not share your password, let anyone else access your account, or do anything else that might jeopardize the security of your account.
- You will not transfer your account to anyone without first getting our written permission.
- If you select a username or similar identifier for your account or Page, we reserve the right to remove or reclaim it if we believe it is appropriate (such as when a trademark owner complains about a username that does not closely relate to a user's actual name).
- Protecting Other People's Rights We respect other people's rights, and expect you to do the same.
- You will not post content or take any action on TransAssist that infringes or violates someone else's rights or otherwise violates the law.
- We can remove any content or information you post on TransAssist if we believe that it violates this Statement or our policies.
- If we remove your content for infringing someone else's copyright, and you believe we removed it by mistake, we will provide you with an opportunity to appeal.
- If you repeatedly infringe other people's intellectual property rights, we will disable your account when appropriate.
- If you collect information from users, you will: obtain their consent, make it clear you (and not TransAssist) are the one collecting their information, and post a privacy policy explaining what information you collect and how you will use it.
- You will not post anyone's identification documents or sensitive financial information on Facebook.
- Amendments
- We’ll notify you before we make changes to these terms and give you the opportunity to review and comment on the revised terms before continuing to use our Services.
- If we make changes to policies, guidelines or other terms referenced in or incorporated by this Statement, we may provide notice on the Site Governance Page.
- Your continued use of the TransAssist Services, following notice of the changes to our terms, policies or guidelines, constitutes your acceptance of our amended terms, policies or guidelines


Any animation with an "id" shows up in the drop-down menu (lower left).
A TimelineLite animates the green and orange boxes
A separate TweenLite tween animates the grey box


{% extends 'core/base.html' %} {% block title %}Exam Detail{% endblock %} {% block body %} {% if not has_answered and not is_exam_active %}
| Question | Your Answer | Correct Answer | Result |
| {{eq.question_text}} | {{eq.student_answer.text}} | {{eq.correct_answer.text}} | {% if eq.is_answer_true%} {%else%} {%endif%} |
your score: {{score}}
{% elif has_answered and is_exam_active %}


Drink to the Weather
Jonathan Honda, Rachael Kelm-Southworth and Nathan Vu would like to remind you to please drink responsibly.
Then Drink Up!!
Ingredients
Instructions
Other Recommendations


so does node2 run both these commands and another 2 with ind:2
./komodo-cli -ac_name=MUSIG cclib nonce 18 '["pkhash",0,"nonce produced by n0 using commit from n2"]'
and
./komodo-cli -ac_name=MUSIG cclib nonce 18 '["pkhash",0,"nonce produced by n0 using commit from n3"]'
notice both the above commands have ind: 0


Arrays and Hashes
Today we will discuess the differences between arrays and hashes and provide some examples of how to use each
By definition an array is an ordered, integer-indexed collection of objects; and a hash is a dictionary-like collection of uniqure keys and their values.
Now what does that mean?
Enumerable Method ".cycle"
An enumerable method can only be called when iterating over all the values stored in a variable by using ".each" or its equivalent.
The ".cycle" method when called, will use the number you pass through it as the number of times to iterate over all the values.
Now lets see an example.
Ruby Classes
Now it is finally time to talk about creating new classes in Ruby!
Classes are great and ruby has plenty of built in classes already that make the language very robust.
Javascript
My first exposure to javascript.
RegEx
Regular expressions are a very powerful tool that can be used across languages to help search out patterns in your code.
Although the subject can only be mastered with practice, here is a short summary...


Reports objects which are a subtype of
java.util.Set or java.util.Map
and which may contain java.net.URL objects. Adding java.net.URL
objects to such collections can cause performance problems because of calls to the
equals() and hashCode()
methods of java.net.URL.
java.net.URL's equals() and hashCode() method use a DNS
lookup, which depending on the availability of the network and the speed of the DNS server
can cause significant delays.
Powered by InspectionGadgets


{% extends "base.html" %} {% block title %}首頁{% endblock %} {% block headCSS %} {% endblock %} {% block contents %} 快速又方便 當你還沒開始時他已經結束了 行銷人員利器 空口說白話 不如使用數據唬爛工具 報表提供 這是是為了湊湊文字報表還是請行銷人員自己拉吧 教您如何使用大數據 但我們目前還在研究中 View 想像鄧肯豬屎一樣厲害嗎 那別寫程式了 快去團購手繪版 View Business theme There are many variations of passages of Lorem Ipsum available, but the majority View Business theme There are many variations of passages of Lorem Ipsum available, but the majority View Business theme There are many variations of passages of Lorem Ipsum available, but the majority View Business theme There are many variations of passages of Lorem Ipsum available, but the majority View Business theme There are many variations of passages of Lorem Ipsum available, but the majority View Business theme There are many variations of passages of Lorem Ipsum available, but the majority View {% endblock %} {% block headJS %} {% endblock %}
但我們目前還在研究中
那別寫程式了 快去團購手繪版
There are many variations of passages of Lorem Ipsum available, but the majority


Shopping Cart
Brother Hoddies in Grey
$38.50 $40.00Basic Jogging Shorts
$14.50 $18.00Enjoy The Rest T-Shirt
$20.00 $21.00
Subtotal
220$
Quisque gravida turpis sit amet nulla posuere lacinia. Cras sed est sit amet ipsum luctus.
| Product | Total |
|---|---|
| Some Winter Collections × 2 | £145.00 |
| Small Scale Style × 4 | £204.00 |
| Cart Subtotal | £349.00 |
| Order Total | £349.00 |


L I C E N S E
Because nobody have time to read all that public licenses etc... this are the rules you have to obey when you use this class.
You can do anything with this class, you can sell it, change it, even put your name insted of mine if you feel it is the right way.
There is only one condition. If you find this class usefull, please sent an email (empty or with comment) to my email<EMAIL_ADDRESS>with subject [ConvertCharset].
To<EMAIL_ADDRESS>Subject: [ConvertCharset] I really like your... blah blah blah ;-)
| Copyright | Copyright Mikolaj Jedrzejak (c) 2003-2007 |
|---|
License has no classes.
License has no functions.


On April 15, 2013, their lives intersected at the Marathon. One year later, they returned to the scene for a historic photo shoot.
Explore: Who’s in the photo
Video: How the photo was made
5 Runners, a Globe documentary
Photos: Behind the scenes
Photo by Dina Rudick / Globe Staff


I did but the first value deletes..new value is added also
1 2 3 4 5 6 7 8 9 10
in Main()
strcpy(item.bar, "5505505");//adds
val.addNode(item);
strcpy(item.bar, "1010101");//adds
val.addNode(item);
//cout<<val.findNode("1010101")<<endl;//outputs 1
val.updateItem("1010101");//I add 99999
cout<<val.findNode("5505505")<<endl;//this value is deleted
cout<<val.findNode("99999")<<endl;//this value is found
The logic was messing up because I was replacing the key node value to separate right node from left...Actually I am not supposed to update key node value but other values which do not separate left and right subtrees based on lesser and greater equality
Struct node{
keyvalue; //this is needed to position nodes in the respective tree..
//other values;//these values could be changed but not keyvalue


{% load i18n %} {% if payment_info and order.status == "p" %}
{% blocktrans trimmed %} This order has been paid via Cash Payment. {% endblocktrans %}
{% blocktrans trimmed %} This order has been marked as paid via Cash Payment manually. {% endblocktrans %}
{% else %}{% blocktrans trimmed %} This order has been planned to be paid via Cash Payment, but no payment has been received yet. {% endblocktrans %}
{% endif %}


--- title: Random Ore kochtitle: Random Minecraft Ore Generator goto: /index.html includes: seededrandom, randomore/ore_name, randomore/randomore --- Randomize Seed Seed: Copy Link Ore Language: English (Simple) English (Complex) Chinese (Pinyin) Sino-Japanese (Romaji) Vietnamese Random


| |
GAMMA libraries & progams produced by this Makefile will depend upon Cygwin. That is,
they will not be viable unless the Cygwin DLL (cygwin1.dll) is on the system.
Effectively, one must have Cygwin installed in order to use any GAMMA library or
program built herein. Cygwin provides a Unix-like environment to Windows based PCs,
including bash shells, make, and GCC.
This directory contains a hand-built Makefile for the build of Windows based
GAMMA libraries (static, DLL, PyGAMMA DLL) using the Cygwin
development environment. You MUST have the Cygwin development
environment on your computer system (PC) before these files will be of any direct
use to you. Furthermore, to build and use PyGAMMA
you must have both Python
and Boost.Python on the system. The Python must be Cygwin
supplied (not the Windows flavor) and Boost.Python should have been built with Cygwin.
More information of Setting Up Python
and Setting Up Boost.Python for Cygwin
is available in local GAMMA documentation if needed.
Why does this Makefile exist? There may be times where the main GAMMA Makefile fails,
either because it has a bug, it is not up to date with the latest GNU software, or
it is not supported on a particular OS/compiler combination. This makefile is a vastly
simplified version of the main GAMMA makefile. If it does not work, at least it can
be used as a guide to build a working Makefile. At the time this page was written,
the current version of CygWin contains both GCC 3.2-1 (default) as well as
GCC 2.95.3-10 (gcc2). Builds of GAMMA using this Cygwin primal Makefile were successfully
accomplished using either of the two.
Quick Build Instructions
(Assumes GAMMA Sources & Cygwin Installed)
|
| 1.) Open a bash shell: Provided with Cygwin |
| 2.) Change into this directory: cd GAMMAVER/primal/CygWin |
| 3.) Run make to clean previous files: make clean |
| 4.) Run make to build static lib. & DLLs: make |
| 5.) Run make install to use this build as your GAMMA |
| Optional Final Cleanup, Demos, & Testing | |
| 6.) Run make to clean: make clean |
| 7.) Run make to build demo program make demo |
| 8.) Run make to build test program make test |
| 9.) Run make to clean: make clean |
|
|
|
About The Build
|
The main target make will attempt to build GAMMA as both a static library and a DLL.
It will also try to build a PyGAMMA DLL used for running GAMMA interactively under Python.
These libraries will automatically placed into a Cygwin binaries directory within the GAMMA
directory hierarchy, ../../i686-pc-cygwin. As the GAMMA code files (*.cc) are
compiled into object files (*.o or *.po) they will also be placed into this same binaries
directory. The Cygwin binaries directory is the same one which the main GAMMA Makefile
would use if properly configured, run, and working. The object files may be safely removed
after the build using make clean, as they may take up valuable disk space.
|
| Sources |
|
CygWin Dir. |
|
CygWin Dir. |
| (GV/src) |
|
(GV/i686-pc-cygwin) |
|
(GV/i686-pc-cygwin) |
Basics/*.cc
Basics/*.h
Matrix/*.cc
Matrix/*.h
.......
|
make
====>
|
*.o
*.po
*.a
*.dll
|
make
=====>
clean
|
libgamma.a
gamma.dll
libgamma.dll.a
pygamma.dll
|
In the above diagram GV is used to inicate the base GAMMA version
directory. For example this is C:/gamma/gamma-4.1.0 on my current system.
Use of make clean can significantly reduce disk space usage, yet
leaves the GAMMA libraries intact.
|
|
About The Demos and Tests
|
|
The targets make demo and make test will build and run GAMMA module demo and
test programs. They will compile the C++ programs found in ../../demo/modules and
../../test respectively, preferentially linking to the GAMMA DLL build in the main
target (make all). The builds will produce object files and executable programs in this directory,
DemoGAMMA.exe and TestGAMMA.exe, then run them so the user can see their results. Alternative
targets make demostatic and make teststatic will do the same but will insure linking
is done to the GAMMA static library. These will have the names DemoGAMMA.static.exe and
TestGAMMA.static.exe. You should notice an increased executable file size in
DemoGAMMA.static.exe and TestGAMMA.static.exe (or any GAMMA program) using static library linking
when compared to the same executable that links to the DLL. Note that when dynamic linking is done
the system must be told where to find the GAMMA DLL when the executables are run outside of the makefile.
That can be accomplished by moving the DLL into a known PATH directory. Finally note that all executables
are NOT stripped. If you wish to shrink the executable file sizes then might run strip on them.
For example, strip DemoGAMMA.exe and strip DemoGAMMA.static.exe will make a
significant reduction in the sizes of these two files.
Note that if the CygWin generated GAMMA DLL is present in ../../i686-pc-cygwin
it will be used preferentially over the static library when running the tests and demos.
If you wish to insure that the static library is used rather than the DLL when running
them, use the targets make demostatic and make teststatic
rather their counterparts.
Lastly, although the executables produced by linking to the GAMMA DLL or GAMMA static library
are relocatable, they do rely on the associated GAMMA library as well as the CygWin DLL.
Hopefully you have the CygWin DLL on your system or you should not be using this Makefile.
As for the GAMMA libraries, during program compilation using the GAMMA script it is
specified that these reside in ../../i686-pc-cygwin so the executable inherently
knows to look in that directory for the static libraries,
i.e. libgamma.a and libgamma.dll.a. But the executable will NOT know where
to find the GAMMA DLL. This is not of consequence if linking is done to the static library,
but if linking is done to the DLL (default) then the executable must be able to find the DLL.
The makefile solves this by simply copying the DLL into this directory, that is one of the
first directories looked for when searching for a DLL.
To be able to run any (DLL linked) GAMMA executable program the GAMMA DLL must first be
placed into a directory where it can be easily found. This can be the dirctory containing
the executable (as is done in the Makefile) or it can be any directory in the PATH. To see what
the path is, use the command env in the Cygwin provided bash shell . Probably the best
choice of where to put gamma.dll is in directory /usr/local/bin or maybe even
/bin. Cygwin puts these two in the PATH automatically. Where these reside on
your system depends upon where you installed CygWin. Note that the Makefile command
make install will copy the GAMMA dll gamma.dll into /usr/local/bin.
Of course, if you wish to be able to just click on the Windows icon to run a program then the
DLL must be in the Windows path....
|
|
About The Installation
|
|
Normally GAMMA is built and installed with the usual GNU configure-make process done
in the main GAMMA version directory using the main Makefile. The purpose of this primal
Makefile is to demonstrate how GAMMA and PyGAMMA libraries are built on a relatively simplistic
level, by-passing the complexities buried in the main Makefile. But this build is somewhat
specific in that it assumes the user is working with CygWin. Consequently it
keeps all binaries in a CygWin specific directory.
If the build and programs work nicely, the user may wish to use this build as their default GAMMA.
What does that mean? Quite simply it means that you wish to use the libraries produced by this
build as your GAMMA libraries. There are two aspects to this: 1.) The GAMMA script (gamma),
and 2.) The GAMMA DLL (gamma.dll, pygamma.dll). The script must be adjusted and then it,
and the DLLs must be placed in an appropriate directory.
| Initial File
| make install |
Final File |
| ./gamma.in |
==> |
INSTALLDIR/gamma |
| BINDIR/gamma.dll |
==> |
INSTALLDIR/gamma.dll |
| BINDIR/libgamma.dll.a |
==> |
BINDIR/libgamma.dll.a |
| BINDIR/libgamma.a |
==> |
BINDIR/libgamma.a |
| BINDIR/pygamma.dll |
==> |
PYDLLDIR/pygamma.dll |
|
The Makefile contains the variable BINDIR which will be set to ../../i686-pc-cygwin.
Similarly it contains the variable INSTALLDIR which will be set to /usr/local/bin,
and the variable PYDLLDIR which is set by the user to the point where the Python
DLL directory is. This directory on my machine is /lib/python2.2/lib-dynload.
The gamma script is simply a set of commands that will invoke the C++ compiler and automatically
link to the GAMMA library whenever a GAMMA program is compiled. This script should inherently know
where the GAMMA headers are on your system (../../src), where the GAMMA CygWin binaries are
(../../i686-pc-cygwin), and available for all users on the system. When you invoke
make install the file gamma.in is converted into gamma and placed
into /usr/local/bin. The conversion is necessary to tell the script where GAMMA is on your
system and the move is to a directory typically in the PATH of each user so that when he/she
type in "gamma" at the command line it will invoke that script. The script is set to link to
a single library named gamma, which is the name of the library this makefile builds.
As for the GAMMA library, there may be four of them produced. The first is a static GAMMA
library, libgamma.a. This is built in the directory (../../i686-pc-cygwin) and will
stay there even after make install. The gamma script can find it because it
will know that directory ../../i686-pc-cygwin contains GAMMA CygWin binaries. The second and
third libraries deal with the GAMMA DLL, these are the DLL itself gamma.dll and its
associated input library libgamma.dll.a. The latter is similar to the static library
and will remain in ../../i686-pc-cygwin. But the former must be placed into a directory known
by the system. Hence, make install will move gamma.dll into the a directory
commonly used by Cygwin for libraries. Note that when GAMMA C++ programs are they will
preferentially link to the libgamma.dll.a (and hence use the DLL). Only when the DLL is not
present or special build flags are set will the static library be used. The fourth and final
GAMMA library is the DLL for PyGAMMA, pygamma.dll. This library must be known to
Python, so the make install will move this DLL into the Python DLL directory.
for the CygWin build and moved into a location known by the system.
To summarize, it copies the GAMMA DLL gamma.dll into /usr/local/bin,
and it copies the PyGAMMA DLL pygamma.dll into the Python DLL directory. Since the
directory /usr/local/bin will typically be in the users PATH in a Cygwin Bash shell,
all users should have access to GAMMA. Since Python always looks in its own DLL directory,
all users should have access to PyGAMMA.
|
|
About PyGAMMA
|
The PyGAMMA library build is closely related to the build of the GAMMA DLL, but it demands that
- Cygwin Python is installed on the system.
- Boost.Python for Cygwin is installed on the system.
- Linking includes Python and Boost.Python libraries.
- The flag PYGAMMA (-DPYGAMMA=1) is set during compilations.
As a consequence, a different target pygamma is used to build the PyGAMMA DLL.
Similarly, the GAMMA module demo and test programs are not compiled under PyGAMMA but
exists as Python scripts which must be run in a Python window. Hence, the targets to
run these are different as well.
|
|
About The Makefile
|
|
Although primitive, the provided Makefile in this directory does have several targets.
These and their intended function are shown in the following table.
| Target |
Purpose |
| all |
Same As make. Builds Libraries libgamma.a, gamma.dll,.... |
| lib |
Builds only the static library libgamma.a |
| dll |
Builds only the DLL (gamma.dll, libgamma.dll.a) |
| pyg |
Builds only the PyGAMMA DLL (pygamma.dll) |
| demo |
Builds and Runs the module demos (using DLL) |
| demostatic |
Builds and Runs the module demos (using static library) |
| clean |
Cleans out all object files from any builds |
| install |
Installs GAMMA script and libraries |
|
|
|
Additional Notes
|
|
At the time of this writing, the CygWin build of the GAMMA DLL failed and produced the following
error:
collect2: ld terminated with signal 11 [Segmentation fault]
This problem (not due to GAMMA) and the fix has been discussed on the CygWin mailing
list as summarized below:
This has come up a few times in the past.
It has been figured out that increasing heap_chunk_in_mb helps.
The Cygwin default is 128MB, try to set it to 512MB or 1GB.
I have 512MB RAM at home and linking succeeds with a 1GB setting. That is a DWORD value 400.
REGEDIT4
[HKEY_CURRENT_USER\Software\Cygnus Solutions\Cygwin]
"heap_chunk_in_mb"=dword:00000400
Paste this into a file with suffix .reg, a doubleclick on the file
will write it in the registry. May need a reboot too.
I have included the file CygWinHeap.reg in this directory which contains the
above alteration to the Windows registry. By clicking on it with the mouse the changes
within will be entered into the registry. If you are experiencing this secmentation fault
error please apply the registry patch. I did not have to reboot my machine to have it take
effect but I did have to close all CygWin bash windows.
Two additional targets allow one to insure there will be a build of the
demo and test programs. These are make democlean and make testclean respectively.
These do not remove any object files from the GAMMA library build. The target make demo
will build an run a program which demonstrates what the GAMMA modules do. They do not demonstrate
how to build any MR simulation programs currently. After running the demo or test targets one should
run make clean to remove any files produced during the execution of those programs. Any
clutter files left in this directory can be removed with the script cleanup by issuing
the command ./cleanup from a bash shell as needed.
|
|


Slaughterer 5
Forgotten Love
Barry's Adventure
Morning
Day
Late Night
Child
Adult
Senior
Submit
Your Ticket Price:


The next time you find yourself coming up short on rent day, try this: Get a few bottles of allergy medicine, head out to the local rave party and sell the tablets for $20 apiece. Chances are the kids you're selling it to will already be high and won't notice that the pills aren't doing anything except opening up their sinuses.
That's Ronna's (Sarah Polley) strategy for avoiding eviction, and it's typical of the kookiness of "Go," the second feature from director Doug Liman. Like Liman's first movie, "Swingers," "Go" is propelled by its quirks and details rather than drama; unlike the generally mellow "Swingers," however, "Go" zooms through its shaggy dog story with the same adrenalin rush that dominates its psychedelic soundtrack from master DJ BT.
If "Go" is reminiscent of Robert Altman's film "Short Cuts" (in which a couple of dozen Californians of differing social classes turn out to share common threads), it's considerably lighter in tone. How grim can things get when the closest thing the movie has to a villian is a guy who wears a Santa hat, quotes from "The Breakfast Club" and deconstructs "The Family Circus"?
This sort of project lives or dies by its casting, and Liman has done an outstanding job. Polley ("The Sweet Hereafter") and Katie Holmes ("Dawson's Creek") are endearingly earthy as Ronna and Claire, two seemingly bright young women condemned to waste their days working endless shifts at the check-out counter of a fourth-rate grocery store. To add insult to injury, in honor of the Christmas holidays, the cashiers are forced to wear "Yule Save More" buttons on their Velveeta-colored aprons.
But Ronna's life becomes a bit livelier when TV stars Adam and Zack (comedian Jay Mohr and "Party of Five's" Scott Wolf, playing amusingly against type) come through her line. They're looking to score some designer drugs before heading to a holiday rave, and, since their usual dealer Simon (Desmond Askew) is out of town, they turn to Ronna for help. She, in turn, hightails it to Todd (Timothy Olyphant), the local drug kingpin, a decision that leads to a traumatic night for all concerned.
Besides its characters, what elevates "Go" high above the typical "party picture" - such as"Can't Hardly Wait," for example - is screenwriter John August's zingy dialogue. As when a guy refuses to reveal everything about his indiscretions, warning his lover that if he does, "you will freak out and it will be drama, bad, not-funny 'Roseanne' kind of drama." As when would-be Vegas smoothies Tiny (Breckin Meyer) and Marcus (Taye Diggs) debate about race and Tiny insists it's all "a state of mind," Marcus responds by calling him "Rhythm Nation."
For a fledgling director, getting funding from a major studio on your second film often means having to compromise the qualities that originally set you apart from the crowd. The buoyant, sassy and decidedly unglossy "Go" is proof Liman has managed to avoid that trap.
James Sanford
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


| DOSE: |
0.1 repeated |
oral |
LSD |
(blotter / tab) |
About a year and 4 months ago, I was a student with an important deadline to meet. At the time I was chronically tired and unable to work, as the result of severe insomnia.
So I began taking small doses of LSD (tenth of a tab,at a time) as a stimulent to give me the energy I needed to prepare my presentation. After doing this for about a week, I was admitted to hospital with muscle spasms in my neck and shoulders, which kept me more or less incapicated.
Extensive tests failed to detect anything wrong, and the spasms wore off after a week. However they had not gone to stay, and reoccured regularly over the next year. Prolonged tensing of neck and shoulder muscles, preventing normal activity,confining me to bed and computer games....Severe depression.....still unemployable.
Advice to self: LSD is a very powerful drug, NEVER take it like coffee.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


About me
I have been writing important papers about me all my life. In middle school, I wrote an essay about how my mother's cancer affected me. In High School, I wrote a treatise about how I wanted to design bionic eyes for the blind. My first year of college, I wrote an sermon about Pascal's Wager. My second year of college, I wrote a memorandum on the reformation of the American Prison-Industrial Complex. In the end, I am a Naperville dishwasher who loves to write.


With everfoodie, you will gain an additional source of income. Our customers are continually searching the latest cool restaurants in their city.
With everfoodie, you will gain an additional source of income. Our customers are continually searching the latest cool restaurants in their city.
With everfoodie, you will gain an additional source of income. Our customers are continually searching the latest cool restaurants in their city.
We're hungry for the best things in life: delicious food, exploring the city and bringing the first bite of food to our customers.
We're hungry for the best things in life: delicious food, exploring the city and bringing the first bite of food to our customers.
Customers enter a delivery address via the app or website and select a restaurant nearby.
Restaurant accepts the order through the tablet we provide, and starts preparing the food for a specific pick up time.
Our rider arrives at the right time to collect and delivers the order within 30min after the order was placed.
everfoodie sends you the proceeds from your orders every month and provides detailed insights on your performance.
Step 1: Sign up online
Step 2: Approval stage
Step 3:fooddelivery sends contract
Step 4: Contract signed
Step 5: Receive preview of your menu
Step 6: Receive everfoodie devices
Step 7: Receive training via call
Step 8: Your restaurant is live on everfoodie


Laws and plans are being created and changed all the time without the people of the nation even being aware.
There should be a way to be notified when something close to your heart is about to be decided. That is where our App comes in. Put in your topics of interest and when an issue around that topic comes up then you will be informed and then there is the opportunity to engage with government to mold the country and area that you live in.
Laws and plans are being created and changed all the time without the people of the nation even being aware.
There should be a way to be notified when something close to your heart is about to be decided. That is where our App comes in. Put in your topics of interest and when an issue around that topic comes up then you will be informed and then there is the opportunity to engage with government to mold the country and area that you live in.
Laws and plans are being created and changed all the time without the people of the nation even being aware.
There should be a way to be notified when something close to your heart is about to be decided. That is where our App comes in. Put in your topics of interest and when an issue around that topic comes up then you will be informed and then there is the opportunity to engage with government to mold the country and area that you live in.