UN Climate Change Conference – Nairobi 2006
08-Nov-06 — original report
The AWG convened an in-session workshop chaired by AWG Vice Chair Luiz Alberto Figueiredo Machado.
The EU noted that Article 2.3 (adverse effects of policies and measures) was addressed under other agenda items.
JAPAN proposed integrating the item with discussions on Protocol Article 3.14 (adverse effects).
Saudi Arabia, for the G-77/CHINA, said they are separate issues.
GHANA said the issue is not just an OPEC issue and should be considered broadly, including how policies and measures in developed countries will affect trade.
Chair Kumarsingh will consult informally.
The International Maritime Organization (IMO) reported on its work on emissions from international shipping.
He informed participants of a new amendment to the London Protocol to allow carbon sequestration in seabed geological formations.
KUWAIT, with SAUDI ARABIA and opposed by the EU, JAPAN, NORWAY and others, proposed removing this agenda item.
CHINA said any decision should strictly follow Protocol Article 2.2 (Annex I targets and the Montreal Protocol) and only apply to Annex I parties.
IMO proposed establishing a benchmark for maritime emissions.
Chair Kumarsingh will consult informally.
In its report ( FCCC/CP/2006/3 ), the GEF highlighted climate change as the fourth replenishment's highest-ever allocation.
The G-77/CHINA requested that the GEF also report on predictable and available funding for implementation.
ZAMBIA said RAF indicative allocations disadvantage most developing countries.
MICRONESIA said the RAF indicator on emissions reduction potential penalizes SIDS.
The EU stressed the RAF's mid-term review.
The US encouraged the GEF to further consider, inter alia , carbon capture and storage technologies, while TUVALU said such technologies may present a disincentive for renewable energy projects. EGYPT called for GEF funding for biofuels.
Additional guidance to the GEF: The Secretariat briefed delegates (FCCC/SBSTA/2006/INF.1).
CHINA supported further streamlining GEF procedures on the project cycle, enhanced country ownership of projects, and increased GEF support for adaptation and technology transfer.
Tina Guthrie (Canada) and Osita Anaedu (Nigeria) will co-chair a contact group on the financial mechanism.
The EU and SWITZERLAND stressed the need to fully operationalize the SCCF.
Chair Becker referred the issue to informal consultations coordinated by Bubu Pateh Jallow (Gambia).
Third review of the financial mechanism: The EU, US and SWITZERLAND said the GEF is performing effectively and welcomed its fourth replenishment.
The Philippines, for the G-77/CHINA, expressed concerns over the GEF's performance and its resource allocation framework (RAF).
CHINA said the GEF implementing and executing agencies ' performance should be assessed, and the REPUBLIC OF KOREA suggested examining the impacts of GEF funds on emissions reductions.
Bangladesh, for LDCs, urged inclusion of a vulnerability index in the RAF.
On Article 6 (education, training and public awareness), the Secretariat presented a synthesis report on four regional workshops ( FCCC/SBI/2006/17 ) and parties views on advancing work on CC:iNet the prototype information network clearinghouse ( FCCC/SBI/2006/MISC.15 ).
UNEP reported on relevant Article 6 activities.
Many parties commended these reports. SWITZERLAND advised pursuing synergies between capacity building and Article 6.
Informal consultations will be conducted by Marie Jaudet (France).
The Secretariat and LDC Expert Group (LEG) Chair Bubu Pateh Jallow reported on LDC issues and progress on NAPAs ( FCCC/SBI/2006/23 ).
The EU stressed the LEG role in NAPA preparation, monitoring NAPA implementation, and developing best practice standards for adaptation measures.
SIERRA LEONE, TANZANIA and MOZAMBIQUE stressed the importance of NAPA preparation and implementation.
Chair Becker will prepare draft conclusions.
The Secretariat briefed participants on intersessional meetings (FCCC/SBI/2006/13, FCCC/SBI/2006/18 and FCCC/SBI/2006/19 ) and GHANA highlighted a recent African workshop on adaptation.
The EU noted more regional meetings scheduled for 2007 and anticipated further action at COP 13.
Angela Churie-Kallhauge (Sweden) and Samuel Adejuwon (Nigeria) will co-chair a contact group on climate change response measures.
The Secretariat reported on capacity building implementation, GEF capacity building performance indicators and monitoring ( FCCC/SBI/2006/5 ; FCCC/SBI/2006/16 ; FCCC/SBI/2006/22 ) and on parties views on regular monitoring of activities ( FCCC/SBI/2006/MISC.4 , Corr.1 and Add.1).
Tanzania, for the G-77/CHINA and supported by JAPAN, the US and EU, highlighted the importance of reaching consensus on this issue and stressed the use of existing reporting mechanisms in monitoring of capacity building.
Crispin d Auvergne (Saint Lucia) and Helmut Hojesky (Austria) will co-chair a contact group.
The AWG in-session workshop appeared to generate some talk in the corridors.
Discussions were widely regarded as candid, although one delegate described the workshop as a shadow-boxing exercise, while another commented: There is no single vision, no single truth .
However, others were more positive, noting that no consensus could possibly emerge for some time to come.
At least we re talking about these issues openly now, said one delegate.
Themes for further AWG workshops are under discussion.
The Russian proposal on long-term commitments also generated discussion.
Informal talks on Tuesday apparently did not lead to a breakthrough, with the current discussions being described by one observer as more of an agenda fight.
However, early reports suggest the proposal is likely to be part of the so-called multi-track process on post-2012 issues for some time.
On the stabilization of greenhouse gas concentrations, Bert Metz, Intergovernmental Panel on Climate Change (IPCC), reviewed scenarios set out in the Panel's Third Assessment Report.
He said the forthcoming Fourth Assessment Report will deal with climate sensitivity, stabilization calculations for all greenhouse gases, new mitigation options, and stabilization targets below those set out in the Third Assessment Report.
Artur Runge-Metzger, European Commission, described the EU's agreed policy of aiming to limit global temperature rise to 2 °C Celsius, based on a stabilization of concentrations at 450ppm.
He said this would mean emissions reductions of between 60-80% by 2050 for industrialized countries, assuming US participation.
Harald Dovland, Environment Ministry of Norway, noted that Norway also had a long-term aspirational goal of 2 °C.
On future policies, he highlighted recommendations from the Norwegian Commission on Low Emissions, and a focus on renewable energy, pioneering and developing carbon dioxide capture and storage, and awareness raising campaigns.
Mutsuyoshi Nishimura, Ministry of Foreign Affairs of Japan, emphasized the UNFCCC objective of stabilizing emissions.
He said the next commitment period should achieve stabilization through an effective framework that adds new tools and strategies to the Kyoto toolbox.
He urged fairness and equity on burden sharing among countries if the process is not to collapse.
SAUDI ARABIA said many Annex I countries had not shown leadership.
Nishimura replied that Japan is deadly serious about climate change.
José Domingos Gonzalez Miguez, Brazil's Ministry of Science and Technology, presented the Brazilian proposal emphasizing historical responsibility and shifting the focus from emissions to temperature increase.
FINLAND suggested the AWG look into differentiation methodologies and not just historical responsibility, while CANADA said such responsibility is nuanced.
AWG Chair Zammit Cutajar wondered if current discussions on further emissions reductions by Annex I countries should consider this broader historical approach.
Sergey Kononov, UNFCCC Secretariat, noted increasing emissions for Annex I parties, highlighted the relevance of LULUCF for some parties ' emissions profiles, and underscored the high growth rate for emissions in transport.
Alf Wills, Department of Environmental Affairs and Tourism, South Africa, underlined the significance of using cumulative emissions data as the basis for an equitable approach to determining future commitments and providing space for developing countries to achieve their sustainable development goals.
NORWAY observed that emissions reduction targets for developing countries were not discussed during the workshop.
Adrian Macey and Hayden Montgomery, New Zealand, presented on mitigation of methane and nitrous oxide emissions from agriculture, noting that mitigation options are limited and calling for increased international research efforts.
Mutsuyoshi Nishimura highlighted Japan's energy efficiency and decoupling of emissions from growth in GDP.
He emphasized the importance of policies and measures other than the market to drive technological innovation.
Artur Runge-Metzger underlined that offsetting emissions through the CDM cannot solve the climate problem.
He pointed to the limited global emissions stabilization impact if all Annex I parties were to achieve all their reductions through domestic action, given the proposed 2 °C target for temperature rise.
During the subsequent discussion, TUVALU noted the need to include all major emitters and sectors, and consider the cost of adaptation.
SOUTH AFRICA said the question of equity needs to be addressed at a fundamental level.
NEW ZEALAND underscored the theme of equity, questioned assumptions about curbing the growth in emissions, and highlighted the sectoral approach.
The Secretariat presented on the Rome adaptation workshop ( FCCC/SBSTA/2006/10 ).
Many parties supported holding a second workshop and further discussing the workshop scope.
TUVALU, supported by the INTERNATIONAL INDIGENOUS FORUM ON CLIMATE CHANGE, proposed including Indigenous Peoples views in future meetings and submissions.
The US supported a focus on technical and methodological issues and on data availability, while BRAZIL supported a policy focus.
Switzerland, for the ENVIRONMENTAL INTEGRITY GROUP, highlighted environmental services.
TANZANIA underscored biomass and problems accessing market mechanisms. INDONESIA and the GLOBAL ENVIRONMENT CENTRE pointed to the role of peatlands in the carbon cycle, and NEPAL stressed community forestry.
Hernan Carlino (Argentina) and Audun Rosland (Norway) will co-chair a contact group.
The Global Climate Observation System (GCOS) presented on revising reporting guidelines ( FCCC/SBSTA/2006/MISC.12 ) and a regional workshop programme ( FCCC/SBSTA/2006/MISC.13 ).
The Committee on Earth Observation Satellites (CEOS) presented on the coordinated response to the GCOS implementation plan ( FCCC/SBSTA/2006/MISC.14 ).
AUSTRALIA, NORWAY and the EU supported improving satellite observation systems.
SWITZERLAND stressed the continued need for in-situ observations to calibrate satellites and input to models.
Stefan Rösner (Germany) and Soobaraj Nayroo Sok Appadu (Mauritius) will co-chair a contact group.
The Secretariat presented a technical review of and updated guidelines on greenhouse gas inventories ( FCCC/SBSTA/2006/INF.6 ; FCCC/SBSTA/2006/9).
Chair Kumarsingh reminded parties that greenhouse gas inventories will be reviewed in 2007 and proposed preparing draft decisions.
Implications of awarding CDM credits to new HCFC-22 facilities for the destruction of
The Secretariat presented results from a training programme for review experts under Protocol Article 8 on review of national communications ( FCCC/SBSTA/2006/INF.7 ).
Chair Kumarsingh suggested parties begin a review of Protocol Article 7.1(a nnual inventories) on a voluntary basis, especially Decision 26/CMP.1(t iming and scope of review).
Draft conclusions will be prepared.
The Secretariat presented on this issue ( FCCC/SBSTA/2006/MISC.11 ). ARGENTINA and the EU welcomed the decision by Montreal Protocol parties to assess measures to reduce production of HCFCs and to consider the influence of the CDM on HCFC-22 production in consultation with the UNFCCC Secretariat, IPCC and CDM Executive Board.
Lambert Schneider (Germany) will conduct informal consultations.


These characters have been removed completely from the username because they are not allowed:
These characters are allowed in a username. HTML entity codes are provided for reference only:
The sanitized username is:
These characters have been removed completely from the password because they are not allowed:
These characters have been replaced by their respective HTML entity codes:
The sanitized password is:
Login
Reset


{% extends 'bootstrap/base.html' %} {% import "bootstrap/wtf.html" as wtf %} {% block content %} {% include "header.html" %} Variable Outgoing Details Manage a variable outgoing on this page


EasyMUN
Unified Technical Solution for MUN Conferences
Console Lite
In-conference presentation and utilities
Console Link
Registration life-cycle management
DocFMT
Reproducible document generation


|
Chipmunk SpaceManager
0.1.2
Chipmunk SpaceManager API Reference (iOS version) for Kobold2D developers
|
#include <SpaceManager.h>
Public Member Functions | |
| id | initWithSize:count: (int size,[count] int count) |
| id | initWithSpace: (cpSpace *space) |
| BOOL | loadSpaceFromUserDocs:delegate: (NSString *file,[delegate] NSObject< SpaceManagerSerializeDelegate > *delegate) |
| BOOL | saveSpaceToUserDocs:delegate: (NSString *file,[delegate] NSObject< SpaceManagerSerializeDelegate > *delegate) |
| BOOL | loadSpaceFromPath:delegate: (NSString *path,[delegate] NSObject< SpaceManagerSerializeDelegate > *delegate) |
| BOOL | saveSpaceToPath:delegate: (NSString *path,[delegate] NSObject< SpaceManagerSerializeDelegate > *delegate) |
| void | addWindowContainmentWithFriction:elasticity:size:inset:radius: (cpFloat friction,[elasticity] cpFloat elasticity,[size] CGSize wins,[inset] cpVect inset,[radius] cpFloat radius) |
| void | step: (float delta) |
| cpShape * | addCircleAt:mass:radius: (cpVect pos,[mass] cpFloat mass,[radius] cpFloat radius) |
| cpShape * | addCircleToBody:radius: (cpBody *body,[radius] cpFloat radius) |
| cpShape * | addCircleToBody:radius:offset: (cpBody *body,[radius] cpFloat radius,[offset] CGPoint offset) |
| cpShape * | addRectAt:mass:width:height:rotation: (cpVect pos,[mass] cpFloat mass,[width] cpFloat width,[height] cpFloat height,[rotation] cpFloat r) |
| cpShape * | addRectToBody:width:height:rotation: (cpBody *body,[width] cpFloat width,[height] cpFloat height,[rotation] cpFloat r) |
| cpShape * | addRectToBody:width:height:rotation:offset: (cpBody *body,[width] cpFloat width,[height] cpFloat height,[rotation] cpFloat r,[offset] CGPoint offset) |
| cpShape * | addPolyAt:mass:rotation:numPoints:points: (cpVect pos,[mass] cpFloat mass,[rotation] cpFloat r,[numPoints] int numPoints,[points] cpVect pt,[,]...) |
| cpShape * | addPolyAt:mass:rotation:points: (cpVect pos,[mass] cpFloat mass,[rotation] cpFloat r,[points] NSArray *points) |
| cpShape * | addPolyAt:mass:rotation:numPoints:pointsArray: (cpVect pos,[mass] cpFloat mass,[rotation] cpFloat r,[numPoints] int numPoints,[pointsArray] cpVect *points) |
| cpShape * | addPolyToBody:rotation:points: (cpBody *body,[rotation] cpFloat r,[points] NSArray *points) |
| cpShape * | addPolyToBody:rotation:points:offset: (cpBody *body,[rotation] cpFloat r,[points] NSArray *points,[offset] CGPoint offset) |
| cpShape * | addPolyToBody:rotation:numPoints:pointsArray: (cpBody *body,[rotation] cpFloat r,[numPoints] int numPoints,[pointsArray] cpVect *points) |
| cpShape * | addPolyToBody:rotation:numPoints:pointsArray:offset: (cpBody *body,[rotation] cpFloat r,[numPoints] int numPoints,[pointsArray] cpVect *points,[offset] CGPoint offset) |
| cpShape * | addSegmentAtWorldAnchor:toWorldAnchor:mass:radius: (cpVect fromPos,[toWorldAnchor] cpVect toPos,[mass] cpFloat mass,[radius] cpFloat radius) |
| cpShape * | addSegmentAt:fromLocalAnchor:toLocalAnchor:mass:radius: (cpVect pos,[fromLocalAnchor] cpVect fromPos,[toLocalAnchor] cpVect toPos,[mass] cpFloat mass,[radius] cpFloat radius) |
| cpShape * | addSegmentToBody:fromLocalAnchor:toLocalAnchor:radius: (cpBody *body,[fromLocalAnchor] cpVect fromPos,[toLocalAnchor] cpVect toPos,[radius] cpFloat radius) |
| cpShape * | getShapeAt:layers:group: (cpVect pos,[layers] cpLayers layers,[group] cpLayers group) |
| cpShape * | getShapeAt: (cpVect pos) |
| void | rehashActiveShapes () |
| void | rehashStaticShapes () |
| void | rehashShape: (cpShape *shape) |
| NSArray * | getShapesAt:layers:group: (cpVect pos,[layers] cpLayers layers,[group] cpLayers group) |
| NSArray * | getShapesAt: (cpVect pos) |
| NSArray * | getShapesAt:radius:layers:group: (cpVect pos,[radius] float radius,[layers] cpLayers layers,[group] cpLayers group) |
| NSArray * | getShapesAt:radius: (cpVect pos,[radius] float radius) |
| cpShape * | getShapeFromRayCastSegment:end:layers:group: (cpVect start,[end] cpVect end,[layers] cpLayers layers,[group] cpGroup group) |
| cpShape * | getShapeFromRayCastSegment:end: (cpVect start,[end] cpVect end) |
| cpSegmentQueryInfo | getInfoFromRayCastSegment:end:layers:group: (cpVect start,[end] cpVect end,[layers] cpLayers layers,[group] cpGroup group) |
| cpSegmentQueryInfo | getInfoFromRayCastSegment:end: (cpVect start,[end] cpVect end) |
| NSArray * | getShapesFromRayCastSegment:end:layers:group: (cpVect start,[end] cpVect end,[layers] cpLayers layers,[group] cpGroup group) |
| NSArray * | getShapesFromRayCastSegment:end: (cpVect start,[end] cpVect end) |
| NSArray * | getInfosFromRayCastSegment:end:layers:group: (cpVect start,[end] cpVect end,[layers] cpLayers layers,[group] cpGroup group) |
| NSArray * | getInfosFromRayCastSegment:end: (cpVect start,[end] cpVect end) |
| void | applyLinearExplosionAt:radius:maxForce: (cpVect at,[radius] cpFloat radius,[maxForce] cpFloat maxForce) |
| void | applyLinearExplosionAt:radius:maxForce:layers:group: (cpVect at,[radius] cpFloat radius,[maxForce] cpFloat maxForce,[layers] cpLayers layers,[group] cpGroup group) |
| BOOL | isPersistentContactOnShape:contactShape: (cpShape *shape,[contactShape] cpShape *shape2) |
| cpArbiter * | persistentContactInfoOnShape: (cpShape *shape) |
| NSArray * | persistentContactInfosOnShape: (cpShape *shape) |
| cpShape * | persistentContactOnShape: (cpShape *shape) |
| NSArray * | getConstraints () |
| NSArray * | getConstraintsOnBody: (cpBody *body) |
| void | removeAndFreeShape: (cpShape *shape) |
| cpShape * | removeShape: (cpShape *shape) |
| void | addShape: (cpShape *shape) |
| void | removeAndFreeBody: (cpBody *body) |
| void | removeBody: (cpBody *body) |
| void | addBody: (cpBody *body) |
| BOOL | isBodyShared: (cpBody *body) |
| cpShape * | morphShapeToStatic: (cpShape *shape) |
| cpShape * | morphShapeToActive:mass: (cpShape *shape,[mass] cpFloat mass) |
| cpShape * | morphShapeToKinematic: (cpShape *shape) |
| NSArray * | fragmentShape:piecesNum:eachMass: (cpShape *shape,[piecesNum] int pieces,[eachMass] float mass) |
| NSArray * | fragmentRect:rowPiecesNum:colPiecesNum:eachMass: (cpPolyShape *poly,[rowPiecesNum] int rows,[colPiecesNum] int cols,[eachMass] float mass) |
| NSArray * | fragmentCircle:piecesNum:eachMass: (cpCircleShape *circle,[piecesNum] int pieces,[eachMass] float mass) |
| NSArray * | fragmentSegment:piecesNum:eachMass: (cpSegmentShape *segment,[piecesNum] int pieces,[eachMass] float mass) |
| void | combineShapes: (cpShape *shape,[,]...NS_REQUIRES_NIL_TERMINATION) |
| void | offsetShape:offset: (cpShape *shape,[offset] cpVect offset) |
| void | ignoreCollionBetweenType:otherType: (unsigned int type1,[otherType] unsigned int type2) |
| void | addCollisionCallbackBetweenType:otherType:target:selector: (unsigned int type1,[otherType] unsigned int type2,[target] id target,[selector] SEL selector) |
| void | addCollisionCallbackBetweenType:otherType:target:selector:moments: (unsigned int type1,[otherType] unsigned int type2,[target] id target,[selector] SEL selector,[moments] CollisionMoment moment,[,]...NS_REQUIRES_NIL_TERMINATION) |
| void | removeCollisionCallbackBetweenType:otherType: (unsigned int type1,[otherType] unsigned int type2) |
| cpConstraint * | removeConstraint: (cpConstraint *constraint) |
| void | removeAndFreeConstraint: (cpConstraint *constraint) |
| void | removeAndFreeConstraintsOnBody: (cpBody *body) |
| cpConstraint * | addSpringToBody:fromBody:toBodyAnchor:fromBodyAnchor:restLength:stiffness:damping: (cpBody *toBody,[fromBody] cpBody *fromBody,[toBodyAnchor] cpVect anchr1,[fromBodyAnchor] cpVect anchr2,[restLength] cpFloat rest,[stiffness] cpFloat stiff,[damping] cpFloat damp) |
| cpConstraint * | addSpringToBody:fromBody:restLength:stiffness:damping: (cpBody *toBody,[fromBody] cpBody *fromBody,[restLength] cpFloat rest,[stiffness] cpFloat stiff,[damping] cpFloat damp) |
| cpConstraint * | addSpringToBody:fromBody:stiffness: (cpBody *toBody,[fromBody] cpBody *fromBody,[stiffness] cpFloat stiff) |
| cpConstraint * | addGrooveToBody:fromBody:grooveAnchor1:grooveAnchor2:fromBodyAnchor: (cpBody *toBody,[fromBody] cpBody *fromBody,[grooveAnchor1] cpVect groove1,[grooveAnchor2] cpVect groove2,[fromBodyAnchor] cpVect anchor2) |
| cpConstraint * | addGrooveToBody:fromBody:grooveLength:isHorizontal:fromBodyAnchor: (cpBody *toBody,[fromBody] cpBody *fromBody,[grooveLength] cpFloat length,[isHorizontal] bool horiz,[fromBodyAnchor] cpVect anchor2) |
| cpConstraint * | addGrooveToBody:fromBody:grooveLength:isHorizontal: (cpBody *toBody,[fromBody] cpBody *fromBody,[grooveLength] cpFloat length,[isHorizontal] bool horiz) |
| cpConstraint * | addSlideToBody:fromBody:toBodyAnchor:fromBodyAnchor:minLength:maxLength: (cpBody *toBody,[fromBody] cpBody *fromBody,[toBodyAnchor] cpVect anchr1,[fromBodyAnchor] cpVect anchr2,[minLength] cpFloat min,[maxLength] cpFloat max) |
| cpConstraint * | addSlideToBody:fromBody:minLength:maxLength: (cpBody *toBody,[fromBody] cpBody *fromBody,[minLength] cpFloat min,[maxLength] cpFloat max) |
| cpConstraint * | addPinToBody:fromBody:toBodyAnchor:fromBodyAnchor: (cpBody *toBody,[fromBody] cpBody *fromBody,[toBodyAnchor] cpVect anchr1,[fromBodyAnchor] cpVect anchr2) |
| cpConstraint * | addPinToBody:fromBody: (cpBody *toBody,[fromBody] cpBody *fromBody) |
| cpConstraint * | addPivotToBody:fromBody:toBodyAnchor:fromBodyAnchor: (cpBody *toBody,[fromBody] cpBody *fromBody,[toBodyAnchor] cpVect anchr1,[fromBodyAnchor] cpVect anchr2) |
| cpConstraint * | addPivotToBody:fromBody:worldAnchor: (cpBody *toBody,[fromBody] cpBody *fromBody,[worldAnchor] cpVect anchr) |
| cpConstraint * | addPivotToBody:fromBody: (cpBody *toBody,[fromBody] cpBody *fromBody) |
| cpConstraint * | addMotorToBody:fromBody:rate: (cpBody *toBody,[fromBody] cpBody *fromBody,[rate] cpFloat rate) |
| cpConstraint * | addMotorToBody:rate: (cpBody *toBody,[rate] cpFloat rate) |
| cpConstraint * | addGearToBody:fromBody:phase:ratio: (cpBody *toBody,[fromBody] cpBody *fromBody,[phase] cpFloat phase,[ratio] cpFloat ratio) |
| cpConstraint * | addGearToBody:fromBody:ratio: (cpBody *toBody,[fromBody] cpBody *fromBody,[ratio] cpFloat ratio) |
| cpConstraint * | addBreakableToConstraint:maxForce: (cpConstraint *breakConstraint,[maxForce] cpFloat max) |
| cpConstraint * | addRotaryLimitToBody:fromBody:min:max: (cpBody *toBody,[fromBody] cpBody *fromBody,[min] cpFloat min,[max] cpFloat max) |
| cpConstraint * | addRotaryLimitToBody:min:max: (cpBody *toBody,[min] cpFloat min,[max] cpFloat max) |
| cpConstraint * | addRatchetToBody:fromBody:phase:rachet: (cpBody *toBody,[fromBody] cpBody *fromBody,[phase] cpFloat phase,[rachet] cpFloat ratchet) |
| cpConstraint * | addRatchetToBody:phase:rachet: (cpBody *toBody,[phase] cpFloat phase,[rachet] cpFloat ratchet) |
| cpConstraint * | addRotarySpringToBody:fromBody:restAngle:stiffness:damping: (cpBody *toBody,[fromBody] cpBody *fromBody,[restAngle] cpFloat restAngle,[stiffness] cpFloat stiff,[damping] cpFloat damp) |
| cpConstraint * | addRotarySpringToBody:restAngle:stiffness:damping: (cpBody *toBody,[restAngle] cpFloat restAngle,[stiffness] cpFloat stiff,[damping] cpFloat damp) |
| cpConstraint * | addPulleyToBody:fromBody:pulleyBody:toBodyAnchor:fromBodyAnchor:toPulleyAnchor:fromPulleyAnchor:ratio: (cpBody *toBody,[fromBody] cpBody *fromBody,[pulleyBody] cpBody *pulleyBody,[toBodyAnchor] cpVect anchor1,[fromBodyAnchor] cpVect anchor2,[toPulleyAnchor] cpVect anchor3a,[fromPulleyAnchor] cpVect anchor3b,[ratio] cpFloat ratio) |
| cpConstraint * | addPulleyToBody:fromBody:toBodyAnchor:fromBodyAnchor:toPulleyWorldAnchor:fromPulleyWorldAnchor:ratio: (cpBody *toBody,[fromBody] cpBody *fromBody,[toBodyAnchor] cpVect anchor1,[fromBodyAnchor] cpVect anchor2,[toPulleyWorldAnchor] cpVect anchor3a,[fromPulleyWorldAnchor] cpVect anchor3b,[ratio] cpFloat ratio) |
Static Public Member Functions | |
| id | spaceManager () |
| id | spaceManagerWithSize:count: (int size,[count] int count) |
| id | spaceManagerWithSpace: (cpSpace *space) |
Protected Attributes | |
| cpSpace * | _space |
| NSMutableArray * | _invocations |
| int | _steps |
| cpFloat | _lastDt |
| cpFloat | _timeAccumulator |
| BOOL | _cleanupBodyDependencies |
| id< cpConstraintCleanupDelegate > | _constraintCleanupDelegate |
| BOOL | _rehashStaticEveryStep |
| smgrIterateFunc | _iterateFunc |
| smgrEachFunc | _eachFunc |
| cpFloat | _constantDt |
Properties | |
| cpSpace * | space |
| cpShape * | topWall |
| cpShape * | bottomWall |
| cpShape * | rightWall |
| cpShape * | leftWall |
| int | steps |
| cpFloat | lastDt |
| cpVect | gravity |
| cpFloat | damping |
| BOOL | rehashStaticEveryStep |
| smgrIterateFunc | iterateFunc |
| smgrEachFunc | eachFunc |
| cpBody * | staticBody |
| BOOL | isSpaceLocked |
| cpFloat | constantDt |
| BOOL | cleanupBodyDependencies |
| id< cpConstraintCleanupDelegate > | constraintCleanupDelegate |
The SpaceManager
| void SpaceManager::addBody: | ( | cpBody * | body | ) | [virtual] |
Manually add a body to the space
| cpConstraint* SpaceManager::addBreakableToConstraint:maxForce: | ( | cpConstraint * | breakConstraint, |
| [maxForce] cpFloat | max | ||
| ) | [virtual] |
This does not work yet
| cpShape* SpaceManager::addCircleAt:mass:radius: | ( | cpVect | pos, |
| [mass] cpFloat | mass, | ||
| [radius] cpFloat | radius | ||
| ) | [virtual] |
add a circle shape
| cpShape* SpaceManager::addCircleToBody:radius: | ( | cpBody * | body, |
| [radius] cpFloat | radius | ||
| ) | [virtual] |
add a circle shape to existing body
| cpShape* SpaceManager::addCircleToBody:radius:offset: | ( | cpBody * | body, |
| [radius] cpFloat | radius, | ||
| [offset] CGPoint | offset | ||
| ) | [virtual] |
add a circle shape to existing body, with offset
| void SpaceManager::addCollisionCallbackBetweenType:otherType:target:selector: | ( | unsigned int | type1, |
| [otherType] unsigned int | type2, | ||
| [target] id | target, | ||
| [selector] SEL | selector | ||
| ) | [virtual] |
Register a collision callback between types
| void SpaceManager::addCollisionCallbackBetweenType:otherType:target:selector:moments: | ( | unsigned int | type1, |
| [otherType] unsigned int | type2, | ||
| [target] id | target, | ||
| [selector] SEL | selector, | ||
| [moments] CollisionMoment | moment, | ||
| [,] | NS_REQUIRES_NIL_TERMINATION | ||
| ) | [virtual] |
Register a collision callback between types for the given collision moments
| cpConstraint* SpaceManager::addGearToBody:fromBody:phase:ratio: | ( | cpBody * | toBody, |
| [fromBody] cpBody * | fromBody, | ||
| [phase] cpFloat | phase, | ||
| [ratio] cpFloat | ratio | ||
| ) | [virtual] |
Add gears between two bodies
| cpConstraint* SpaceManager::addGearToBody:fromBody:ratio: | ( | cpBody * | toBody, |
| [fromBody] cpBody * | fromBody, | ||
| [ratio] cpFloat | ratio | ||
| ) | [virtual] |
Add gears between two bodies
| cpConstraint* SpaceManager::addGrooveToBody:fromBody:grooveAnchor1:grooveAnchor2:fromBodyAnchor: | ( | cpBody * | toBody, |
| [fromBody] cpBody * | fromBody, | ||
| [grooveAnchor1] cpVect | groove1, | ||
| [grooveAnchor2] cpVect | groove2, | ||
| [fromBodyAnchor] cpVect | anchor2 | ||
| ) | [virtual] |
Add a groove (aka sliding pin) between two bodies
| cpConstraint* SpaceManager::addGrooveToBody:fromBody:grooveLength:isHorizontal: | ( | cpBody * | toBody, |
| [fromBody] cpBody * | fromBody, | ||
| [grooveLength] cpFloat | length, | ||
| [isHorizontal] bool | horiz | ||
| ) | [virtual] |
Add a groove (aka sliding pin) between two bodies
| cpConstraint* SpaceManager::addGrooveToBody:fromBody:grooveLength:isHorizontal:fromBodyAnchor: | ( | cpBody * | toBody, |
| [fromBody] cpBody * | fromBody, | ||
| [grooveLength] cpFloat | length, | ||
| [isHorizontal] bool | horiz, | ||
| [fromBodyAnchor] cpVect | anchor2 | ||
| ) | [virtual] |
Add a groove (aka sliding pin) between two bodies
| cpConstraint* SpaceManager::addMotorToBody:fromBody:rate: | ( | cpBody * | toBody, |
| [fromBody] cpBody * | fromBody, | ||
| [rate] cpFloat | rate | ||
| ) | [virtual] |
Add a motor that applys torque to a specified body(s)
| cpConstraint* SpaceManager::addMotorToBody:rate: | ( | cpBody * | toBody, |
| [rate] cpFloat | rate | ||
| ) | [virtual] |
Add a motor that applys torque to a specified body(s)
| cpConstraint* SpaceManager::addPinToBody:fromBody: | ( | cpBody * | toBody, |
| [fromBody] cpBody * | fromBody | ||
| ) | [virtual] |
Create a pin (rod) between two bodies
| cpConstraint* SpaceManager::addPinToBody:fromBody:toBodyAnchor:fromBodyAnchor: | ( | cpBody * | toBody, |
| [fromBody] cpBody * | fromBody, | ||
| [toBodyAnchor] cpVect | anchr1, | ||
| [fromBodyAnchor] cpVect | anchr2 | ||
| ) | [virtual] |
Create a pin (rod) between two bodies
| cpConstraint* SpaceManager::addPivotToBody:fromBody: | ( | cpBody * | toBody, |
| [fromBody] cpBody * | fromBody | ||
| ) | [virtual] |
Add a shared point between two bodies that they may rotate around
| cpConstraint* SpaceManager::addPivotToBody:fromBody:toBodyAnchor:fromBodyAnchor: | ( | cpBody * | toBody, |
| [fromBody] cpBody * | fromBody, | ||
| [toBodyAnchor] cpVect | anchr1, | ||
| [fromBodyAnchor] cpVect | anchr2 | ||
| ) | [virtual] |
Add a shared point between two bodies that they may rotate around
| cpConstraint* SpaceManager::addPivotToBody:fromBody:worldAnchor: | ( | cpBody * | toBody, |
| [fromBody] cpBody * | fromBody, | ||
| [worldAnchor] cpVect | anchr | ||
| ) | [virtual] |
Add a shared point between two bodies that they may rotate around
| cpShape* SpaceManager::addPolyAt:mass:rotation:numPoints:points: | ( | cpVect | pos, |
| [mass] cpFloat | mass, | ||
| [rotation] cpFloat | r, | ||
| [numPoints] int | numPoints, | ||
| [points] cpVect | pt, | ||
| [,] | ... | ||
| ) | [virtual] |
add a polygon shape, convenience method
| cpShape* SpaceManager::addPolyAt:mass:rotation:numPoints:pointsArray: | ( | cpVect | pos, |
| [mass] cpFloat | mass, | ||
| [rotation] cpFloat | r, | ||
| [numPoints] int | numPoints, | ||
| [pointsArray] cpVect * | points | ||
| ) | [virtual] |
add a polygon shape
| cpShape* SpaceManager::addPolyAt:mass:rotation:points: | ( | cpVect | pos, |
| [mass] cpFloat | mass, | ||
| [rotation] cpFloat | r, | ||
| [points] NSArray * | points | ||
| ) | [virtual] |
add a polygon shape
| cpShape* SpaceManager::addPolyToBody:rotation:numPoints:pointsArray: | ( | cpBody * | body, |
| [rotation] cpFloat | r, | ||
| [numPoints] int | numPoints, | ||
| [pointsArray] cpVect * | points | ||
| ) | [virtual] |
Alternative, add a polygon shape to existing body
| cpShape* SpaceManager::addPolyToBody:rotation:numPoints:pointsArray:offset: | ( | cpBody * | body, |
| [rotation] cpFloat | r, | ||
| [numPoints] int | numPoints, | ||
| [pointsArray] cpVect * | points, | ||
| [offset] CGPoint | offset | ||
| ) | [virtual] |
Alternative, add a polygon shape to existing body, with offset
| cpShape* SpaceManager::addPolyToBody:rotation:points: | ( | cpBody * | body, |
| [rotation] cpFloat | r, | ||
| [points] NSArray * | points | ||
| ) | [virtual] |
add a polygon shape to existing body
| cpShape* SpaceManager::addPolyToBody:rotation:points:offset: | ( | cpBody * | body, |
| [rotation] cpFloat | r, | ||
| [points] NSArray * | points, | ||
| [offset] CGPoint | offset | ||
| ) | [virtual] |
add a polygon shape to existing body, with offset
| cpConstraint* SpaceManager::addPulleyToBody:fromBody:pulleyBody:toBodyAnchor:fromBodyAnchor:toPulleyAnchor:fromPulleyAnchor:ratio: | ( | cpBody * | toBody, |
| [fromBody] cpBody * | fromBody, | ||
| [pulleyBody] cpBody * | pulleyBody, | ||
| [toBodyAnchor] cpVect | anchor1, | ||
| [fromBodyAnchor] cpVect | anchor2, | ||
| [toPulleyAnchor] cpVect | anchor3a, | ||
| [fromPulleyAnchor] cpVect | anchor3b, | ||
| [ratio] cpFloat | ratio | ||
| ) | [virtual] |
Add a pulley between two bodies and another body which is the actual pulley
| cpConstraint* SpaceManager::addPulleyToBody:fromBody:toBodyAnchor:fromBodyAnchor:toPulleyWorldAnchor:fromPulleyWorldAnchor:ratio: | ( | cpBody * | toBody, |
| [fromBody] cpBody * | fromBody, | ||
| [toBodyAnchor] cpVect | anchor1, | ||
| [fromBodyAnchor] cpVect | anchor2, | ||
| [toPulleyWorldAnchor] cpVect | anchor3a, | ||
| [fromPulleyWorldAnchor] cpVect | anchor3b, | ||
| [ratio] cpFloat | ratio | ||
| ) | [virtual] |
Add a pulley between two bodies
| cpConstraint* SpaceManager::addRatchetToBody:fromBody:phase:rachet: | ( | cpBody * | toBody, |
| [fromBody] cpBody * | fromBody, | ||
| [phase] cpFloat | phase, | ||
| [rachet] cpFloat | ratchet | ||
| ) | [virtual] |
Add a ratchet between two bodies
| cpConstraint* SpaceManager::addRatchetToBody:phase:rachet: | ( | cpBody * | toBody, |
| [phase] cpFloat | phase, | ||
| [rachet] cpFloat | ratchet | ||
| ) | [virtual] |
Add a ratchet to a body
| cpShape* SpaceManager::addRectAt:mass:width:height:rotation: | ( | cpVect | pos, |
| [mass] cpFloat | mass, | ||
| [width] cpFloat | width, | ||
| [height] cpFloat | height, | ||
| [rotation] cpFloat | r | ||
| ) | [virtual] |
add a rectangle shape
| cpShape* SpaceManager::addRectToBody:width:height:rotation: | ( | cpBody * | body, |
| [width] cpFloat | width, | ||
| [height] cpFloat | height, | ||
| [rotation] cpFloat | r | ||
| ) | [virtual] |
add a rectangle shape to existing body
| cpShape* SpaceManager::addRectToBody:width:height:rotation:offset: | ( | cpBody * | body, |
| [width] cpFloat | width, | ||
| [height] cpFloat | height, | ||
| [rotation] cpFloat | r, | ||
| [offset] CGPoint | offset | ||
| ) | [virtual] |
add a rectangle shape to existing body, with offset
| cpConstraint* SpaceManager::addRotaryLimitToBody:fromBody:min:max: | ( | cpBody * | toBody, |
| [fromBody] cpBody * | fromBody, | ||
| [min] cpFloat | min, | ||
| [max] cpFloat | max | ||
| ) | [virtual] |
Specify a min and a max a body can rotate relative to another body
| cpConstraint* SpaceManager::addRotaryLimitToBody:min:max: | ( | cpBody * | toBody, |
| [min] cpFloat | min, | ||
| [max] cpFloat | max | ||
| ) | [virtual] |
Specify a min and a max a body can rotate
| cpConstraint* SpaceManager::addRotarySpringToBody:fromBody:restAngle:stiffness:damping: | ( | cpBody * | toBody, |
| [fromBody] cpBody * | fromBody, | ||
| [restAngle] cpFloat | restAngle, | ||
| [stiffness] cpFloat | stiff, | ||
| [damping] cpFloat | damp | ||
| ) | [virtual] |
Add a rotary spring between two bodies
| cpConstraint* SpaceManager::addRotarySpringToBody:restAngle:stiffness:damping: | ( | cpBody * | toBody, |
| [restAngle] cpFloat | restAngle, | ||
| [stiffness] cpFloat | stiff, | ||
| [damping] cpFloat | damp | ||
| ) | [virtual] |
Add a rotary spring to a body
| void SpaceManager::addShape: | ( | cpShape * | shape | ) | [virtual] |
Manually add a shape to the space
| cpConstraint* SpaceManager::addSlideToBody:fromBody:minLength:maxLength: | ( | cpBody * | toBody, |
| [fromBody] cpBody * | fromBody, | ||
| [minLength] cpFloat | min, | ||
| [maxLength] cpFloat | max | ||
| ) | [virtual] |
Add a sliding joint between two bodies
| cpConstraint* SpaceManager::addSlideToBody:fromBody:toBodyAnchor:fromBodyAnchor:minLength:maxLength: | ( | cpBody * | toBody, |
| [fromBody] cpBody * | fromBody, | ||
| [toBodyAnchor] cpVect | anchr1, | ||
| [fromBodyAnchor] cpVect | anchr2, | ||
| [minLength] cpFloat | min, | ||
| [maxLength] cpFloat | max | ||
| ) | [virtual] |
Add a sliding joint between two bodies
| cpConstraint* SpaceManager::addSpringToBody:fromBody:restLength:stiffness:damping: | ( | cpBody * | toBody, |
| [fromBody] cpBody * | fromBody, | ||
| [restLength] cpFloat | rest, | ||
| [stiffness] cpFloat | stiff, | ||
| [damping] cpFloat | damp | ||
| ) | [virtual] |
Add a spring to two bodies at the body anchor points
| cpConstraint* SpaceManager::addSpringToBody:fromBody:stiffness: | ( | cpBody * | toBody, |
| [fromBody] cpBody * | fromBody, | ||
| [stiffness] cpFloat | stiff | ||
| ) | [virtual] |
Add a spring to two bodies at the body anchor points
| cpConstraint* SpaceManager::addSpringToBody:fromBody:toBodyAnchor:fromBodyAnchor:restLength:stiffness:damping: | ( | cpBody * | toBody, |
| [fromBody] cpBody * | fromBody, | ||
| [toBodyAnchor] cpVect | anchr1, | ||
| [fromBodyAnchor] cpVect | anchr2, | ||
| [restLength] cpFloat | rest, | ||
| [stiffness] cpFloat | stiff, | ||
| [damping] cpFloat | damp | ||
| ) | [virtual] |
Add a spring to two bodies at the body anchor points
| void SpaceManager::applyLinearExplosionAt:radius:maxForce: | ( | cpVect | at, |
| [radius] cpFloat | radius, | ||
| [maxForce] cpFloat | maxForce | ||
| ) | [virtual] |
Explosion, applied linear force to objects within radius
| void SpaceManager::applyLinearExplosionAt:radius:maxForce:layers:group: | ( | cpVect | at, |
| [radius] cpFloat | radius, | ||
| [maxForce] cpFloat | maxForce, | ||
| [layers] cpLayers | layers, | ||
| [group] cpGroup | group | ||
| ) | [virtual] |
Explosion, applied linear force to objects within radius given a group and layer(s)
| void SpaceManager::combineShapes: | ( | cpShape * | shape, |
| [,] | NS_REQUIRES_NIL_TERMINATION | ||
| ) | [virtual] |
Combine two shapes together by combining their bodies into one
| NSArray* SpaceManager::fragmentCircle:piecesNum:eachMass: | ( | cpCircleShape * | circle, |
| [piecesNum] int | pieces, | ||
| [eachMass] float | mass | ||
| ) | [virtual] |
This will take a circle and split it into the number of pieces you specify,
| NSArray* SpaceManager::fragmentRect:rowPiecesNum:colPiecesNum:eachMass: | ( | cpPolyShape * | poly, |
| [rowPiecesNum] int | rows, | ||
| [colPiecesNum] int | cols, | ||
| [eachMass] float | mass | ||
| ) | [virtual] |
This will take a rect and split it into the number of pieces (Rows x Cols) you specify,
| NSArray* SpaceManager::fragmentSegment:piecesNum:eachMass: | ( | cpSegmentShape * | segment, |
| [piecesNum] int | pieces, | ||
| [eachMass] float | mass | ||
| ) | [virtual] |
This will take a segment and split it into the number of pieces you specify,
| NSArray* SpaceManager::fragmentShape:piecesNum:eachMass: | ( | cpShape * | shape, |
| [piecesNum] int | pieces, | ||
| [eachMass] float | mass | ||
| ) | [virtual] |
This will take a shape (any) and split it into the number of pieces you specify,
| NSArray* SpaceManager::getConstraints | ( | ) | [virtual] |
Will return an array of NSValues that point to the cpConstraints
| NSArray* SpaceManager::getConstraintsOnBody: | ( | cpBody * | body | ) | [virtual] |
Will return an array of NSValues that point to the cpConstraints on given body
| cpSegmentQueryInfo SpaceManager::getInfoFromRayCastSegment:end: | ( | cpVect | start, |
| [end] cpVect | end | ||
| ) | [virtual] |
see getInfoFromRayCastSegment:end:layers:group:
| cpSegmentQueryInfo SpaceManager::getInfoFromRayCastSegment:end:layers:group: | ( | cpVect | start, |
| [end] cpVect | end, | ||
| [layers] cpLayers | layers, | ||
| [group] cpGroup | group | ||
| ) | [virtual] |
Return the info on the first shape hit by the given raycast
| NSArray* SpaceManager::getInfosFromRayCastSegment:end: | ( | cpVect | start, |
| [end] cpVect | end | ||
| ) | [virtual] |
see getInfosFromRayCastSegment:end:layers:group:
| NSArray* SpaceManager::getInfosFromRayCastSegment:end:layers:group: | ( | cpVect | start, |
| [end] cpVect | end, | ||
| [layers] cpLayers | layers, | ||
| [group] cpGroup | group | ||
| ) | [virtual] |
Return an array of NSValues with a pointer to a cpSegmentQueryInfo, this array will clean up the infos when released
| cpShape* SpaceManager::getShapeAt: | ( | cpVect | pos | ) | [virtual] |
Retrieve the first shape found at this position
| cpShape* SpaceManager::getShapeAt:layers:group: | ( | cpVect | pos, |
| [layers] cpLayers | layers, | ||
| [group] cpLayers | group | ||
| ) | [virtual] |
Retrieve the first shape found at this position matching layers and group
| cpShape* SpaceManager::getShapeFromRayCastSegment:end: | ( | cpVect | start, |
| [end] cpVect | end | ||
| ) | [virtual] |
see getShapeFromRayCastSegment:end:layers:group:
| cpShape* SpaceManager::getShapeFromRayCastSegment:end:layers:group: | ( | cpVect | start, |
| [end] cpVect | end, | ||
| [layers] cpLayers | layers, | ||
| [group] cpGroup | group | ||
| ) | [virtual] |
Return first shape hit by the given raycast
| NSArray* SpaceManager::getShapesAt: | ( | cpVect | pos | ) | [virtual] |
| NSArray* SpaceManager::getShapesAt:layers:group: | ( | cpVect | pos, |
| [layers] cpLayers | layers, | ||
| [group] cpLayers | group | ||
| ) | [virtual] |
Given a point, return an array of NSValues with a pointer to a cpShape
| NSArray* SpaceManager::getShapesAt:radius: | ( | cpVect | pos, |
| [radius] float | radius | ||
| ) | [virtual] |
| NSArray* SpaceManager::getShapesAt:radius:layers:group: | ( | cpVect | pos, |
| [radius] float | radius, | ||
| [layers] cpLayers | layers, | ||
| [group] cpLayers | group | ||
| ) | [virtual] |
Given a point and a radius, return an array of NSValues with a pointer to a cpShape
| NSArray* SpaceManager::getShapesFromRayCastSegment:end: | ( | cpVect | start, |
| [end] cpVect | end | ||
| ) | [virtual] |
see getShapesFromRayCastSegment:end:layers:group:
| NSArray* SpaceManager::getShapesFromRayCastSegment:end:layers:group: | ( | cpVect | start, |
| [end] cpVect | end, | ||
| [layers] cpLayers | layers, | ||
| [group] cpGroup | group | ||
| ) | [virtual] |
Return an array of NSValues with a pointer to a cpShape that intersects the raycast
| void SpaceManager::ignoreCollionBetweenType:otherType: | ( | unsigned int | type1, |
| [otherType] unsigned int | type2 | ||
| ) | [virtual] |
Unique Collision: will ignore the effects a collsion between types
| id SpaceManager::initWithSize:count: | ( | int | size, |
| [count] int | count | ||
| ) | [virtual] |
Initialization method
| size | The average size of shapes in space |
| count | The expected number of shapes in a space (larger is better) |
| BOOL SpaceManager::isBodyShared: | ( | cpBody * | body | ) | [virtual] |
Check is body belongs to more than one shape
| BOOL SpaceManager::isPersistentContactOnShape:contactShape: | ( | cpShape * | shape, |
| [contactShape] cpShape * | shape2 | ||
| ) | [virtual] |
Queries the space as to whether these two shapes are in persistent contact
| BOOL SpaceManager::loadSpaceFromPath:delegate: | ( | NSString * | path, |
| [delegate] NSObject< SpaceManagerSerializeDelegate > * | delegate | ||
| ) | [virtual] |
load a cpSerializer file from a file (path), delegate can be nil
| BOOL SpaceManager::loadSpaceFromUserDocs:delegate: | ( | NSString * | file, |
| [delegate] NSObject< SpaceManagerSerializeDelegate > * | delegate | ||
| ) | [virtual] |
load a cpSerializer file from a user docs file, delegate can be nil
| cpShape* SpaceManager::morphShapeToActive:mass: | ( | cpShape * | shape, |
| [mass] cpFloat | mass | ||
| ) | [virtual] |
This will force a shape active and give it the given mass
| cpShape* SpaceManager::morphShapeToKinematic: | ( | cpShape * | shape | ) | [virtual] |
This will force a shape to be kinematic (body will not simulate)
| cpShape* SpaceManager::morphShapeToStatic: | ( | cpShape * | shape | ) | [virtual] |
This will force a shape into a static shape
| void SpaceManager::offsetShape:offset: | ( | cpShape * | shape, |
| [offset] cpVect | offset | ||
| ) | [virtual] |
Offset shape from body using (circle:center, segment:endpoints, poly:vertices)
| cpArbiter* SpaceManager::persistentContactInfoOnShape: | ( | cpShape * | shape | ) | [virtual] |
Queries the space as to whether this shape has a persistent contact, returns the first arbiter info
| NSArray* SpaceManager::persistentContactInfosOnShape: | ( | cpShape * | shape | ) | [virtual] |
Queries the space as to whether this shape has a persistent contact, returns the all arbiters
| cpShape* SpaceManager::persistentContactOnShape: | ( | cpShape * | shape | ) | [virtual] |
Queries the space as to whether this shape has ANY persistent contact, It will return the first shape it finds or NULL if nothing is found
| void SpaceManager::rehashActiveShapes | ( | ) | [virtual] |
Use if you need to call getShapes before you've actually started simulating
| void SpaceManager::rehashShape: | ( | cpShape * | shape | ) | [virtual] |
Use to only rehash one shape
| void SpaceManager::rehashStaticShapes | ( | ) | [virtual] |
Use if you move static shapes during simulation
| void SpaceManager::removeAndFreeBody: | ( | cpBody * | body | ) | [virtual] |
Use when removing & freeing a body
| void SpaceManager::removeAndFreeConstraint: | ( | cpConstraint * | constraint | ) | [virtual] |
This will remove and free the constraint
| void SpaceManager::removeAndFreeConstraintsOnBody: | ( | cpBody * | body | ) | [virtual] |
This will calculate all constraints on a body and remove & free them
| void SpaceManager::removeAndFreeShape: | ( | cpShape * | shape | ) | [virtual] |
Use when removing & freeing a shape AND it's body if the body is not used by other shapes
| void SpaceManager::removeBody: | ( | cpBody * | body | ) | [virtual] |
Use when removing a body, will pass ownership to caller
| void SpaceManager::removeCollisionCallbackBetweenType:otherType: | ( | unsigned int | type1, |
| [otherType] unsigned int | type2 | ||
| ) | [virtual] |
Unregister a collision callback between types
| cpConstraint* SpaceManager::removeConstraint: | ( | cpConstraint * | constraint | ) | [virtual] |
Use when removing constraints, ownership is given to caller
| cpShape* SpaceManager::removeShape: | ( | cpShape * | shape | ) | [virtual] |
Use when removing a shape, will pass ownership to caller
| BOOL SpaceManager::saveSpaceToPath:delegate: | ( | NSString * | path, |
| [delegate] NSObject< SpaceManagerSerializeDelegate > * | delegate | ||
| ) | [virtual] |
save a cpSerializer file to a resource file (path), delegate can be nil
| BOOL SpaceManager::saveSpaceToUserDocs:delegate: | ( | NSString * | file, |
| [delegate] NSObject< SpaceManagerSerializeDelegate > * | delegate | ||
| ) | [virtual] |
save a cpSerializer file to a user docs file, delegate can be nil
| id SpaceManager::spaceManager | ( | ) | [static, virtual] |
Default creation method
| id SpaceManager::spaceManagerWithSize:count: | ( | int | size, |
| [count] int | count | ||
| ) | [static, virtual] |
Creation method
| size | The average size of shapes in space |
| count | The expected number of shapes in a space (larger is better) |
| void SpaceManager::step: | ( | float | delta | ) | [virtual] |
Manually advance time within the space
BOOL SpaceManager::cleanupBodyDependencies [read, write, assign] |
Setting this to YES/TRUE will also free contraints connected to a free'd shape
cpFloat SpaceManager::constantDt [read, write, assign] |
If this is set to anything other than zero, the step routine will use its value as the dt (constant)
id<cpConstraintCleanupDelegate> SpaceManager::constraintCleanupDelegate [read, write, retain] |
This will be called from all methods that auto-free constraints dependent on bodies being freed
cpFloat SpaceManager::damping [read, write, assign] |
The damping of the space (viscousity in "air")
smgrEachFunc SpaceManager::eachFunc [read, write, assign] |
Set the iterateFunc; the default will update cocosnodes for pos and rotation
cpVect SpaceManager::gravity [read, write, assign] |
The gravity of the space
BOOL SpaceManager::isSpaceLocked [read, assign] |
Whether or not this space is internally locked
smgrIterateFunc SpaceManager::iterateFunc [read, write, assign] |
Set the iterateFunc; the function that will use "eachFunc" to sync chipmunk values
cpFloat SpaceManager::lastDt [read, assign] |
The dt value that was used in step last
BOOL SpaceManager::rehashStaticEveryStep [read, write, assign] |
If this is set to YES/TRUE then step will call iterateFunc on static shapes
If this is set to YES/TRUE then step will call rehashStatic before stepping
cpSpace* SpaceManager::space [read, assign] |
The actual chipmunk space
cpBody* SpaceManager::staticBody [read, assign] |
A staticBody for any particular reusable purpose
int SpaceManager::steps [read, write, assign] |
Number of steps (across dt) perform on each step call
cpShape * SpaceManager::topWall [read, write, assign] |
The segment shapes that form the bounds of the window


Enter this symbol "_______"(7 dashes) for a blank space
Enter question statement
Set time (seconds)
Enter correct answer


THE ICE STORM (R)
Directed by Ang Lee Running Time: 113 minutes Originally Released: September 27, 1997 (USA-wide)
Reviewed by E. Benjamin Kelsey
* * * (out of four)
"When it's cold, molecules aren't moving. Everything is clean."
These are the essential words of Mikey Carver (Elijah Wood), a young teenage boy living in 1973 New Canaan, Connecticut in THE ICE STORM. When Mikey delivers these words to a bored science class, it is unlikely that anyone realizes how much they parallel Mikey's life and the lives that surround him. His father Jim (Jamey Sheridan) is rarely seen and his mother Janey (Sigourney Weaver) is having an affair with married neighbor Ben Hood (Kevin Kline). Ben's wife Elena (Joan Allen) suspects the affair, but doesn't say anything. Meanwhile, Ben's 14-year-old daughter Wendy (Christina Ricci) continuously lures Mikey and his younger brother Sandy (Adam Hann-Byrd) into sexual explorations.
Tobey Maguire plays Paul Hood, the 16-year-old narrator of the story who also happens to be the least prevalent character. We start the film with an interesting outlook on family from Paul. He compares family to the Fantastic Four comic book, and even goes so far as to say that family is everybody's own anti-matter; something everybody will return to eventually, and the farther you go, the deeper you'll return.
THE ICE STORM is a character piece that explores a dismal time both in America, and in the individual lives portrayed in the movie. Everything parallels everything else. The young teenagers trying to discover who they are thru drugs, sex, and alcohol is really almost identical to the parents trying to figure out the purpose in their own lives using the same methods.
"When it's cold outside, the molecules aren't moving. Everything is clean."
Everything is clean because nobody will admit what's going on. Even the president is on TV denying his wrong-doings. How can you expect anything more out of a couple of suburban families riding the coattails of sexual revolution? All the sex and drugs is so obviously empty, and I think that's the point of the film. At first viewing, the entire movie might seem empty, but then why shouldn't it parallel itself? You don't get to know the characters very deeply, but I think that's because nobody in the movie knows each other either. We sadly watch two families go about their lives nearly oblivious to one another.
The acting by all is quite good, but I particularly liked Elijah Wood. He doesn't seem to be receiving as much recognition as the others, but I still found him to possess quite a real sense of being. Christina Ricci is being acclaimed for her part as the misguided teenage temptress who looks for something more to her life in the pants of every available boy. Still, I say hats off remain to Wood, Joan Allen's subtle but believable performance as a lonely, unappreciated wife, and the always excellent Kevin Kline. Tobey Maguire did a fine job, but his character which, perhaps, was the most intact, sensible person in the story, seemed a little lost. He was needed, but perhaps he should've been used more.
THE ICE STORM is being hailed by many as one of the best films of the year. I hate to say that I don't agree, but I don't. In fact, I can think of many other films that I would rank higher than this one. Even so, it is a very good film. It takes a lot of retrospect to fully appreciate it's art, but when you finally start seeing things in it that you didn't before, you start to grow even fonder of the characters and the story. Perhaps this is one to see, ponder, and then watch again with different eyes.
December 16, 1997
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


Here you can add, edit, switch and delete different projects.
You can manage multiple different ToDos with SuperProductivity. To do so you need to give your current ToDo a title and save it.


Installing Nmag using the VMware PlayerContents IntroductionVMware is a company that provides a software that emulates a virtual computer. Let's assume for simplicity that we have an existing machine with MS Windows. This is called the host machine. One needs to install the vmware software (see Installing the VMware Player) on this host machine. Once the software is installed, it can be started like any other application. Once this virtual machine software is running, it will simulate a PC environment so that one can have a second (virtual) machine running in that window. The 'virtual' hard drive of that virtual machine is realised through a (few) big files gathered in a particular directory on the hard drive of the (Windows) host machine. It is of course required to provide an operating system for the virtual machine, which could be, for example, Linux. One would then have the normal MS Windows Operating system running on the host machine, and a Linux operating system in the VMware window. (In fact, the window can be blown up to appear as a full-screen, by pressing CTRL+ALT+Return, or clicking of the maximise icon of the window.) The performance penalty of running any software in the virtual machine (rather than on a real machine of similar specification) is usually less than 10%. In other words, a simulation that takes 10 minutes in the virtual machine, is not going to be faster than 9 minutes if run natively. The nice thing about having this virtual machine is that one can continue to use one's email, word processing, web browsing and all other applications, and simultaneously have a simulation environment for micromagnetic simulations (which provides all the necessary pre and postprocessing tools). In terms of performance, the host machine should have at least 1 GB of RAM (the more the better). It currently needs about 5GB of disk space on the host machine. Installing the VMware PlayerVMware provides a multitude of different products that allow different degrees of virtualisation. Some of them are free and some have to be paid for. We try to point to exactly the right product here, and to keep things simple although VMWare is frequently changing the names of their products. If your host runs MS Windows or Linux, then you can download the free VMware Player:
If your computer is an IntelMac, there is unfortunately no version of the free VMware Player for your machine. However, if you happen to own VMware's Fusion product (or are happy to pay for it), then install VMware fusion and use this as (a more powerful) VMware player. If you computer is a PowerPC Mac, then you cannot use the Virtual Machine method. At this stage, we have installed the VMware Player. Next, we need to obtain the 'virtual machine' that we want to execute. Downloading and starting the Nmag virtual machine
When you do this the first time, the VMware Player may warn that the machine is already in use. If so, select Take ownership. It will ask you whether this virtual machine has been moved or copied. The right answer is copied. Once you have done this, the virtual machine will boot. When the kernel boot menu appears (the first line starts "GNU GRUB"), do nothing, or press return. Wait until the graphical login turns up. Using the Nmag virtual machineThe Nmag virtual machine is a Debian Linux (Lenny) installation which provides all the software required to run micromagnetic simulations with Nmag. After booting, a login screen appears. There is only one user registered. The username is nmag and the password is nmag. (The root account has the same password; should you ever need it.) The default desktop environment is Gnome. At this point, you have a complete environment to start simulations, and the guided tour in the manual is a good starting point to explore nmag. You find a link on the Desktop (show_manual.sh) which will display a local copy of the manual on your harddrive (select 'Run' after double clicking). If you want to see the examples that are discussed in the manual directly, you can go to /home/nmag/nmag-0.1/nsim/interface/nmag/manual. Each subdirectory in there corresponds to one example. Note that there are sometimes additional files in the directory that are used for automatic creation of plots in the manual, and for automatic testing (you may want to ignore those). There is a shortcut manual for this directory on the Desktop, and also in the home directory of the nmag user. First steps
Using VMware playerThe help function of the VMware Player provides a useful summary of how to use it. Note that you can switch to full-screen mode when pressing CTRL+ALT+RETURN, and that you return from full-screen mode by either pressing CTRL+ALT, or moving the mouse to the top of the screen (to get the VMPlayer menu). Frequently Asked QuestionsHow can I exchange data between the virtual machine and the host?If you want to share data with your host, then
How can I change the keyboard in the Nmag virtual machine?Log in, then go to System->Preferences->Keyboard->Layouts. Can I also use other VMware products with the Nmag Virtual machine?Yes, as far as we know. For example, if you have the VMware Work station or VMware Server, then these can run the Nmag virtual machine as well. (It may, in fact, be easier to exchange data between the host and the virtual machine with these more powerful products.) I know Debian Linux -- can I modify this system?Of course. Once you become root, you can use aptitude and all other tools to configure your debian system. This is, after all, a normal installation (even though it is executed within a virtual machine). |


moarTLS Analyzer
Analyzing page...
Alt+Click items to check if HTTPS would've worked
Copy
Clear Page


Redmi Note 8 Pro Android 10 update arrival is imminent - Gizchina.com
by Marco LancasterRedmi Note 8 Pro Android 10 update arrival is imminent
4.1 (82.86%) 7 votes
Xiaomi released the Redmi Note 8 and Redmi Note 8 Pro in late August with Android 9 Pie and a few days after, Google rolled out the Android 10 update. For that reason, fans of the recently released smartphones have been waiting for an update to bring the latest Android version. Fortunately, it seems that at least the Redmi Note 8 Pro owners will close 2019 running Android 10.
The Redmi Note 8 Pro, which codename is Begonia, has been spotted on GeekBench running Android 10. Thus giving a strong hint that Xiaomi is on the final stages to deploy the Android 10 update for that smartphone. Worth noting, that the handset which has been released with MIUI 10 is starting to receive the MIUI 11 beta update on Global markets. Unfortunately, the MIUI 11 package still runs atop of Android 9 Pie, but judging by this new leak this will change soon.
We don’t expect to see any big changes coming with Android 10. But of course, it’s good to have it in the long run. After all, the Note 8 Pro runs with a MediaTek chipset. These have been lagging behind Qualcomm’s counterparts when it comes to software updates.
The official MIUI 11 schedule states that both the Note 8 devices will receive stable MIUI 11 updates in December this year. Hopefully, these updates will be based on the latest Android release.


As per the title:
pi@emonpi /var/lib/mosquitto $ sudo service feedwriter status
Log is turned off
running
pi@emonpi /var/lib/mosquitto $ sudo service emoncms-nodes-service status
Log is turned off
stopped
starting emoncms-modes-service & then checking:
pi@emonpi /var/lib/mosquitto $ sudo service emoncms-nodes-service start
Log is turned off
Starting emoncms-nodes
pi@emonpi /var/lib/mosquitto $ sudo service emoncms-nodes-service status
Log is turned off
stopped
pi@emonpi /var/lib/mosquitto $ sudo service mosquitto status
[FAIL] mosquitto is not running ... failed!
pi@emonpi /var/lib/mosquitto $
starting mosquitto & then checking:
pi@emonpi /var/lib/mosquitto $ sudo service mosquitto start
[ ok ] Starting Mosquitto message broker: mosquitto.
pi@emonpi /var/lib/mosquitto $ sudo service mosquitto status
[FAIL] mosquitto is not running ... failed!
pi@emonpi /var/lib/mosquitto $
I had, on the same raspi also openhab instance (and it was working) but in order to avoid interferences I removed it from init.d startup sequence.
So the emonpi should be running without whatsoever interference
Any help is welcome
Re: Mosquitto / EmoncmsNode not running
Additionally, but I guess it is simply a consequence, I have no power reading on the emonpi lcd display.
Is there a log to be checked for mosquitto startup
Re: Mosquitto / EmoncmsNode not running
2015-09-13 11:49:42,226 INFO MQTT Connecting to MQTT Server 2015-09-13 11:49:42,239 INFO MQTT Could not connect...
2015-09-13 11:49:43,136 DEBUG RFM2Pi 48 NEW FRAME : OK 5 29 5 112 1 141 6 117 96 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (-0) 2015-09-13 11:49:43,139 DEBUG RFM2Pi 48 Timestamp :<PHONE_NUMBER>.14 2015-09-13 11:49:43,140 DEBUG RFM2Pi 48 From Node : 5
2015-09-13 11:49:43,141 DEBUG RFM2Pi 48 Values : [1309, 368, 1677, 246.93, 0, 0, 0, 0, 0, 0, 0] 2015-09-13 11:49:43,142 DEBUG RFM2Pi 48 adding frame to buffer => [1442137783, 5, 1309, 368, 1677, 246.93, 0, 0, 0, 0, 0, 0, 0] 2015-09-13 11:49:43,143 DEBUG RFM2Pi 48 Sent to channel' : ToEmonCMS 2015-09-13 11:49:43,341 INFO MQTT Connecting to MQTT Server
2015-09-13 11:49:43,360 INFO MQTT Could not connect...
2015-09-13 11:49:44,477 INFO MQTT Connecting to MQTT Server 2015-09-13 11:49:44,479 INFO MQTT Could not connect... 2015-09-13 11:49:45,594 INFO MQTT Connecting to MQTT Server
2015-09-13 11:49:45,597 INFO MQTT Could not connect...
2015-09-13 11:49:46,699 INFO MQTT Connecting to MQTT Server
2015-09-13 11:49:46,702 INFO MQTT Could not connect...
2015-09-13 11:49:47,804 INFO MQTT Connecting to MQTT Server
2015-09-13 11:49:47,807 INFO MQTT Could not connect... 2015-09-13 11:49:48,196 DEBUG RFM2Pi 49 NEW FRAME : OK 5 11 5 98 1 109 6 22 97 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (-0)
...
Re: Mosquitto / EmoncmsNode not running
Just checked that mosquitto.pid was there in /var/run hence init.d ran it.
changed it's name
restarted the service using sudo service restart mosquitto.
pi@emonpi /var/run $ sudo service mosquitto start
[ ok ] Starting Mosquitto message broker: mosquitto.
pi@emonpi /var/run $ sudo service mosquitto status
[FAIL] mosquitto is not running ... failed!
new mosquitto.pid was however written in /var/run
so I suppose either it starts & dies or the pid file is written before server launch (doh)
Re: Mosquitto / EmoncmsNode not running
I checked everything I could imagine.... help!
I see the values are read from the clamps (I can see W values in the log) but due to MQTT not working there's no pub/sub - transmission
Re: Mosquitto / EmoncmsNode not running
Up for help.
Please
Re: Mosquitto / EmoncmsNode not running
Is there any more info in emoncms.log ? it looks like "emoncms-nodes-service" isn't runnig either.
Have you looked in /var/log/syslog or /var/log/messages or any of the other log files?
rather than trawling back through the logs open a few ssh windows and "tail -f" the log files and watch them while you try and start mosquitto and/or emoncms-nodes-service in another window.
When did it work last? and what have you done to the image since then?
Were you using a stock image prior to installing openHab? was it up to date?
Have you changed any mosquitto settings? firewall settings?
It's not a straight forward or common problem so any relevant info would help us help you. You need to retrace your steps since it was working as there is a reasonable chance it is something you have done rather than an organic issue.
Paul
Re: Mosquitto / EmoncmsNode not running
Also, in /etc/mosquitto/mosquitto.conf you could set "log_dest syslog" (currently "none") and "log_mode debug" to output some logging via /var/log/syslog. don't try to set other locations as that will introduce more starting errors due to permission issues and the RO filesystem. However this may not be fruitful as the broker needs to run long enough to log something.
Paul
Re: Mosquitto / EmoncmsNode not running
Hi Paul thanks for answering first of all
Is there any more info in emoncms.log ? it looks like "emoncms-nodes-service" isn't runnig either.
I confirm that emoncms-nodes-service is not running either.
Have you looked in /var/log/syslog or /var/log/messages or any of the other lof files?
>>Yes.
rather than trawling back through the logs open a few ssh windows and "tail -f" the log files and watch them while you try and start mosquitto and/or emoncms-nodes-service in another window.
>>Good idea. syslog and message? I will start from there
When did it work last? and what have you done to the image since then?
>>Before a reboot one night. Since then the image was not touched anyway really due to the problem.
Were you using a stock image prior to installing openHab? was it up to date?
>>Yes just added samba, dnsclient and openhab. and Yes it was uptodate
Have you changed any mosquitto settings? firewall settings?
>>No for mosquitto.
>>Yes for the FW: opened ports for Samba
It's not a straight forward or common problem so any relevant info would help us help you. You need to retrace your steps since it was working as there is a reasonable chance it is something you have done rather than an organic issue.
>> Yes I understand that and am trying to trace things. It was working since a while with openhab and samba enabled.
If I cannot trace the cause I will buy a separate PI2 for openhab :-(. I hope that just putting the stock image on the SD and rebooting will fix the issue (I bought from the kickstarter launch and the sd was included in the bundle)
TX again
Paul
Re: Mosquitto / EmoncmsNode not running
While I issue
pi@emonpi ~ $ sudo service emoncms-nodes-service restart
Log is turned off
Restarting emoncms-nodes (nodes_mqtt_process.php was not running...)
pi@emonpi ~ $ sudo service emoncms-nodes-service status
Log is turned off
stopped
this is emoncms.log tail
2015-9-15 22:00:18 FEEDWRITER INFO PHPFina bytes written: 0
2015-9-15 22:01:06 MQTT INFO Starting emoncms mqtt nodes process
2015-9-15 22:01:18 FEEDWRITER INFO PHPTimeSeries bytes written: 0
2015-9-15 22:01:18 FEEDWRITER INFO PHPFina bytes written: 0
2015-9-15 22:02:18 FEEDWRITER INFO PHPTimeSeries bytes written: 0
2015-9-15 22:02:18 FEEDWRITER INFO PHPFina bytes written: 0
Re: Mosquitto / EmoncmsNode not running
Well... i bought an extra pi2
Better not mixing stuff.
Will simply the img put on the sd reset the emonpi?
Re: Mosquitto / EmoncmsNode not running
I would of at least tried with a fresh image and adding the extra stuff again before buying another Pi, it may not be a compatibility issue, maybe something wasn't quite right that a re-install would fix, they should be able to run together.
Perhaps if we were using the latest v3.1.1 standard instead of the old v3.1 it would help, or even an up to date broker. the apt-get installed mosquitto broker for Raspbian wheezy is v0.15-2 (released feb 2012 !!) latest for jessie is v1.3.4-2.(~ Aug 15) in a rapidly evolving tech 3 1/2 years is a long time.
Come on Raspbian..... Sort it out !!!!
Paul
Re: Mosquitto / EmoncmsNode not running
Latest mosquitto here:-
http://mosquitto.org/2013/01/mosquitto-debian-repository
Pretty sure I installed from there with no problem.
Regards
Ian
Re: Mosquitto / EmoncmsNode not running
Hi Ian,
Yes that method will work (now). Previously it would only give you v3.1 because the "wheezy" package was behind so to get v3.1.1 we had to use a method that downloaded the latest "jessie" version, but now that method doesn't work since the mqtt websockets now demand a dependency that is not compatible with "wheezy" and "jessie" isn't release stable on Raspbian yet despite being "current" on most other debian platforms for some months now.
But yes currently the best way to get up to date mosquitto on wheezy is via the mosquitto repo as the wheezy version has been brought up to speed.
It would be nice if we were all using the same version though and that is unlikely to happen until Raspbian get the "jessie" version of Raspbian sorted.
Paul
Re: Mosquitto / EmoncmsNode not running
Unfortunately ... time is a tyran. If I had a little more time I would have gone the way of the fresh reinstall and adding openhab etc on top.

Re: Mosquitto / EmoncmsNode not running
Infact I am sure OpenHab and EmonPi can run along without trouble.
They ran for one month.
Re: Mosquitto / EmoncmsNode not running
I finally have time to unmount the emonpi from it's location.
Q: is there no way to reset to factory defaults (fresh cleam image) without opening the case?
I mean via telnet .
Just realized (after unmounting doh) that I need to access the microsd inside (doh doh) and I miss a special screwdriver (doh doh doh)
Re: Mosquitto / EmoncmsNode not running
ok unmounted and putting on latest
Re: Mosquitto / EmoncmsNode not running
I am still having some trouble :-(
namely I do not have any feeds written.

Now this was after a clean install and not changing anything at all (just the timezone and log to emoncms server)
What is wrong??? getting mad.
Love OpenSource and open platforms but sometimes I regret it.
Re: Mosquitto / EmoncmsNode not running
Hello
I bump the trhread u p since I have done a brand new installation I suppose it should work :-(
My feedwriter process is still not working
pi@emonpi ~ $ sudo service feedwriter start
Log is turned off
Starting RPI
pi@emonpi ~ $ sudo service feedwriter status
Log is turned off
stopped
Can someone of the team advice ?
TY in advance
Re: Mosquitto / EmoncmsNode not running
I'm not overly familiar with that code but you could do a couple of checks like what does typing
ps -ef | grep feedwriter
at the command line give you?
Will the feedwriter script run manually from the command line? (may need sudo) using
php /var/www/emoncms/scripts/feedwriter.php
What exactly is your "fresh" "brand new" "clean" installation? if it is a pre-built image, which one? are you following a guide? if self-built what versions have you installed?
Paul
Re: Mosquitto / EmoncmsNode not running
no process running:
pi@emonpi ~ $ ps -ef | grep feedwriter
pi 2288 2056 0 22:39 pts/0 00:00:00 grep --color=auto feedwriter
pi@emonpi ~ $ sudo php /var/www/emoncms/scripts/feedwriter.php
Could not open input file: /var/www/emoncms/scripts/feedwriter.php
!!
ls gives:
pi@emonpi /var/www/emoncms $ ls
COPYRIGHT.txt default.settings.php index.php LICENSE.txt logconfig.xml process_settings.php route.php scripts Theme
core.php docs Lib locale.php Modules readme.md run settings.php
no php script!
I installed the image called emonSD-17Jun2015 on the SD that shipped with EmonPi.
I am surprised. because I have been really careful with shutdowns (always holding the button) so no abrupt endings...
What do you suggest?
Thank for your help once again
Re: Mosquitto / EmoncmsNode not running
I hope not rewriting the sd as I would need to unmount the whole stuff again :-(
Re: Mosquitto / EmoncmsNode not running
"pi@emonpi /var/www/emoncms $ ls
COPYRIGHT.txt default.settings.php index.php LICENSE.txt logconfig.xml process_settings.php route.php scripts Theme
core.php docs Lib locale.php Modules readme.md run settings.php
no php script!"
No but there was a "scripts" folder which is where I had expected it to be, however I just checked the repo for the emoncms included in that image and it should be in /var/www/emoncms/run for v8.5 low-write
so try sudo php /var/www/emoncms/run/feedwriter.php at the command line
and/or ls -la /var/www/emoncms/run to check it's permissions etc
Paul
Re: Mosquitto / EmoncmsNode not running
I haven't explored emonpi, but have found a bug with the feedwriter init file (as used in v9 and borrowed from emonpi) as follows;
Feedwriter does not restart on a reboot, because both feedwriter and mysql are given the same start priority - S03 in /etc/rc*.d and as feedwriter (alphabetically) comes before mysql, feedwriter starts first, resulting in the error;
...which stops feedwriter starting.
To rectify this issue, add 'mysql' to the dependency of the feedwriter init file, which you can see on this git patch, which will be offered for merge shortly.
The status of feedwriter can be checked by;
Paul
Re: Mosquitto / EmoncmsNode not running
Ok feedwriter is there in the scrips folder.
and... yep!
changing the script as in the patch did the trick!
feedwriter is now running
by the way visualizations (that did not work) are now working too
great
Thanks to all.
I suggest merging the change updating the img asap


Class Assertions
public class Assertions
extends java.lang.Object
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
Assertions.AssertionComparisonType
static class
Assertions.AssertionType
static class
Assertions.ComparativeRelationType
-
Method Summary
Modifier and Type Method Description static void
assertBrowserAttribute(org.openqa.selenium.WebDriver driver, java.lang.String browserAttribute, java.lang.String expectedValue, int assertionComparisonType, java.lang.Boolean assertionType)
Asserts browser attribute equals expectedValue if AssertionType is true, or does not equal expectedValue if AssertionType is false.static void
assertBrowserAttribute(org.openqa.selenium.WebDriver driver, java.lang.String browserAttribute, java.lang.String expectedValue, Assertions.AssertionComparisonType assertionComparisonType, Assertions.AssertionType assertionType)
Asserts browser attribute equals expectedValue if AssertionType is POSITIVE, or does not equal expectedValue if AssertionType is NEGATIVE.static void
assertComparativeRelation(java.lang.Number expectedValue, java.lang.Number actualValue, Assertions.ComparativeRelationType comparativeRelationType, Assertions.AssertionType assertionType)
Asserts that the expectedValue is related to the actualValue using the desired comparativeRelationType if AssertionType is POSITIVE, or not related if AssertionType is NEGATIVE.static void
assertComparativeRelation(java.lang.Number expectedValue, java.lang.Number actualValue, java.lang.String comparativeRelationType, java.lang.Boolean assertionType)
Asserts that the expectedValue is related to the actualValue using the desired comparativeRelationType if AssertionType is true, or not related if AssertionType is false.static void
assertElementAttribute(org.openqa.selenium.WebDriver driver, org.openqa.selenium.By elementLocator, java.lang.String elementAttribute, java.lang.String expectedValue, int assertionComparisonType, java.lang.Boolean assertionType)
Asserts webElement attribute equals expectedValue if AssertionType is true, or does not equal expectedValue if AssertionType is false.static void
assertElementAttribute(org.openqa.selenium.WebDriver driver, org.openqa.selenium.By elementLocator, java.lang.String elementAttribute, java.lang.String expectedValue, Assertions.AssertionComparisonType assertionComparisonType, Assertions.AssertionType assertionType)
Asserts webElement attribute equals expectedValue if AssertionType is POSITIVE, or does not equal expectedValue if AssertionType is NEGATIVE.static void
assertElementCSSProperty(org.openqa.selenium.WebDriver driver, org.openqa.selenium.By elementLocator, java.lang.String propertyName, java.lang.String expectedValue, int assertionComparisonType, java.lang.Boolean assertionType)
Asserts webElement CSSProperty equals expectedValue if AssertionType is true, or does not equal expectedValue if AssertionType is false.static void
assertElementCSSProperty(org.openqa.selenium.WebDriver driver, org.openqa.selenium.By elementLocator, java.lang.String propertyName, java.lang.String expectedValue, Assertions.AssertionComparisonType assertionComparisonType, Assertions.AssertionType assertionType)
Asserts webElement CSSProperty equals expectedValue if AssertionType is POSITIVE, or does not equal expectedValue if AssertionType is NEGATIVE.static void
assertElementExists(org.openqa.selenium.WebDriver driver, org.openqa.selenium.By elementLocator, Assertions.AssertionType assertionType)
Asserts that webElement found using the provided driver and locator exists if AssertionType is POSITIVE, or does not exist if AssertionType is NEGATIVE.static void
assertElementExists(org.openqa.selenium.WebDriver driver, org.openqa.selenium.By elementLocator, java.lang.Boolean assertionType)
Asserts that webElement found using the provided driver and locator exists if AssertionType is true, or does not exist if AssertionType is false.static void
assertEquals(java.lang.Object expectedValue, java.lang.Object actualValue, int assertionComparisonType, java.lang.Boolean assertionType)
Asserts that two objects are equal if AssertionType is true, or not equal if AssertionType is false.static void
assertEquals(java.lang.Object expectedValue, java.lang.Object actualValue, Assertions.AssertionComparisonType assertionComparisonType, Assertions.AssertionType assertionType)
Asserts that two objects are equal if AssertionType is POSITIVE, or not equal if AssertionType is NEGATIVE.static void
assertFileExists(java.lang.String fileFolderName, java.lang.String fileName, int numberOfRetries, Assertions.AssertionType assertionType)
Asserts that a certain file exists if AssertionType is POSITIVE, or doesn't exist if AssertionType is NEGATIVE.static void
assertFileExists(java.lang.String fileFolderName, java.lang.String fileName, int numberOfRetries, java.lang.Boolean assertionType)
Asserts that a certain file exists if AssertionType is true, or doesn't exist if AssertionType is false.static void
assertJSONFileContent(io.restassured.response.Response response, java.lang.String referenceJsonFilePath, RestActions.ComparisonType comparisonType, Assertions.AssertionType assertionType)
Asserts that the target API Response object matches the expected referenceJsonFile if AssertionType is POSITIVE, or doesn't match it if AssertionType is NEGATIVE.static void
assertJSONFileContent(io.restassured.response.Response response, java.lang.String referenceJsonFilePath, RestActions.ComparisonType comparisonType, java.lang.String jsonPathToTargetArray, Assertions.AssertionType assertionType)
Asserts that the target array extracted by parsing the API Response object matches the expected referenceJsonFile if AssertionType is POSITIVE, or doesn't match it if AssertionType is NEGATIVE.static void
assertNull(java.lang.Object object, Assertions.AssertionType assertionType)
Asserts that object is null if AssertionType is POSITIVE, or is not null if AssertionType is NEGATIVE.static void
assertNull(java.lang.Object object, java.lang.Boolean assertionType)
Asserts that object is null if AssertionType is true, or is not null if AssertionType is false.static void
assertTrue(java.lang.Boolean conditionalStatement, Assertions.AssertionType assertionType)
Asserts that the provided conditional statement evaluates to true if AssertionType is POSITIVE, or to false if AssertionType is NEGATIVE.
-
Method Details
-
assertEquals
public static void assertEquals(java.lang.Object expectedValue, java.lang.Object actualValue, int assertionComparisonType, java.lang.Boolean assertionType)Asserts that two objects are equal if AssertionType is true, or not equal if AssertionType is false.This method will be removed soon. Use
assertEquals(Object , Object , AssertionComparisonType , AssertionType)
instead.- Parameters:
expectedValue
- the expected value (test data) of this assertionactualValue
- the actual value (calculated data) of this assertionassertionComparisonType
- 1 is literalComparison, 2 is regexComparison, 3 is containsComparison, 4 is caseInsensitiveComparisonassertionType
- either 'true' for a positive assertion that the objects are equal, or 'false' for a negative assertion that the objects are not equal
-
assertEquals
public static void assertEquals(java.lang.Object expectedValue, java.lang.Object actualValue, Assertions.AssertionComparisonType assertionComparisonType, Assertions.AssertionType assertionType)Asserts that two objects are equal if AssertionType is POSITIVE, or not equal if AssertionType is NEGATIVE.- Parameters:
expectedValue
- the expected value (test data) of this assertionactualValue
- the actual value (calculated data) of this assertionassertionComparisonType
- AssertionComparisonType.LITERAL, CONTAINS, REGEX, CASE_INSENSITIVEassertionType
- AssertionType.POSITIVE, NEGATIVE
-
assertNull
public static void assertNull(java.lang.Object object, java.lang.Boolean assertionType)Asserts that object is null if AssertionType is true, or is not null if AssertionType is false.This method will be removed soon. Use
assertNull(Object , AssertionType)
instead.- Parameters:
object
- the object under testassertionType
- either 'true' for a positive assertion that the object refers to null, or 'false' for a negative assertion that the object doesn't refer to null
-
assertNull
Asserts that object is null if AssertionType is POSITIVE, or is not null if AssertionType is NEGATIVE.- Parameters:
object
- the object under testassertionType
- AssertionType.POSITIVE, NEGATIVE
-
assertElementExists
public static void assertElementExists(org.openqa.selenium.WebDriver driver, org.openqa.selenium.By elementLocator, java.lang.Boolean assertionType)Asserts that webElement found using the provided driver and locator exists if AssertionType is true, or does not exist if AssertionType is false.This method will be removed soon. Use
assertElementExists(WebDriver, By, AssertionType)
instead.- Parameters:
driver
- the current instance of Selenium webdriverelementLocator
- the locator of the webElement under test (By xpath, id, selector, name ...etc)assertionType
- either 'true' for a positive assertion that the element exists, or 'false' for a negative assertion that the element doesn't exist
-
assertElementExists
public static void assertElementExists(org.openqa.selenium.WebDriver driver, org.openqa.selenium.By elementLocator, Assertions.AssertionType assertionType)Asserts that webElement found using the provided driver and locator exists if AssertionType is POSITIVE, or does not exist if AssertionType is NEGATIVE.- Parameters:
driver
- the current instance of Selenium webdriverelementLocator
- the locator of the webElement under test (By xpath, id, selector, name ...etc)assertionType
- AssertionType.POSITIVE, NEGATIVE
-
assertElementAttribute
public static void assertElementAttribute(org.openqa.selenium.WebDriver driver, org.openqa.selenium.By elementLocator, java.lang.String elementAttribute, java.lang.String expectedValue, int assertionComparisonType, java.lang.Boolean assertionType)Asserts webElement attribute equals expectedValue if AssertionType is true, or does not equal expectedValue if AssertionType is false. Supports Text, TagName, Size, Other AttributesThis method will be removed soon. Use
assertElementAttribute(WebDriver , By , String , String , AssertionComparisonType , AssertionType)
instead.- Parameters:
driver
- the current instance of Selenium webdriverelementLocator
- the locator of the webElement under test (By xpath, id, selector, name ...etc)elementAttribute
- the desired attribute of the webElement under testexpectedValue
- the expected value (test data) of this assertionassertionComparisonType
- 1 is literalComparison, 2 is regexComparison, 3 is containsComparison, 4 is caseInsensitiveComparisonassertionType
- either 'true' for a positive assertion that the element attribute actual value matches the expected value, or 'false' for a negative assertion that the element attribute actual value doesn't match the expected value
-
assertElementAttribute
public static void assertElementAttribute(org.openqa.selenium.WebDriver driver, org.openqa.selenium.By elementLocator, java.lang.String elementAttribute, java.lang.String expectedValue, Assertions.AssertionComparisonType assertionComparisonType, Assertions.AssertionType assertionType)Asserts webElement attribute equals expectedValue if AssertionType is POSITIVE, or does not equal expectedValue if AssertionType is NEGATIVE. Supports Text, TagName, Size, Other Attributes- Parameters:
driver
- the current instance of Selenium webdriverelementLocator
- the locator of the webElement under test (By xpath, id, selector, name ...etc)elementAttribute
- the desired attribute of the webElement under testexpectedValue
- the expected value (test data) of this assertionassertionComparisonType
- AssertionComparisonType.LITERAL, CONTAINS, REGEX, CASE_INSENSITIVEassertionType
- AssertionType.POSITIVE, NEGATIVE
-
assertElementCSSProperty
public static void assertElementCSSProperty(org.openqa.selenium.WebDriver driver, org.openqa.selenium.By elementLocator, java.lang.String propertyName, java.lang.String expectedValue, int assertionComparisonType, java.lang.Boolean assertionType)Asserts webElement CSSProperty equals expectedValue if AssertionType is true, or does not equal expectedValue if AssertionType is false.This method will be removed soon. Use
assertElementCSSProperty(WebDriver, By, String, String, AssertionComparisonType, AssertionType)
instead.- Parameters:
driver
- the current instance of Selenium webdriverelementLocator
- the locator of the webElement under test (By xpath, id, selector, name ...etc)propertyName
- the target CSS property of the webElement under testexpectedValue
- the expected value (test data) of this assertionassertionComparisonType
- 1 is literalComparison, 2 is regexComparison, 3 is containsComparison, 4 is caseInsensitiveComparisonassertionType
- either 'true' for a positive assertion that the element CSSProperty actual value matches the expected value, or 'false' for a negative assertion that the element CSSProperty actual value doesn't match the expected value
-
assertElementCSSProperty
public static void assertElementCSSProperty(org.openqa.selenium.WebDriver driver, org.openqa.selenium.By elementLocator, java.lang.String propertyName, java.lang.String expectedValue, Assertions.AssertionComparisonType assertionComparisonType, Assertions.AssertionType assertionType)Asserts webElement CSSProperty equals expectedValue if AssertionType is POSITIVE, or does not equal expectedValue if AssertionType is NEGATIVE.- Parameters:
driver
- the current instance of Selenium webdriverelementLocator
- the locator of the webElement under test (By xpath, id, selector, name ...etc)propertyName
- the target CSS property of the webElement under testexpectedValue
- the expected value (test data) of this assertionassertionComparisonType
- AssertionComparisonType.LITERAL, CONTAINS, REGEX, CASE_INSENSITIVEassertionType
- AssertionType.POSITIVE, NEGATIVE
-
assertBrowserAttribute
public static void assertBrowserAttribute(org.openqa.selenium.WebDriver driver, java.lang.String browserAttribute, java.lang.String expectedValue, int assertionComparisonType, java.lang.Boolean assertionType)Asserts browser attribute equals expectedValue if AssertionType is true, or does not equal expectedValue if AssertionType is false. Supports CurrentUrl, PageSource, Title, WindowHandle, WindowPosition, WindowSizeThis method will be removed soon. Use
assertBrowserAttribute(WebDriver , String , String , AssertionComparisonType , AssertionType )
instead.- Parameters:
driver
- the current instance of Selenium webdriverbrowserAttribute
- the desired attribute of the browser window under testexpectedValue
- the expected value (test data) of this assertionassertionComparisonType
- 1 is literalComparison, 2 is regexComparison, 3 is containsComparison, 4 is caseInsensitiveComparisonassertionType
- either 'true' for a positive assertion that the browser attribute actual value matches the expected value, or 'false' for a negative assertion that the browser attribute actual value doesn't match the expected value
-
assertBrowserAttribute
public static void assertBrowserAttribute(org.openqa.selenium.WebDriver driver, java.lang.String browserAttribute, java.lang.String expectedValue, Assertions.AssertionComparisonType assertionComparisonType, Assertions.AssertionType assertionType)Asserts browser attribute equals expectedValue if AssertionType is POSITIVE, or does not equal expectedValue if AssertionType is NEGATIVE. Supports CurrentUrl, PageSource, Title, WindowHandle, WindowPosition, WindowSize *This method will be removed soon. Use
assertBrowserAttribute(WebDriver , String , String , AssertionComparisonType , AssertionType )
instead.- Parameters:
driver
- the current instance of Selenium webdriverbrowserAttribute
- the desired attribute of the browser window under testexpectedValue
- the expected value (test data) of this assertionassertionComparisonType
- AssertionComparisonType.LITERAL, CONTAINS, REGEX, CASE_INSENSITIVEassertionType
- AssertionType.POSITIVE, NEGATIVE
-
assertComparativeRelation
public static void assertComparativeRelation(java.lang.Number expectedValue, java.lang.Number actualValue, java.lang.String comparativeRelationType, java.lang.Boolean assertionType)Asserts that the expectedValue is related to the actualValue using the desired comparativeRelationType if AssertionType is true, or not related if AssertionType is false.This method will be removed soon. Use
assertComparativeRelation(Number, Number, ComparativeRelationType, AssertionType)
instead.- Parameters:
expectedValue
- the expected value (test data) of this assertionactualValue
- the actual value (calculated data) of this assertioncomparativeRelationType
- accepts standard java Equality, Relational, and Conditional Operators, except [not equal to]: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.htmlassertionType
- either 'true' for a positive assertion that the expectedValue is related to the actualValue using the desired comparativeRelationType, or 'false' for a negative assertion that the expectedValue is not related to the actualValue using the desired comparativeRelationType
-
assertComparativeRelation
public static void assertComparativeRelation(java.lang.Number expectedValue, java.lang.Number actualValue, Assertions.ComparativeRelationType comparativeRelationType, Assertions.AssertionType assertionType)Asserts that the expectedValue is related to the actualValue using the desired comparativeRelationType if AssertionType is POSITIVE, or not related if AssertionType is NEGATIVE.- Parameters:
expectedValue
- the expected value (test data) of this assertionactualValue
- the actual value (calculated data) of this assertioncomparativeRelationType
- assertComparativeRelation.GREATER_THAN, GREATER_THAN_OR_EQUALS, LESS_THAN, LESS_THAN_OR_EQUALS, EQUALSassertionType
- AssertionType.POSITIVE, NEGATIVE
-
assertFileExists
public static void assertFileExists(java.lang.String fileFolderName, java.lang.String fileName, int numberOfRetries, java.lang.Boolean assertionType)Asserts that a certain file exists if AssertionType is true, or doesn't exist if AssertionType is false.This method will be removed soon. Use
assertFileExists(String , String , int , AssertionType )
instead.- Parameters:
fileFolderName
- The location of the folder that contains the target file, relative to the project's root folder, ending with a /fileName
- The name of the target file (including its extension if any)numberOfRetries
- number of times to try to find the file, given that each retry is separated by a 500 millisecond wait timeassertionType
- either 'true' for a positive assertion that the file exists, or 'false' for a negative assertion that the file doesn't exist
-
assertFileExists
public static void assertFileExists(java.lang.String fileFolderName, java.lang.String fileName, int numberOfRetries, Assertions.AssertionType assertionType)Asserts that a certain file exists if AssertionType is POSITIVE, or doesn't exist if AssertionType is NEGATIVE.- Parameters:
fileFolderName
- The location of the folder that contains the target file, relative to the project's root folder, ending with a /fileName
- The name of the target file (including its extension if any)numberOfRetries
- number of times to try to find the file, given that each retry is separated by a 500 millisecond wait timeassertionType
- AssertionType.POSITIVE, NEGATIVE
-
assertTrue
public static void assertTrue(java.lang.Boolean conditionalStatement, Assertions.AssertionType assertionType)Asserts that the provided conditional statement evaluates to true if AssertionType is POSITIVE, or to false if AssertionType is NEGATIVE.- Parameters:
conditionalStatement
- the statement that will be evaluated to see if it matches the expected resultassertionType
- AssertionType.POSITIVE, NEGATIVE
-
assertJSONFileContent
public static void assertJSONFileContent(io.restassured.response.Response response, java.lang.String referenceJsonFilePath, RestActions.ComparisonType comparisonType, Assertions.AssertionType assertionType)Asserts that the target API Response object matches the expected referenceJsonFile if AssertionType is POSITIVE, or doesn't match it if AssertionType is NEGATIVE.- Parameters:
response
- the full response object returned by performRequest method.referenceJsonFilePath
- the full absolute path to the test data file that will be used as a reference for this comparisoncomparisonType
- ComparisonType.EQUALS, CONTAINS, MATCHES, EQUALS_STRICT; Note that MATCHES ignores the content ordering inside the JSONassertionType
- AssertionType.POSITIVE, NEGATIVE
-
assertJSONFileContent
public static void assertJSONFileContent(io.restassured.response.Response response, java.lang.String referenceJsonFilePath, RestActions.ComparisonType comparisonType, java.lang.String jsonPathToTargetArray, Assertions.AssertionType assertionType)Asserts that the target array extracted by parsing the API Response object matches the expected referenceJsonFile if AssertionType is POSITIVE, or doesn't match it if AssertionType is NEGATIVE.- Parameters:
response
- the full response object returned by performRequest method.referenceJsonFilePath
- the full absolute path to the test data file that will be used as a reference for this comparisoncomparisonType
- ComparisonType.EQUALS, CONTAINS, MATCHES, EQUALS_STRICT; Note that MATCHES ignores the content ordering inside the JSONjsonPathToTargetArray
- a jsonpath that will be parsed to point to the target JSON ArrayassertionType
- AssertionType.POSITIVE, NEGATIVE
-


|
Bullet Collision Detection & Physics Library
|
#include <btSoftBody.h>
Public Attributes | |
| Material * | m_material |
| Public Attributes inherited from btSoftBody::Element | |
| void * | m_tag |
Additional Inherited Members | |
| Public Member Functions inherited from btSoftBody::Element | |
| Element () | |
Definition at line 244 of file btSoftBody.h.
| Material* btSoftBody::Feature::m_material |
Definition at line 246 of file btSoftBody.h.


/**
* @author rintoj (Rinto Jose)
* @license The MIT License (MIT)
*
* Copyright (c) 2016 rintoj
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the " Software "), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED " AS IS ", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
// imports
var fs = require("fs");
var merge = require("merge");
var objectPath = require("object-path");
var PropertiesReader = require('properties-reader');
function processValue(value) {
Iif (/^{.+}$/.test((value + "").trim())) {
return JSON.parse(value);
}
return value;
}
/**
* Read properties and product the nested object structure.
*
* @param propertiesFile Location to the properties file
* @returns An object with nested properties
*/
module.exports = function propertiesReader(propertiesFile) {
// application properites
var properties = {
load: function(file) {
var self = this;
Iif (!file) {
return self;
}
var extension = file.split(".").slice(-1).join();
// load '.json' file
if (extension !== "properties") {
var content = JSON.parse(fs.readFileSync(file, 'utf-8'));
self = merge.recursive(self, content);
return self;
}
// read '.properties' file
var reader = PropertiesReader(file)
reader.each(function(key, value) {
Iif (key === "load") {
throw "Configuration can not have a key 'load'!";
}
objectPath.set(self, key, processValue(reader.get(key)));
});
return self;
}
};
// return the object structure
return properties.load(propertiesFile);
}; |


About me...
- I'm Jacob Clark
- A Senior Web Developer in Knowledge and Learning
- Based in MediaCityUK, Salford
- Passionate about modular, self containing components and the cloud (microservices)
Our team...
We have:
- 1 Product Manager
- 1 Project Manager
- 1 Business Analyist
- 1 Development Lead
- 6 Developers
- 2 Testers
- 2 Apprentices/Graduates
About K&L
We have a large product suite, including:
- Bitesize
- iWonder
- Microbit
- Food
- Genre Portals (Arts, Earth, Science, History, etc)
Audience reach...
- Bitesize reaches over 2m unique browsers per week on the lead up to exams!
- Over 80% of 14-16 year olds use Bitesize to prepare for final exams!
- Our most popular guide `what’s the right diet for me?` reached over 1m users in a single week when it was published!
Our products technically...
- In the cloud on Amazon Web Services
- Responsive and mobile first
- Test and Behaviour driven
- Continously Delivered
- Automated testing throughout continous intergration
Thanks!
I’ll be around in the exhibition later
Catch me on Twitter @imjacobclark
Also on GitHub @imjacobclark