This page will instruct you on how to make object types in Pikifen. These include types of enemies, types of Pikmin, etc.
General idea
In order for the engine to detect a type of object, it will check the Game_data/Types
folder. Inside are several folders, one for each category of object (enemies, gates, etc.). Inside each category are folders for the different types of objects (the different types of enemies, different types of leaders, etc.). Finally, inside those are some data file with data about how the object works, its animations, or its script.
Creating a new object type
To create a new object type, make a folder for it in the right category, and create an empty data file inside called Data.txt
. Inside, you will write all of the object's properties, like the name, its movement speed, etc. These take on the form of property = value
, and there is one property per line. So for instance, to name Louie's object type, you'd have the line name = Louie
in the file.
Some properties are mandatory, some are optional, some apply to all object types, and some only apply to certain categories of object type. You can get a list of properties that apply to all object types in the following sub-sections of this page, and then check what properties exist for that category by visiting the category's article from the list. After you're done setting the properties, you must create the animations for the object type; use the animation tutorial for this. Finally, some object types will also need a script to run. To figure out if your object will need a script or not, check the list of categories and if it does, read the object script tutorial to learn what you need to do.
After you have done that, you can boot up the engine, go to the area editor, place your new object in an area, hit play, and watch it in action!
Naturally, instead of creating your own files from scratch, you may copy and paste an existing object's files and simply edit those.
Mandatory properties
The following properties must exist, regardless of category.
name
: Name of the object type. e.g. "Olimar", "Red Pikmin", "Cloaking Burrow-nit".
Recommended properties
The following are properties that you really should have, but the engine can run without them.
description
: A small blurb-like description of this object type. This should be written from a gameplay perspective, not a content-making perspective, so describe the object how it works in-game, not how it should be used in areas or with other objects. This description is useful for whoever reads the data file, but also shows up in the area editor, and in the case of Pikmin types, the help page of the in-game pause menu. You can use\n
to cause a line break and start a new line. To write a literal backslash, you will need to type\\
.can_hunt
: This object will only want to hunt down objects of this target type. i.e. it will only consider those an "opponent" (provided they're also in an opposing team). Seetarget_type
below for more information. Defaults to "player" and "enemy".can_hurt
: This object can only cause damage to objects of this target type (provided they're also in an opposing team). Seetarget_type
below for more information. Defaults to "player", "enemy", and "fragile".height
: Object's height. This doesn't need to be very specific. For reference, leaders are usually 32, Pikmin are usually 24. Defaults to 0.max_health
: The object's top health. Use this responsibly, since players are used to seeing specific enemies with specific health amounts and plan accordingly, and if you change this their plans will be foiled. For reference, leaders have 2000, and something like a Red Bulborb has 750. Defaults to 100.move_speed
: Standard movement speed (in pixels per second). For reference, leaders move at 130. Defaults to 0.pushable
:true
if this object can be pushed out of the way by other objects.false
otherwise. Defaults to false.pushes
:true
if this object can push "pushable" objects out of the way.false
otherwise. Defaults to false. See also:pushes_softly
.radius
: The object's size, represented by the circle's radius (in pixels). Leaders are 32 pixels wide, so their radius is 16. Pikmin have a radius of 10. Defaults to 0.rotation_speed
: How fast the object turns when moving, in degrees per second. For reference, leaders use around 360, Pikmin use around 630, and a Red Bulborb uses around 114. Defaults to 630.-
target_type
: What type of "target" the object is. This determines which objects will hunt it, and which objects can attack it. Possible values are as follows, along with what each type is meant to represent. Defaults to "none".none
: Cannot be damaged or hunted down.player
: Leaders, Pikmin, and anything belonging to the "heroes" of the player's side.enemy
: Enemies.weak_plain_obstacle
: Weaker objects that should be damaged by many things, like leaders, Pikmin, or explosions. e.g. egg.strong_plain_obstacle
: Stronger objects that should be damaged by beefy hits, like Pikmin or explosions. e.g. gas pipe.pikmin_obstacle
: An object only Pikmin should harm. e.g. electric gate.explodable
: An object that should only be hurt by an explosion. e.g. reinforced wall.explodable_pikmin_obstacle
: An object that should be hurt by Pikmin or explosives only. e.g. Burgeoning Spiderwort.fragile
: A fragile object that should be harmed by even the gentlest smack. e.g. bomb rock.
-
team
: Sets the object's team. Objects in the same team will not hunt or harm each other. Default depends on the object's category. Valid values are:none
: Does not belong to a team.player_X
: Belongs to player 1, 2, 3, or 4's team (replace the X with a number). Usually used for leaders and Pikmin.enemy_X
: Belongs to the enemy team 1, 2, 3, or 4 (replace the X with a number).obstacle
: Obstacle team.other
: Team for whatever else.
Optional properties
For all categories of object type, you may set these properties, but they will still work if you don't.
acceleration
: How quickly the object reaches top speed when moving. This is in units per second per second. Defaults to 400.can_block_paths
: If set totrue
, this object blocks objects following the path it is on, like a closed gate or an unbuilt bridge. If the object finishes dying, it will stop blocking, though it can also start and stop blocking at will according to its script. Defaults to false.can_free_move
: If true, this object can move in any direction freely, without having to first turn there. It will also not face towards the direction it is going. Defaults to false.can_walk_on_others
: If true, this object can walk on top of objects that have the "walkable" property. Defaults to false.casts_shadow
: If set tofalse
, the object won't cast a shadow on the ground. Defaults to true.custom_carry_spots
: Normally Pikmin place themselves around the object in a ring pattern when carrying it. With this you can specify custom positions. This is a list of relative coordinates separated by semicolon. Example:128 0; 100 50; -30 -30
.custom_category_name
: The categories that object types belong to have names that describe how they work fairly well, but aren't very obvious otherwise. To make life easier for people trying to search for this object type inside an editor, you can use a custom category name.default_vulnerability
: For every source of damage not specified in the vulnerabilities, the damage the object receives is multiplied by this amount. Defaults to 1.has_group
: If true, this object can have a group of other objects (usually a group of Pikmin) following behind it, likely via thefollow_link_as_leader
script variable. Without this property, it can't have other objects following it.health_regen
: Passive health regeneration rate, in HP per second. Defaults to 0.itch_damage
: If an enemy has taken this much damage, it will be considered "itchy". With this, you can listen to theon_itch
event, and when it triggers, make the enemy shake the Pikmin off. Handling this event automatically resets the amount of damage, making it possible for the enemy to be itchy again, next time it takes this amount of damage. Setting this to something like 10% or 20% of the max health is usually the way to go. Defaults to 0.itch_time
: In order for the enemy to not shake over and over, if you keep damaging it, you can also specify a minimum time requirement between itches, in seconds. Defaults to 0.main_color
: A color to represent the object by. The format isR G B
(values range from 0 to 255). Defaults to black.max_carriers
: Maximum number of Pikmin that can carry this object, when it is made carriable. Defaults to 0.pushes_softly
: If true, and if this object can push others, then the push is fairly soft, allowing leaders and Pikmin to squeeze through if they persist for long enough. Defaults to false.pushes_with_hitboxes
: If true, this object pushes with its (normal or attack) hitboxes, instead of pushing using its object's center and radius. Defaults to false.rectangular_dimensions
: If this object is meant to have rectangular collision, specify the rectangle's dimensions here, in the format<width> <height>
. This is useful for objects like gates. Defaults to no rectangular dimensions.show_health
: If set tofalse
, the object's health wheel will not appear on top of it. Defaults to true.spike_damage
: If this object is meant to cause spike damage, specify the spike damage type's name here. Defaults to none.spike_damage_vulnerabilities
: Normally, objects hit by a spike damage attack will receive the damage specified by the attack's type. If you want this mob type to take more or less damage instead, or even receive a status effect, you can specify it here. This property is a block, and the format is the same as the regular damage vulnerabilities property. Defaults to not set.status_vulnerabilities
: If you want this mob type to take more or less damage from a status effect's health changing effect, or even receive a different status effect instead, you can specify it here. This property is a block, and the format is the same as the regular damage vulnerabilities property, without the third word. Defaults to not set.terrain_radius
: The object's radius for collisions against the terrain. Useful if you want collisions between your object and other objects to be tight, but you also want your object to not get too close to walls so it doesn't visually appear inside them. Any negative number will make the engine use the same radius as theradius
property. This property is only used while the object is alive, so a carriable corpse will use the regular radius property. Defaults to -1.territory_radius
: How far away from the spawn point must the enemy be before being considered "far from home". For reference, a Red Bulborb has this set to 500. Defaults to 0.walkable
: Iftrue
, this object can be walked on top of by other objects. Other objects will be able to mount it if they fall on it from above, or if they are on a floor that's within 50 units of height from the top of this object (much like how climbing up stairs works). Defaults to false.weight
: How much Pikmin strength does it take to carry the object. Defaults to 0.
List of object categories
The following is a list of all categories that exist in the engine, with links to pages detailing more information about them.
| Category | Brief description | Examples | Needs script? |
|---|---|---|---|
| Pikmin | A type of Pikmin. | Red Pikmin, Yellow Pikmin | No |
| Leader | A leader. Yes, you can have multiple "Olimars" in an area! | Olimar, Louie | No |
| Enemy | An enemy, either prey or predator. | Red Bulborb, Cloaking Burrow-nit | Yes |
| Onion | An Onion. Each Onion type can handle a specific combination of Pikmin types. | Red Onion, Master Onion | No |
| Ship | Anything that the Pikmin can return treasures to. | S.S. Dolphin, Hocotate ship | No |
| Pellet | A pellet. | Red 1 pellet, Blue 5 pellet | No |
| Treasure | A main collectible, like a ship part, treasure, fruit, etc. | Main Engine, Courage Reactor | No |
| Bridge | Anything that once opened, creates a bridge. | Wood bridge, Red ceramic bridge | No |
| Group task | Something that requires Pikmin to pose together in order to open, move, etc. | Cardboard box, electrode | Yes |
| Scale | Measures how much weight is on top of it, and does things depending on the amount. | Seesaw block, crushable paper bag | Yes |
| Track | Transports an object from point to point. | Climbing stick, slide | No |
| Bouncer | Bounces an object to some other location. | Bouncy Mushroom, geyser | No |
| Converter | Anything that converts a thrown Pikmin to another type. | Crimson Candypop Bud, Queen Candypop Bud | No |
| Decoration | Any decorative plant or object. | Clover, Margaret | No |
| Drop | A droplet that can be drunk. | Nectar, Ultra-bitter nectar | No |
| Pile | Any sort of pile of resources. | Bitter Burgeoning Spiderwort, Ceramic pile red | No |
| Resource | Anything that can be harvested from a pile and brought somewhere. | Bitter berry, Ceramic fragment red | No |
| Tool | Anything that can be held by a Pikmin and activated when the Pikmin's thrown. | Bomb rock, Mine | Yes |
| Interactable | Anything that the current leader can interact with to cause some action. | Sign | Yes |
| Custom | Any object with no specific behavior. | Egg, Fire geyser, anything really | Yes |
If there's a type of object you know is popular in the Pikmin series, but you can't find the category for it, then either an appropriate category does not yet exist in the engine, or it can be created as a custom object.
Extra features
Reaches
An object can detect whether another object is "within reach" or not. Also, if it was within reach, and became "out of reach". It can also use different definitions of "reach" for different moments. This is all explained in detail in the script page.
Spawning other objects
If you want your object to spawn other objects, you need to specify their spawn data. In Data.txt
, include a block titled spawns
. Inside, you will write a series of blocks, each one with a unique name that will identify that spawn data. Later, when you want to spawn an object using the script, you need to refer to this name.
These spawn data blocks must have the following properties inside:
object
: Name of the type of object to be spawned. This is the formal name, i.e. the name provided in thename
property in the mob type'sData.txt
file.
It can also optionally have these properties:
relative
: Are the specified spawn coordinates absolute or relative? Defaults to true.coordinates
: Coordinates to spawn in, in the formatx y z
. Defaults to0 0 0
.angle
: Angle the spawned object will be facing. Defaults to 0.momentum
: If this is 0, the mob spawns in the exact spot specified and stand there. Otherwise, it will spawn in that spot but be launched in a random direction, with the specified momentum. 100 is a good general case value. Defaults to 0.vars
: Any script variables to include, separated by semicolon. Example:vars = maturity = 0; sprout = true
. Defaults to none.link_spawn_to_object
: Iftrue
, a link will be created from the spawned object to your object. Defaults to false.link_object_to_spawn
: Iftrue
, a link will be created from your object to the spawned object. Defaults to false.
Parent/child objects
Your object can be a parent object, meaning it is actually composed of several different child objects. This feature is especially useful when you need several independently-moving parts. For instance, in a Beady Long Legs, the head is the parent object, meaning it is the enemy proper, and each leg is a child object.
A parent will spawn its children at the same time that it itself is spawned. Because every child is meant to be its own individual thing but also serve as components of the parent object, there are several ways for you to specify what it should do when it interacts with the world. This means specifying what happens when it receives damage, receives a script event, or receives a status effect: it can either ignore what it received or not, and it can either relay it to the parent object or not.
Children objects can also be connected to a specific body part in the parent. Because children objects are commonly used as appendages of the creature, it is possible to draw a "limb" connecting a parent object to a child object. This limb is a rectangular shaped sprite that stretches and rotates accordingly.
To make your object type a parent, go to Data.txt
, and add a block called children
. Inside, you will include a series of blocks, each one with a unique name that represents the child, e.g. "left_foot". Now, when your object is spawned, it will spawn these children along with it. Each of these children blocks needs to have the following properties:
spawn
: Name of the spawn data to use.
The blocks can also have the following optional properties:
parent_holds
: Iftrue
, then the parent object is holding this one, much like an enemy holds a Pikmin that is latched on to it. Use the following properties to specify the location. Defaults to false.hold_body_part
: If the parent holds this child, this is the name of the body part it is held on. If empty, the center of the parent object is used instead. Defaults to empty.hold_offset_distance
: If the parent holds this child, this is how far away from the center of the body part/object the child is. 0 means dead center, and 1 means on the edge, but you can write numbers beyond this range. Defaults to 0.hold_offset_vertical_distance
: If the parent holds this child, this is how far away from the bottom of the body part/object the child is. 0 means same as bottom, and 1 means same as top, but you can write numbers beyond this range. Defaults to 0.hold_offset_angle
: If the parent holds this child, this is the angle from the body part/object's default position that the child is located at. Defaults to 0.hold_rotation_method
: Indicates how the child can rotate.never
means it never rotates (besides the starting angle).face_parent
means it always rotates to face the center of the parent object.copy_parent
means it's always the same angle as the parent object. Defaults to never.handle_damage
: Iftrue
, the child object loses health when it receives damage. Iffalse
, it ignores the damage. Defaults to false.relay_damage
: Iftrue
, the child object relays any damage to the parent object, so it can handle it. Defaults to false.handle_events
: Iftrue
, the child object handles any script event that it receives. Iffalse
, it ignores the event. Defaults to false.relay_events
: Iftrue
, the child object relays any events received to the parent object, so it can handle them. Defaults to false.handle_statuses
: Iftrue
, the child object handles any status effect that it receives. Iffalse
, it ignores the status. Defaults to false.relay_statuses
: Iftrue
, the child object relays any status effects received to the parent object, so it can handle them. Defaults to false.limb_animation
: If there is meant to be a "limb" drawn between the child and parent, specify the name of its animation here. This animation must be included in the parent object's animation set. Defaults to none.limb_thickness
: If there is a limb, this specifies how thick it is. Defaults to 32.limb_parent_body_part
: If there is a limb, this specifies where it connects to in the parent. If it's empty, it connects to the parent's center. Otherwise, it connects to the center of the specified body part. Defaults to empty.limb_parent_offset
: If there is a limb, you can specify how far away it is from the center of the parent-side connection. Defaults to 0.limb_child_body_part
: Same aslimb_parent_body_part
, but for the child object. Defaults to empty.limb_child_offset
: Same aslimb_parent_offset
, but for the child object. Defaults to 0.-
limb_draw_method
: How to draw the limb. Defaults to above child. This can be one of the following:below_both
: Draw the limb below both the parent and the child.below_child
: Draw the limb below the child. It may appear above or below the parent, depending on the child and parent's positions.below_parent
: Draw the limb below the parent. It may appear above or below the child, depending on the child and parent's positions.above_parent
: Draw the limb above the parent. It may appear above or below the child, depending on the child and parent's positions.above_child
: Draw the limb above the child. It may appear above or below the parent, depending on the child and parent's positions.above_both
: Draw the limb above both the parent and the child.
Vulnerabilities
You can make it so that an object is completely invulnerable to a hazard, more vulnerable to another, etc.
In Data.txt
, add a block titled vulnerabilities
. Inside, each property has the hazard's name as its name, and the vulnerability data as its value, e.g. fire = 50 sweating true
. The vulnerability data consists of one to three words:
- The first word is the damage percentage. When the object is hurt by an attack with this hazard, its damage will be changed by the specified percentage, so 50 would make it take half damage. You can make this negative to get the object to heal instead! If this value is 0, the object will completely ignore this hazard in its entirety, even if it's not an attack.
- The second word, optional, is the name of a status effect. When the object interacts with this hazard, it will receive this status effect.
- The third word, also optional, controls whether the status effect overrides others. If true, then the object will only receive the status effect from the previous word, and will not receive the status effect the hazard usually gives. If false or not specified, then the object will also receive this status effect on top of any others the hazard gives.
You can use this in conjunction with the default_vulnerability
property to make an object that is invulnerable to anything except explosions, for instance.
Area editor tips
Some objects require certain things to be set up in certain ways in the area editor before they work as intended. e.g. bridge fragment piles need to know what bridge they belong to, seesaw blocks need to link to each other before they work together, etc. Users who are not very familiar with these tricks may take a while to realize what's wrong. To help with this, you can also specify a property that, when read by the area editor, will make it so users can place their mouse over a text widget, and they will see some helpful tips about how to make use of the object.
In Data.txt
, add a property titled area_editor_tips
. Then, simply write the tip(s) you want as the value. You can use \n
to cause a line break and start a new line. To write a literal backslash, you will need to type \\
.
Area editor properties
Some object types can make use of script variables to make specific objects have different behavior. For instance, with script variables, you can place two Pellet Posies in an area, and one of them can start already fully bloomed. When an object spawns, the engine itself or the object's script may read any declared script variables and use them as they see fit. In the area editor, you can write down the script variables you want a specific object to declare, along with their values, but having to memorize the names of the variables – as well as what each value means – is a bit of a pain. To remedy this, you can add some properties to the object type's data with information about important script variables. Then, when the area editor loads, it will use that information to present the user with some helpful widgets to set those special behaviors with, each widget in charge of one script variable.
In Data.txt
, add a block titled area_editor_properties
. Inside, you will write one block per script variable, with each block's name being the name of the widget responsible. Then, add the following properties as needed:
var
: The name of the variable, as used in the script.-
type
: What type of variable this is. Defaults to text. Can be one of the following:text
: The variable is meant to be text. The widget will be a text box. Use this when the other types won't cut it, so that the user is free to write whatever they need in the text box.int
: The variable is meant to be an integer number. The widget will be a number box with integers.decimal
: The variable is meant to be a decimal number. The widget will be a number box with decimal numbers.bool
: The variable is meant to be true or false. The widget will be a checkbox.list
: The variable is meant to be text. The widget will be a list box with several choices to choose from.number_list
: The variable is meant to be an integer number. The widget will be a list box with several choices, where each choice maps to a number.
def_value
: The variable's default value, as used in the script. Defaults to not set.min_value
: For variables meant to be integer or decimal numbers, this is the minimum value it is meant to have. The widget will not let the user pick a number beyond this one. Defaults to no limit.max_value
: Same asmin_value
, but for the maximum. Defaults to no limit.list
: For list widgets, this is the list of choices, separated by semicolon (;). If the variable is meant to be an integer, the first option maps to 0, the second to 1, etc. Defaults to empty.tooltip
: Tooltip to display when the user places their mouse cursor on top of the widget. Use this to explain what the variable means, to provide extra info, to give special instructions, etc. You can use\n
to cause a line break and start a new line. To write a literal backslash, you will need to type\\
. Defaults to empty.
Notes and tips
-
If objects of your new type are not being hunted down or hurt, confirm the following:
- The object's target type is one of the types the attacker wants to hunt or can hurt.
- The object is not in the same team as the attacker.
- The object has more than zero health.
- The object is not unhuntable via the
set_huntable
script action. - The object is not invisible via a status effect.
- If you're having trouble understanding why your custom object is acting the way it is, try aiming your cursor at it and using the "mob info" maker tool (5 key, by default).
- Avoid making carriable objects with more than 95 units of radius. Gates and most choke points typically have a gap of 192 units, so larger objects likely won't fit through.


|
|
The MobileDragon distribution contains static library binaries for all supported platforms and compilers(release and debug versions), library include files, documentation files, demos sources with projects for all supported platforms and compilers, tools executables, and redistributable files. This all comes in form of a single .zip package. To install it simple unzip file contents (we recommend you to extract it into your "c:\" drive root directory and will assume that "c:\mobiledragon" is your MobileDragon installation folder). After extraction go to "c:\mobiledragon" directory. There you can find several directories.
1.1 Desktop WindowsOverviewThe desktop Windows is not final release platform for MobileDragon based applications, but it is very useful because the development for it is much faster and debugging is much simpler. Microsoft Visual C++ 6.0 or Microsoft Visual C++ 8.0 can be used for desktop developments. Microsoft Visual C++ 6.0 is mature tool and still has one of most powerful debuggers. Microsoft Visual C++ 8.0 also can be used for develop for Windows Mobile, so if you choose it, you have one tool for desktop and mobile device development. InstallationInstalling Microsoft Visual C++ 6.0Install Microsoft Visual C++ 6.0. It is recommended that you install in default directory, and make sure that the 'Register environment variables' checkbox is checked at the final stage of installation. Then install Service Pack 6 for Visual C++ 6.0. After all is installed it is required to configure Visual C++ 6.0 environment. To do it start the Visual C++ 6.0 IDE. Go to menu “Tools / Options”. The In the dialog window appeared select “Directories” tab. On that tab set option “Platform” to “Win32” and “Show directories for” to “Include files”. Add Include files directory path to the MobileDragon includes directory (default is “c:\mobiledragon\include”). Then set option “Show directories for” to “Library files” and add path to the MobileDragon desktop windows libraries directory (default is “c:\mobiledragon\lib\win32”). Installing Microsoft Visual C++ 8.0Install Microsoft Visual C++ 8.0. It is recommended that you install in default directory After all is installed it is required to configure Visual C++ 8.0 environment. To do it start the Visual C++ 6.0 IDE. Go to menu “Tools / Options”. In the dialog window appeared select “Projects and Solutions / VC++ Directories” tree item. On appeared tab set “Platform” options to “Win32” and “Show directories for” to “Include files”. Add Include files directory path to the MobileDragon includes directory (default is “c:\mobiledragon\include”). Then set option “Show directories for” to “Library files” and add path to the MobileDragon desktop windows libraries directory (default is “c:\mobiledragon\lib\win32”). 1.2 Windows MobileOverviewTo develop MobileDragon games for Windows Mobile (Pocket PC and Smartphone ) platform you will need Embedded Visual C++ 4 and Pocket PC 2003 SDK. InstallationFirst you need to install Microsoft Embedded Visual C++ 4.0 with Service Pack 4. It is recommended installing in default directory. Then install required Pocket PC 2003 SDK. It can be obtained from Microsoft site at http://msdn.microsoft.com/mobility/downloads/sdks/default.aspx After all is installed it is required to configure Embedded Visual C++ environment. To do it start the Embedded Visual C++ IDE. Go to menu “Tools / Options” and select Directories tab. Set “Platform” option to “Pocket PC 2003” platform. Set “Show directories for” option to “Include files” and add directory path to the MobileDragon includes directory (default is “c:\mobiledragon\include”) for both Win32(WCE emulator) & Win32(WCE ARMV4) CPUs. Then set “Show directories for” to “Library files” in, and add path to the MobileDragon Windows Mobile libraries directory (default is “c:\mobiledragon\lib\wince” used for example) ) for both Win32(WCE emulator) & Win32(WCE ARMV4) CPUs. 1.3 SymbianOverviewTo develop MobileDragon games for Symbian (Series 60 & UIQ now supported) platform you will need SDK's for each platform. These SDK's include various command line tools needed to build & deploy applications. For series s60 you will need SDK version 1.2, for UIQ platform use SDK version 2.1. Application compiled with those SDK's will run on many Series 60 / UIQ devices. InstallationDownload SDK’s from http://www.symbian.com/developer/. Install Series 60 v1.2 and / or UIQ 2.1 SDK(s). It is important that SDK’s and your project directories reside on the same drive. So it is recommended installing in default directory (usually it is c:\symbian). You also need ActivePerl installed to use SDK’s development tools, it is included in UIQ SDK distribution or can be obtained from http://www.activestate.com/Products/ActivePerl/. After SDK’s are installed you need to copy MobileDragon Symbian library binaries folder \lib\s60\release to your SDK \epoc32\ directory. 1.4 PalmOverviewTo develop MobileDragon games for Palm OS you will need CodeWarrior for PalmOS Version 9.0. InstallationFirst you need to install CodeWarrior for PalmOS Version 9.0. It is recommended installing in default directory. Install CodeWarrior for PalmOS 9.2 update, install CodeWarrior for PalmOS 9.3 update. You can obtain those updates from Freescale site http://www.freescale.com/ After installing CodeWarrior you need to unzip content of CW for Palm OS Support - PATCH.zip (see "MobileDragon\extra" directory) to the "Metrowerks\CodeWarrior\" folder. This will add support for additional PNO hacks wrappers which are necessary for MobileDragon library. Unzipping process will ask you for replacing of existing files, you have to accept this operation. After this you need to run CodeWarrior IDE and rebuild
it's runtime libraries:
Copyright 2005-2006 Herocraft Hitech Co. Ltd. |


| SolarWinds Network Configuration Manager |
This application security testing platform detects the most sophisticated flaws in websites and web applications, thanks to intelligent automation of penetration testing. |
Commercial |
30 Day trial |
https://www.beyondtrust.com/products/retina-network-security-scanner/ |
| OpenVAS |
OpenVAS is a free cross-platform vulnerability scanner, with over 50,000 network vulnerability tests available, including authenticated and unauthenticated testing. |
Open source |
Free |
http://openvas.org/ |
| ImmuniWeb |
ImmuniWeb, from Swiss firm High-Tech Bridge, comes filled with features, relying on sophisticated machine learning and artificial intelligence automation. |
Commercial |
$l000 per month |
https://www.htbridge.com/immuniweb/ |
| Netsparker |
Available as a Windows desktop application or web application, Netsparker comes with built-in penetration testing tools and advanced reporting capabilities. |
Open source |
Free |
https://www.acunetix.com/vulnerability-scanner/ |
| Nexpose |
Nexpose vulnerability scanner is designed to identify active services, open ports and running applications across machines. |
Commercial |
Free trial |
https://www.rapid7.com/products/nexpose/download/ |
| Retina |
Retina Network Security Scanner is another free and powerful vulnerability scanner, which also serves as the scan engine for Retina CS Enterprise Vulnerability Management. |
Open source |
Free |
https://www.beyondtrust.com/products/retina-network-security-scanner/ |
| Nessus |
Nessus is a proprietary vulnerability scanner and provides scans to detect vulnerabilities that allow hackers to control or access sensitive data on a system, misconfiguration, default passwords and more. |
Commercial |
$3100 per year |
https://www.tenable.com/products/nessus/nessus-professional |
| Core Impact |
Core Impact is designed to provide efficient vulnerability assessments and penetration security testing throughout organisations. |
Commercial |
NA |
https://www.coresecurity.com/vulnerability-products |
| Personal Software Inspector |
PSI (Personal Software Inspector) is a free security scanner that enables users to scan, detect and secure applications on their computers. |
Open source |
Free |
https://www.flexera.com/enterprise/products/software-vulnerability-management/personal-software-inspector/ |
| Acunetix |
Acunetix will scan websites and web applications including open source software and custom-built applications for hidden vulnerabilities and security flaws. |
Commerical |
$4495 per year |
https://www.acunetix.com/vulnerability-scanner/ |


About Waterview
Virtual Tours
Landmark Ecosystem
FAQ
CONTACT US
LANDMARK AFRICA
Studio/1 bath
DOWNLOAD FLOOR PLAN
1 bed/1 bath
DOWNLOAD FLOOR PLAN
2 bed/2 bath
DOWNLOAD FLOOR PLAN
4 bed/3 bath
DOWNLOAD FLOOR PLAN
3 bed/2 bath
DOWNLOAD FLOOR PLAN


| Overview | Module | Use | Devguide | Index |
| uses of interface XAbortChannel |
back to interface XAbortChannel |
| Uses as Return Type |
| ::com::sun::star::deployment::XExtensionManager::createAbortChannel() ::com::sun::star::deployment::XPackage::createAbortChannel() ::com::sun::star::deployment::XPackageManager::createAbortChannel() |
Copyright © 2013, The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache, the Apache feather logo, Apache OpenOffice and OpenOffice.org are trademarks of The Apache Software Foundation. Other names may be trademarks of their respective owners.


Which fruit?
Clear the selected fruit
Which vegetable?
Clear the selected vegetable
Which grain?
Clear the selected grain


The Wings of the Dove
A Film Review by Ivana Redwine Copyright 1997 Ivana Redwine
Starring: Helena Bonham Carter, Linus Roache, Alison Elliott, Elizabeth McGovern, Charlotte Rampling. Directed by Iain Softley. Written by Henry James (novel), Hossein Amini (screenplay). Cinematography by Eduardo Serra (II). Music by Ed Shearmur. Production Design by John Beard. Costume Design by Sandy Powell (II). Film Editing by Tariq Anwar. MPAA Rating R. Running Time 101 Minutes.
THE WINGS OF THE DOVE is a tragic romance and a powerful film about the painful personal prices that are sometimes paid for passion. I highly recommend this movie as one of the most entertaining and emotionally satisfying films of the year. A lavish costume drama with exquisite production values, this moving story of friendship, love, and betrayal is set in the early 20th century in the glamorous and cinematically lush world of London drawing rooms and Venetian palazzos. The story centers around a complex young woman named Kate Croy (Helena Bonham Carter) and her doomed love for Merton Densher (Linus Roache). The acting in the film is superb in general, and in particular, Bonham Carter's performance is extraordinary and seems likely to win her an Oscar nomination.
The film is loosely based on Henry James' novel, but admirers of that great writer should be warned that the sensibilities of the movie are not entirely faithful to those of the book--for example, the film shows that Kate and Densher have a steamy extramarital sexual relationship. And in many other ways the characters in the movie seem strikingly modern compared with those in the novel. Such liberties are partially justified by setting the film around 1910, which is about ten years later than the time frame of the book. Also, the film adaptation streamlines James' story to fit the confines of the leaner form of the screenplay, making the movie less cerebral and complex than the novel, while shifting the story's focus to its emotional aspects. But the screen adaptation succeeds brilliantly in finding those elements of the book that translate well to the visually aggressive and emotionally immediate medium of film. The result is a compelling and accessible movie that is not just for Henry James fans or for the costume drama crowd--it's a movie for anyone who enjoys getting caught up in the sweep of a passionate drama.
Bonham Carter imbues the story's main character Kate Croy with a spectrum of emotions that makes her almost impossible to completely figure out. At times Kate is almost as coolly cynical and selfishly scheming as a film-noir heroine. But although Kate makes cynical decisions, it is not clear whether she is a selfish monster or a victim who has been corrupted by the cynicism of the society that surrounds her. She is a character who at first inspires sympathy which later becomes mixed with disdain. I think this adds resonance to her character, and as is often the case with fictional characters who have substantial psychological depth, much of the fascination lies in the fact that she is neither completely bad nor completely good.
When the story opens, Kate's mother has died recently and her opium-addicted father is living in poverty. Kate has been taken in by her wealthy socialite aunt who is intent on matching her with a suitable husband of appropriate wealth and social standing. The aunt forbids Kate to see her father, fearing his negative influence on her will hurt her chances for a good marriage. To complicate matters further, Kate is passionately in love with Merton Densher, a young journalist who can barely support himself. Kate's aunt also forbids her to see Densher, forcing her to meet him secretly in such unlikely places as an elevator in the London Underground. Kate is in the nearly impossible situation of being torn between her love for Densher and her fear of being cut off financially by her aunt. To make matters worse, her father is also being supported by her aunt in return for his staying away from Kate. Thus, it is more than destitution that Kate fears--she is afraid her aunt's wrath will hurt her father.
Kate's dream of being able to openly be with the man she loves seems all but impossible. But things change when Millie Theale (Alison Elliott), a wealthy American heiress, enters the glittering social scene. Kate soon learns that Millie harbors a tragic secret: The heiress suffers from a fatal disease and is not expected to live much longer. Based on this information, Kate devises a desperate scheme that she hopes will allow her to end her financial dependence on her aunt and marry Densher. Since I don't want to spoil the story for those not familiar with it, I'll say no more about how all this plays out, but I will say that things come out quite a bit differently from what I think most people will expect.
In my opinion, Bonham Carter's performance steals the show, but there are also other strong performances. As Kate's aunt, Charlotte Rampling has just the right touch of icily patrician villainy. Linus Roache takes on a difficult role with Merton Densher--he plays a man weak enough to be putty in the hands of a manipulative woman, yet he manages to project enough masculine appeal to make it credible that women like Kate and Millie would be in love with him. And although Alison Elliot does not have the kind of patrician looks that would make her perfect for the part of Millie Theale, she brings to the role the kind of luminosity and innocence that makes her portrayal come to life.
The gorgeous cinematography--which includes stunning location shooting in Venice, Italy--heightens the film's impact while adding additional layers of subtle meaning. I interpreted the seductive appeal of the visual opulence of some of the imagery as a metaphor paralleling the hedonistic influences that helped to shape the actions of Kate, Densher, and Millie. I thought that the cinematography's lushness was the perfect way to illustrate luxury's sensual lure. Especially effective was the scene in which Millie and Kate walk through an exhibition hall where the works of the Viennese artist Gustav Klimt are being exhibited. Klimt's paintings brilliantly foreshadow the sensual richness and passionate sexuality of much of what is about to unfold in the film. I was also particularly impressed by the lyrical, innovative, and silkily smooth visual transitions between the scenes; they reminded me of the facile, poetic complexity of Henry James' prose style.
One thing the film did that struck me as incredibly powerful was to show just how much Kate has to lose by contrasting the world of wealth and privilege with the world that she is likely to descend to if she does not obey her aunt's wishes. In one stunning scene, Kate sneaks out to slip her father an expensive piece of jewelry her aunt had presented her as a gift. Kate gives the necklace to a woman standing at the door of an opium den that her father patronizes. The camera then provides a glimpse of the den's dark and ominous interior, which is tinged with a nightmare's horror. Much later, near the end of the film, comes another powerful scene, similar in its feeling of heartbreak, when Kate makes love with Densher in his small, stark London apartment. The treatment of this scene is anything but romantic; it is a scene of desperation and tragedy. Both Bonham Carter and Roache are unforgettable here as two people whose love for each other has been poisoned by what they have done and the kind of people they have become.
The psychological and intellectual depth of Henry James' stories have proven irresistible to filmmakers during the past couple of years, and THE WINGS OF THE DOVE is the third recent major movie to have been adapted from the great writer's novels, the other two being THE PORTRAIT OF A LADY and WASHINGTON SQUARE. While all three are films of high quality, it seems probable that general contemporary audiences will like THE WINGS OF THE DOVE better than the other two, although some Henry James devotees will never be able to get past the fact that great liberties were taken in adapting this classic work to the screen.
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


About ProRata Insurance Calculator
Calculates the refund premium for the unexpired term of a policy, with or without a penalty for interim cancellation.
Terminology
- Effective Date
- Date policy's coverage started - Inception Date
- Expiration Date
- Date policy's coverage ends.
- Cancellation Date
- Date policy's coverage is terminiated.
- Premium Amount
- Amount charged for the policy's coverage.
- Return Premium
- Amount owed to insured for a cancellation before expiration.
- Earned Premium
- Portion of the written premium considered earned by the insurer for accepting the risk.
- Pro Rata Rate (Standard Factor)
- Calculated by taking the number of days remaining in the policy period divided by the number of total days of the policy. This factor is multiplied by the written premium to arrive with the return premium.
- Pro Rata Rate (Short Rate Factor)
- Same calculation as the Pro Rata Rate Standard Factor, but a 10% penalty on the unearned premium is applied for cancelling the policy.
- Total Days
- Total number of days in the policy period.
- Earned Days
- Number of days the policy was in effect based on the cancellation date.
- Unearned Days
- Number of days the policy has remaining based on the cancellation date.
Found bugs or issues?
Please report to https://github.com/netinlet/prorata/issues


rsync tutorial
by Peng Xiao
Install
Rsync is installed in many linux systems by default.
rsync --version
rsync version 3.0.9 protocol version 30
Copyright (C) 1996-2011 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
append, ACLs, xattrs, iconv, symtimes
rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you
are welcome to redistribute it under certain conditions. See the GNU
General Public Licence for details.
Usage Example
We want to sync folders from one host to another host, so there are a source host and a target host.
Target host
In target host we will start a rsync daemon process, it will listen on port 873 by default, and wait connection from the source host. Once the connection is established, the source host will sync the folder/file to the target host.
/usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf
Before that we should prepare some files located under /etc/rsyncd/
$ pwd
/etc/rsyncd
$ ls -l
total 48
-rw-r--r-- 1 root root 664 Nov 2 13:41 rsyncd.conf
-rw------- 1 root root 17 Nov 2 13:41 rsyncd.password
For rsyncd.password
, please make sure the read/write access only for the current user, and it contains the SSH user/password which will be used by
the source host.
$ more rsyncd.password
demo:demo
For rsyncd.conf
$ more rsyncd.conf
uid = root
gid = root
user chroot = no
max connections = 50
timeout = 180
pid file = /etc/rsyncd/rsyncd.pid
lock file= /etc/rsyncd/rsyncd.lock
log file = /etc/rsyncd/rsyncd.log
user chroot = no
max connections = 50
timeout = 180
transfer logging = yes
log format = %t %a %m %f %b
syslog facility = local3
secrets file = /etc/rsyncd/rsyncd.password
[target_folder]
path=/home/demo/target_folder/
ignore errors
hosts allow =<IP_ADDRESS>
hosts deny = *
secrets file = /etc/rsyncd/rsyncd.password
read only = no
list = no
auth users = demo
hosts allow
is the source host ip address
Source host
Prepare two files:
$ ls -l
total 8
-rwxr-xr-x. 1 root root 175 Nov 2 13:51 rsync.sh
-rw-------. 1 root root 9 Nov 2 13:47 rsyncpass
For the shell script:
$ more rsync.sh
#!/bin/bash
src=/home/demo/source_folder/
user=demo
ip=<IP_ADDRESS>
/usr/bin/rsync -zr --append-verify --delete --password-file=/home/demo/rsyncpass $src $user@$ip::rib
#
For the rsyncpass
, please make sure the read/write access only for the current user. It only contains the password.
$ more rsyncpass
demo
Now we can put the rsync.sh
to the crontab, done!
$ crontab -l
* * * * * //home/demo/rsync.sh
You can check the results from the target host in the target folder.
Subscribe via RSS


Here the submenu will fade in and scale up from the back and the current level will fade out and move down.


Functional-ish Ruby, Part 2: Functional Objects
In a previous blog post I discussed a few ways to think about writing Ruby methods from a functional perspective. But in Ruby, or any other object oriented language, we don’t just write functions, we write objects. Does that mean we either have to live without the principles we like from functional programming, or fundamentally change the way we write Ruby or OO code? I’d argue, neither. Let’s not conflate paradigms that we have grown to like or dislike in OO and functional programming with objects themselves, or the lack thereof.
What are the benefits to programming functionally? There are many, and this blog isn’t about defining them, or validating what specific concepts actually define functional programming. This blog assumes that there are certain ideas attached to the grander idea of “functional programming,” and that you see some value in them.
So, given that things like referential transparency, pure functions, immutable state, currying, closures, higher order functions, and monads are things that we like, what does that mean for those who predominately work in object oriented languages? Well, we can still write Ruby, or any other object oriented language perfectly fine while adhering to our favorite functional principles. Here are some examples:
Immutable State and Avoiding Side Effects
Take the following object:
class MutableObject
attr_accessor :mutable_attrs
def initialize(attrs = {})
@mutable_attrs = attrs
end
def update(key, value)
mutable_attrs[key] = value
end
end
object = MutableObject.new
object.update(:some_key, :new_value)
# or
object.mutable_attrs[:some_key] = :new_value
In this class, not only does the update
method change the state
of the object, but we’ve exposed our attrs
hash through a public
attr_accessor
, leaving it easily exposed for
mutation in place. What’s the problem? Well, maybe nothing if the
scope of this object is localized enough so that everything using the object
knows that it could change. But once the mutations leave a defined
boundary, we’ve introduced more complexity to the codebase.
We don’t need truly immutable data structures to fix this problem, we just need to be mindful of when we actually should mutate state. If we decide that mutating state causes unnecessary complexity, we could refactor this class to look more like this:
class MyObject
def initialize(attrs = {})
@attrs = attrs
end
def update(key, value)
MyObject.new(attrs.merge(key, value))
end
private
attr_reader :attrs
end
object = MyObject.new
new_object = object.update(:some_key, :new_value)
Now when we update an object we return a new instance. That way we know that once we have an object, it won’t change.
The nice thing about a functional language like Clojure is that we get this for free.
(def my-map {:number 1})
(def my-new-map (assoc my-map :number 2))
(:number my-new-map) ; => 2
(:number my-map) ; => 1
But, as explained before, sometimes mutation is ok, even better, if it’s localized. And even Clojure admits this by allowing a data structure to explicity be declared as transient:
(defn vec-range [n]
(loop [i 0 v (transient [])]
(if (< i n)
(recur (inc i) (conj! v i))
(persistent! v))))
State and mutability themselves aren’t the problem. The problem is mutating across boundaries. And we can address that by being aware of when we are mutating state, or hiding our objects’ state behind method calls rather than exposing public accessors.
Referential Transparency in Enumerables
One pattern to be aware of with Ruby’s enumberables is that the each
method on its own
only returns an enumerable for the original collection. So, it can only have an
effect by changing state somewhere else and cannot be referentially transparent.
class ThingFilter
def initialize(things)
@things = things
end
def call
@things.each do |thing|
thing.change!
end
@things
end
end
Consider using map
or reduce
, and if you can’t, it’s a sign that the operation
is mutating state, and is not referentially transparent or a pure function.
def call
@things.map do |thing|
slightly_transform(thing)
end.map do |thing|
change_some_more(thing)
end
end
def call
@things.reduce({}) do |name_hash, thing|
name_hash[thing.id] = thing.name
name_hash
end
end
Currying, Closure, and Function Instantiation
The important thing to remember about objects is that they are just functions that have
been instantiated with local bindings. MyObject.new(5)
is just a function that
returns a new function to be called later with a local binding to 5.
To start, consider a class method that takes three arguments, and does
something immediately with the three arguments. It’s clearly just a function
attached to a class namespace.
class Foo
def self.a_function(a, b, c)
DoSomething.call(a + b + c)
end
end
Foo.a_function(10, 11, 12)
But, what if we just want to bind two arguments and return a new function to be called later? Well, then we instantiate a new object with two of our arguments, which returns a new function to be called with one argument later on.
class Foo
def initialize(a, b)
@a = a
@b = b
end
def a_function(c)
DoSomething.call(@a + @b + c)
end
end
foo_fn = Foo.new(10, 11)
foo_fn.a_function(12)
In functional languages we do this through just returning a function, from a function.
Or, in Clojure, if we want to just return a function that takes one argument, we can use
the partial
function.
(defn foo [a b]
(fn [c]
(do-the-thing (+ a b c))))
((foo 1 2) 3)
(defn foo [a b c]
(do-the-thing (+ a b c)))
((partial foo 1 2) 3)
To underscore the fact that functions are just objects with one method, Clojure’s
functions are implemented in Java as an interface with one function, invoke
.
Higher Order Functions
If objects are just functions, we can pass them around and return new functions.
Composition
class OperationManager
def initialize(thing_doer)
@thing_doer = thing_doer
end
def get_presenter(thing)
result = @thing_doer.call(thing)
ThingResultShower.new(result)
end
end
operation = OperationManager.new(ThingDoer.new)
presenter = operation.get_presenter(my_thing)
presenter.show_result($stdout)
Here, we can look at the class OperationManager
as a function that takes a thing_doer
function,
then returns a new function that takes a thing
argument. When get_presenter
is called
with a thing
, it returns a function that can be called with an output stream to finally show
the result. In Erlang, this pattern might look like this:
manage(Doer) ->
fun(Thing) ->
Result = Doer(Thing),
fun(Out) -> write_out(Out, Result) end
end.
do_something(MyThing) ->
ActionFn = manage(fun my_doer_fn/1),
PresenterFn = ActionFn(MyThing),
PresenterFn("output.txt").
What’s the benefit of this over one function that does everything at once? One, we’ve
made the object more composable by allowing how the thing gets done to be passed to it.
Two, perhaps the three arguments — the thing_doer
, the thing
, and the output
stream — are known at different places in our program, and are responsiblities of
different objects. We’ve now hidden the details of the two other arguments that
those objects don’t care about.
Monads
Another fun application of higher order functions is monads. A monad is basically just a function that allows us to perform a connected series of operations on an object. Consider the common “maybe” monad, which connects a series of operations on a value that may or may not be present.
class Maybe
attr_reader :value
def initialize(value)
@value = value
end
def try
if value.nil?
Maybe.new(value)
else
result = yield value
Maybe.new(result)
end
end
end
maybe = Maybe.new(:foo)
value = maybe.try { |x| x.to_s }.try { |x| nil }.try { |x| x + 1 }.value
The value here would be nil, but notice that there would not be an exception when trying to perform
x + 1
when x is nil.
In languages like Haskell or Rust, we get something like this for free. In Clojure, a rudimentary maybe monad might look like this:
(defn maybe [x]
(fn
([op] (if (nil? x) (maybe x) (maybe (op x))))
([] x)))
(((((maybe :foo) str) (fn [x] nil)) (fn [x] (+ 1 x))))
Lately, I’ve been experimenting with a result monad, which is useful for eliminating nil checks or abstracting event statuses or reasons for failure. It’s not much different than the maybe monad, the only difference is that we check for matching statuses, rather than nil.
class Result
attr_reader :result
def self.status(status, result)
new(status, result)
end
def initialize(status, result)
@status = status
@result = result
end
def on_status(status)
if @status == status
value = yield @result
Result.status(@status, value)
else
Result.status(@status, @result)
end
end
end
result = Result.status(:not_found, nil)
title = result.on_status(:success) do |post|
post.title
end.on_status(:not_found) do
"Title not found"
end.result
Conclusion
So, what does this mean? To me, it means that if we want to write functional code in an OO language we just need to ask ourselves, “Could I easily model this object as a function?” If the answer is no, then that’s probably a sign that it’s changing too much state, or is not composable, or is not meeting some definition of the word functional. The ideas that we like about functional programming can take many different forms, and these ideas don’t have to be a prescriptive ideology. There are obviously situations where enforcing immutable state or using a monad makes our code more complex. But, if you see value in using immutable state, or higher order functions, or a monad, then use it. Take the pieces you like when they fit, and find the alternative best option when they don’t.


My Team
John Smith
Manager
ID: 1
Email:
<EMAIL_ADDRESS>Office Number: 1
Richard Hendricks
Engineer
ID: 2
Email:
<EMAIL_ADDRESS>Github Username:
richard-hendricks
Jane Doe
Intern
ID: 3
Email:
<EMAIL_ADDRESS>School: Flinders University


Hello all,
Just got my Kickstarter emonPi and starting to set it up.
I didn't bother to get the option with a PSU included because I already had / have Raspberry Pi PSUs.
But a bit surprised to find the emonPi has a mini USB connector rather than the Pi's micro connector.
One of the video say all the emonPi needs is 1.2A which means my existing Pi PSUs would be just fine. So interested to find out what was the reason for a different form factor on the emonPi? Am I missing something here?
Thanks in advance
Re: emonPi 5v form factor not same as Raspberry Pi
Hi Ian,
Very sorry we did not communicate well the requirement for a mini-B usb power supply cable for emonPi rather than mico USB connector. We have found the mini-B to be a more robust connector than the micro connector used on the Raspberry Pi. If you like we will send you a USB-A to Mini-B cable free of charge. Please let me know.
http://shop.openenergymonitor.com/mini-usb-cable/?page_context=category&faceted_search=0
Re: emonPi 5v form factor not same as Raspberry Pi
Hi Glyn,
Thanks for the prompt response and explanation. Fair enough.
I've rummaged around and found something that will do for now. So thank you for your kind offer but not to bother yourself.
Best Regards.
Re: emonPi 5v form factor not same as Raspberry Pi
+1 Ian's post!!
Junior not impressed that I nicked his decent charger off him to be replaced with a carppy .7Ah one once I got my kickstarter set, then his smug look when I give it back to him as the cable is hardwired micro usb.
Then to search through all my stuff to find a mini usb cable, aha! The one that I use to update the wife's TomTom will do.
Have to say I find your comment about the robust ness nature of the mini over the micro, might have more to do with your dev work - constantly plugging/unplugging?
In the real use world though, most of these EmonPi are going to be plugged in and left in situ, everything after that is more than likely going to be software based and just requires a working connection over eithernet/wifi?


Toggle navigation
Digital Wayang Encyclopedia
About
Network analysis
Characters
Lakons (stories)
Characters
Name
Character Type
Origin
Amount of Names
Weighted Degree
Name
Character Type
Origin
Amount of Names
Weighted Degree


prtPreProcHistEq Histogram equalization pre-processing
HISTEQ = prtPreProcHistEq creates a histogram equalization pre
processing object. A prtPreProcHistEq object processes the input
data
so that the distribution of each feature is approximately uniform
in the range [0,1].
prtPreProcHistEq has the following properties:
nSamples - The number of samples to use when learning the
histogtram of the training data. The default is inf
(which uses all the data), however for large data sets
this can be slow.
A prtPreProcHistEq object also inherits all properties and functions from
the prtAction class
Example:
dataSet = prtDataGenIris; % Load a data set
dataSet = dataSet.retainFeatures(1:2); % Use only the first 2
% Features
histEq = prtPreProcHistEq; % Create the
% prtPreProcHistEq Object
histEq = histEq.train(dataSet); % Train the object
dataSetNew = histEq.run(dataSet); % Equalize the histogram
% Plot
subplot(2,1,1); plot(dataSet);
title('Original Data');
subplot(2,1,2); plot(dataSetNew);
title('HistEq Data');


javaScript
Dynamically set the height of a div element
JavaScript is a scripting or programming language that allows you to
implement complex features on web pages — every time a web page does
more than just sit there and display static information for you to look
at — displaying timely content updates, interactive maps, animated 2D/3D
graphics, scrolling video jukeboxes, etc. — you can bet that JavaScript
is probably involved.


These are my solutions to assignments and projects on edX courses. Code for all pages, including solutions, are available on Github: https://github.com/KiltedViking/edX.


:navtop
+callout-info
Both the
Multi-Entry Glyph
and the Group Glyph can be configured so that all of their
children glyphs are displayed with the same data icon.
-callout
To follow download the example at
https://ramadda.org/repository/a/userguide_dataicons
and import it into your RAMADDA.
:p
The example is composed of a Group that contains three different entries -
a CR1000 data logger file, a Purple Air sensor and a real-time NWS weather
data file.
:lheading Group Property Dialog
Under the Data Icons section of the Properties dialog for the group are specifications
for both the pull-down field menu as well as overwriting how the
data icons are displayed.
:lheading Menu Fields
There are 7 lines in the Menu Fields.
The data files share some similar fields (e.g., temperature) but
the field names vary (e.g., "rh" and "humidity") and only the Purple Air
entry has the pm1.0, pm2.5 and pm10.0 fields.
The "|" separated field ids, e.g.
.*rh|.*humidity, allow one to match
on any of the patterns.
temp.*|other_field_pattern,label=Temperature,unit=C
.*rh|.*humidity.*,label=RH
.*atm_press|.*pressure,label=Pressure
windspeed,label=Wind Speed
pm1.0
pm2.5
pm10.0
:lheading Drawing Data Icons
Under the Set Defaults button are a set of inputs for specifying how the data is displayed.
If there isn't anything set in the fields (e.g., Canvas, Properties, Glyphs) then the Set Defaults
button will set them with initial default values.
:p
You can think of the Glyphs as a set of drawing commands that draw into the canvas.
The canvas has a specified width and height. That canvas is then converted into an image
and that image is displayed as an icon in the map with the specified Icon Size.
:p
The Properties have both default attributes for the Glyphs as well
as background for the canvas as a whole.
#What font to use for the label Glyph
font:50px sans-serif
#If the data does not have the specified field then the icon is not shown
#the ${_field} is a macro that is replaced with the selected field
#from the Field Menu
requiredField:${_field}
#This specifies the background and line color for the rectangle
borderColor:#000
fill:#eee
lineWidth:5
The Glyphs are the drawing commands, one per line.
#Draw a label with the given template
#The ${_field} is a macro that is replaced with the selected field
label,pos:nw,dx:80,dy:-ch+20,label:${${_field} decimals=1 suffix=" ${unit}"}
#Draw an image with the icon for the Map Glyph
image,pos:nw,dx:10,dy:10-ch,width:60,height:60,url:${icon}
The following diagram shows how the label and the image are layed out.
The canvas dimensions are 300x100. The origin of the canvas is the lower left with
positive X to the right and negative Y going up.
The "pos" is the position on the glyph which is positioned
relative to the origin and can take on the values: nw,w,sw,s,se,e,ne,n,c (center).
The dx and dy are the delta from the origin. These can be absolute values as well as
can be based on the canvas width and height -
cw &
ch
and the half the canvas width and height -
cw2 &
ch2.
:p
The data entries can have default glyph specifications. For example, the default display
of the Purple Air sensors is defined with:
:p
Properties:
fontSize:0px,iconSize:20,canvasWidth:100,canvasHeight:100,font:28px sans-serif,defaultField:pm2.5
And Glyphs:
circle,width:cw-10,height:ch,pos:c,dx:cw2,dy:-ch2,colorBy:${_field},colorTable:airquality,colorByMin:0,colorByMax:300
label,pos:c,dx:cw2,dy:-ch2,label:${${_field}}
The positioning is as follows:
The NWS Weather entry is defined with:
:p
Properties:
iconSize:75,canvasWidth:600,canvasHeight:250,fill:#efefef,borderWidth:2,borderColor:#000,font:bold 36px sans-serif
With Glyphs defined as:
image,pos:nw,dx:10,dy:-ch+10,width:60,height:60,url:${root}/point/noaalarge.png
label,pady:5,pos:nw,dx:80,dy:-ch+10,label:${entryname}
label,pady:10,pos:n,dx:cw2,dy:-ch+60,font:36px sans-serif,label:${temperature prefixLabel=true}
${windspeed prefixLabel=true}
Pressure: ${barometricpressure scale=0.01 decimals=1} mb
Here there are 2 labels - the name of the entry and a 3 new line separated field values.
This gives:


Class CLIReporter
Minimal command line test displayer. Writes fail details to STDERR. Returns 0 to the shell if all tests pass, ST_FAILS_RETURN_CODE if any test fails.
- SimpleScorer
- SimpleReporter
- CLIReporter
Package: cake\cake\tests\libs
Copyright: Copyright 2005-2008, Cake Software Foundation, Inc.
License: The Open Group Test Suite License
Located at cake/tests/lib/cli_reporter.php
Copyright: Copyright 2005-2008, Cake Software Foundation, Inc.
License: The Open Group Test Suite License
Located at cake/tests/lib/cli_reporter.php
public
|
|
public
|
|
public
&
|
|
public
|
|
public
|
|
public
|
#
paintFooter( string $test_name )
Paint a footer with test case name, timestamp, counts of fails and exceptions. |
public
mixed
|
$faildetail_separator | ST_FAILDETAIL_SEPARATOR |
$_progress,
$_size,
$_test_stack
|
$_exceptions,
$_fails,
$_is_dry_run,
$_passes
|


Looking for Documentation about
Using {{ page.title }} with Travis CI?
{% endunless %}
We don't have any just yet, but we are working on it!
It would be really helpful if you could raise an issue on GitHub
detailing anything you think we need to cover about {{ page.title }}.


The mountains talk back
Type your name here to see what the mountains will say to you
Your message
Send the message!


VM86
Section: Linux Programmer's Manual (2)
Updated: 2009-02-20
Index
Return to Main Contents
NAME
vm86old, vm86 - enter virtual 8086 mode
SYNOPSIS
#include <sys/vm86.h>
int vm86old(struct vm86_struct *info);
int vm86(unsigned long fn, struct vm86plus_struct *v86);
DESCRIPTION
The system call
vm86()
was introduced in Linux 0.97p2.
In Linux 2.1.15 and 2.0.28, it was renamed to
vm86old(),
and a new
vm86()
was introduced.
The definition of
struct vm86_struct
was changed
in 1.1.8 and 1.1.9.
These calls cause the process to enter VM86 mode (virtual-8086 in Intel
literature), and are used by
dosemu.
VM86 mode is an emulation of real mode within a protected mode task.
RETURN VALUE
On success, zero is returned.
On error, -1 is returned, and
errno
is set appropriately.
ERRORS
- EFAULT
-
This return value is specific to i386 and indicates a problem with getting
user-space data.
- ENOSYS
-
This return value indicates the call is not implemented on the present
architecture.
- EPERM
-
Saved kernel stack exists.
(This is a kernel sanity check; the saved
stack should exist only within vm86 mode itself.)
CONFORMING TO
This call is specific to Linux on 32-bit Intel processors,
and should not be used in programs intended to be portable.
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- RETURN VALUE
-
- ERRORS
-
- CONFORMING TO
-
This document was created by
man2html,
using the manual pages.
Time: 02:54:46 GMT, September 18, 2014


<topicref>
The <topicref>
element identifies a topic (such as a concept, task, or
reference) or other resource. A <topicref>
can contain other
<topicref>
elements, allowing you to express navigation or
table-of-contents hierarchies, as well as implying relationships between a containing
(parent) <topicref>
and its children. You can set the collection type of
a parent <topicref>
to determine how its children are related to each
other. You can also express relationships among <topicref>
elements by
using group and table structures (such as <topicgroup>
and
<reltable>
). Relationships are expressed as links in the output; by
default, each participant in a relationship has links to the other participants in that
relationship.
Category: Basic map elements


 So, I try my best to become a geek that can do any thing with compute ant not limit. I will gratuted from my school, I want to get a job about linux. In my daily life, I often code my program spend much time.
I ever had learn c, c++, data structer, java, jsp, databases etc. I study linux and vim with myself, of course, I had gotten a lot of help from others. So, I can skilled use linux and vim.
The stage of junior I get a lesson that content is for operting system, it attract my eyes, I try myself best to pick up it. So, in the summer vacation I coded the os with a book of code a operting system in 30 days. I have finished it and ran it on my virtual machine. Luckly, everything work well. It has helped me a lot in my C language.
The java is the major course that we need study in our university. In this process, I compelete some web project like online music playing etc. I am acquainted with html, css that help me can do some simple website.
A will gratuted student!


Ethereum (ETH) Stuck In Range, Bitcoin Struggling Near $9K
- Ethereum price declined recently and traded below the $180 support area against the US Dollar.
- Bitcoin is under pressure and it seems to be struggling to stay above the $9,000 support.
- There is a new connecting bearish trend line forming with resistance near $183 on the hourly chart of ETH/USD (data feed via Kraken).
- The pair could start a decent upward move if it breaks the $183 and $185 resistance levels.
Ethereum price is showing a few bearish signs versus the US Dollar, similar to bitcoin. However, ETH price is likely to find a strong support near the $175 level.
Ethereum Price Analysis
In the past few sessions, there was a steady decline in Ethereum below the $185 support area against the US Dollar. Moreover, there was a close below the $185 level and the 100 hourly simple moving average.
Finally, ETH spiked below the $180 support and traded to a new intraday low near $177. Recently, there was an upside correction above the $180 and $182 levels.
Ethereum price managed to move above the 23.6% Fib retracement level of the recent drop from the $194 high to $177 low. However, the previous support near the $185 area acted as a resistance and prevented an upside break.
Besides, the pair failed to test the 50% Fib retracement level of the recent drop from the $194 high to $177 low. More importantly, there is a new connecting bearish trend line forming with resistance near $183 on the hourly chart of ETH/USD.
The 100 hourly SMA is also near the $183 level. Therefore, an upside break above the $183 level might push the price above the $185 resistance. The next key resistance is near the $188 level, followed by $190.
On the downside, an immediate support is near the $178 level. The main support is near the $175 level, where the bulls are likely to take a stand. If there is a downside break below the $175 level, there are chances of more losses below the $172 and $170 levels.
Looking at the chart, Ethereum price is struggling to hold the $180 and $178 supports. It could either break the $185 resistance or extend losses below the $175 support. Having said that, a clear break below the $175 support won’t be easy in the coming sessions. Below $175, the next buy zone could be near the $165 area.
ETH Technical Indicators
Hourly MACD – The MACD for ETH/USD is slowly gaining pace in the bearish zone.
Hourly RSI – The RSI for ETH/USD is currently decline and it is moving lower towards the 40 level.
Major Support Level – $175
Major Resistance Level – $185


Welcome to my Ted Talk
and now, the moment you've all been waiting for
we proudly present for your viewing pleasure
The Microsoft Windows 95 Product Team!
Thank you for coming to my Ted talk
and now, the moment you've all been waiting for
we proudly present for your viewing pleasure
The Microsoft Windows 95 Product Team!
Thank you for coming to my Ted talk


Hadi Ahmed
Executive Choice Award
In recognition for his continual contributions to the Purdue IEEE Student Branch web infrastructure and improvement of the Software Saturdays program.
Corey Auerbach
New Member Choice Award
In recognition for his incredible effort, dedication, and tenacity to the Purdue Aerial Robotics Team and for his bright future as a critical leader.
Eric O'Keefe
Student Choice Award
In recognition by his peers for his steadfast leadership of the Purdue Aerial Robotics Team mechanical team, encouraging creativity and excellence amongst members.
Chris Laszlo
Impact Award
In recognition for his tireless advocacy for Purdue IEEE members as Treasurer and stewardship of the Purdue IEEE budget.


|
OCILIB (C and C++ Driver for Oracle)
4.5.1
|
Exception class handling all OCILIB errors. More...
#include <ocilib.hpp>
Inherits std::exception.
Public Types | |
| enum | ExceptionTypeValues { OracleError = OCI_ERR_ORACLE, OcilibError = OCI_ERR_OCILIB, OracleWarning = OCI_ERR_WARNING } |
| Exception type enumerated values. More... | |
| typedef Enum< ExceptionTypeValues > | ExceptionType |
| Type of Exception. More... | |
Public Member Functions | |
| ostring | GetMessage () const |
| Retrieve the error message. | |
| ExceptionType | GetType () const |
| Return the Exception type. | |
| int | GetOracleErrorCode () const |
| Return the Oracle error code. | |
| int | GetInternalErrorCode () const |
| Return the OCILIB error code. | |
| Statement | GetStatement () const |
| Return the statement within the error occurred. | |
| Connection | GetConnection () const |
| Return the connection within the error occurred. | |
| unsigned int | GetRow () const |
| Return the row index which caused an error during statement execution. More... | |
| const char * | what () const override throw () |
| Override the std::exception::what() method. More... | |
| virtual | ~Exception () throw () |
| Virtual destructor required for deriving from std::exception. | |
Friends | |
| template<class T > | |
| T | Check (T result) |
| Internal usage. Checks if the last OCILIB function call has raised an error. If so, it raises a C++ exception using the retrieved error handle. | |
Exception class handling all OCILIB errors.
This class wraps the OCILIB object handle OCI_Error and its related methods
Definition at line 531 of file ocilib.hpp.
Type of Exception.
Possible values are Exception::ExceptionTypeValues
Definition at line 561 of file ocilib.hpp.
|
inline |
Return the row index which caused an error during statement execution.
Definition at line 967 of file ocilib_impl.hpp.
|
inlineoverride |
Override the std::exception::what() method.
Definition at line 920 of file ocilib_impl.hpp.


val ourIdentity: Party
Specifies the identity to use for this flow. This will be one of the multiple identities that belong to this node. This is the same as calling ourIdentityAndCert.party.
ourIdentityAndCert.party
See Also
net.corda.v5.application.node.MemberInfo


{% extends 'base.html'%} {% load static %} {% block content%} {{block.super}}
{{image.likes|length}} Likes
{{image.caption}}
{{image.comments}}


Vanity Cube is the best platform. I loved its service. The website is so nice I liked it when i first saw it. Mayank is also a nice person because I'm writing this.Vanity Cube is the best platform. I loved its service. The website is so nice I liked it when i first saw it. Mayank is also a nice person because I'm writing this. Vanity Cube is the best platform. I loved its service. The website is so nice I liked it when i first saw it. Mayank is also a nice person because I'm writing this.Vanity Cube is the best platform. I loved its service. The website is so nice I liked it when i first saw it. Mayank is also a nice person because I'm writing this.
Vanity Cube is the best platform. I loved its service. The website is so nice I liked it when i first saw it. Mayank is also a nice person because I'm writing this.Vanity Cube is the best platform. I loved its service. The website is so nice I liked it when i first saw it. Mayank is also a nice person because I'm writing this. Vanity Cube is the best platform. I loved its service. The website is so nice I liked it when i first saw it. Mayank is also a nice person because I'm writing this.Vanity Cube is the best platform. I loved its service. The website is so nice I liked it when i first saw it. Mayank is also a nice person because I'm writing this.


Home
Questions
Correct A Question
Users Info
Log Out
ADD A NEW QUESTIONS
Question:
Chioce 1:
Chioce 2:
Chioce 3:
Chioce 4:
Answer should be either 1 or 2 or 3 or 4:
AddQuestion


Article results for xbox games
Sort by: Relevance | Date | Popularity
Welcome to the Summer Games (765 comments)
Crack your knuckles, stretch those hamstrings, and turn up the volume—the Summer Games have begun!
Horde and Alliance Xbox Avatar T-Shirts (119 comments)
We’ve partnered with Raptr to give away a limited number of Horde
and Alliance t-shirts for your Xbox avatar! All you need to do is sign
up for a free Raptr account and meet the requirements.
Open Beta Coming to PC, PS4™, and Xbox One (560 comments)
Form a team of friends and play Overwatch™ before its launch!
Pre-purchase or preorder now to get early access to the Open Beta for
you and a friend starting May 3, then join the free-for-all from May…
Play Overwatch® FREE November 18–21 on PC, PlayStation® 4, and Xbox One (340 comments)
If you haven't already had the opportunity to suit up and
save the world as one of Overwatch's heroes, now's your
chance .
Play Overwatch® FREE September 9–12 on PlayStation® 4 and Xbox One (110 comments)
If you haven't had a chance to join the fight for the future
yet on PlayStation 4 or Xbox One, then get ready for the perfect
tactical opportunity.
Diablo® III: Reaper of Souls™ – Ultimate Evil Edition™ In Stores Now (100 comments)
Ultimate Evil Edition is available now on the PlayStation®3, PlayStation®4, Xbox 360®, and Xbox One™!
Diablo® III – Coming September 3 to Xbox 360 & PS3™ (636 comments)
On September 3, evil will be reborn on console systems throughout
the world with the release of Diablo® III on the PlayStation™ 3 and Xbox
360® games and entertainment system from Microsoft. That'…
Overwatch PTR Now Available - January 5, 2017 (971 comments)
A new Overwatch patch is currently in development and now available
for testing on the Public Test Region. For information on how to
participate and what changes are included in the upcoming patch, re…
Patch 2.4.3 Now Live (276 comments)
A new anniversary event, item powers, quality of life improvements
and more await in our latest patch! Click through for the details.


To better serve our customers, we offer delivery services throughout the Greater Toronto and Simcoe Areas. If you have any questions about our line of products or any feedback, please contact by phone or email.
Echo Audio
100 king st w set 3400 1st Canadian Place
Toronto ON M5X 1A4 Canada
Phone:<PHONE_NUMBER>


Welcome to Avoid The Mines !
How to play?
Rules? To start a game you have to choose a difficutly.  Try to collect the most points possible to get on top of the leaderboard!
Score :
Levens :
Highscore:
More Information ?


{% extends "base.html" %} {% load bootstrap4 %} {% block title %}Generate NPC{% endblock %} {% block content %}
Fill the parts you want for your NPC. When clicking the generate, the remaining fields will be randomized.


Structure describing parameters affecting mesh cooking. More...
#include <PxCooking.h>
Public Member Functions | |
| PxCookingParams (const PxTolerancesScale &sc) | |
Public Attributes | |
| float | areaTestEpsilon |
| Zero-size area epsilon used in convex hull computation. More... | |
| float | planeTolerance |
| Plane tolerance used in convex hull computation. More... | |
| PxConvexMeshCookingType::Enum | convexMeshCookingType |
| Convex hull creation algorithm. More... | |
| bool | suppressTriangleMeshRemapTable |
| When true, the face remap table is not created. This saves a significant amount of memory, but the SDK will not be able to provide the remap information for internal mesh triangles returned by collisions, sweeps or raycasts hits. More... | |
| bool | buildTriangleAdjacencies |
| When true, the triangle adjacency information is created. You can get the adjacency triangles for a given triangle from getTriangle. More... | |
| bool | buildGPUData |
| When true, addigional information required for GPU-accelerated rigid body simulation is created. This can increase memory usage and cooking times for convex meshes and triangle meshes. More... | |
| PxTolerancesScale | scale |
| Tolerance scale is used to check if cooked triangles are not too huge. This check will help with simulation stability. More... | |
| PxMeshPreprocessingFlags | meshPreprocessParams |
| Mesh pre-processing parameters. Used to control options like whether the mesh cooking performs vertex welding before cooking. More... | |
| PxReal | meshWeldTolerance |
| Mesh weld tolerance. If mesh welding is enabled, this controls the distance at which vertices are welded. If mesh welding is not enabled, this value defines the acceptance distance for mesh validation. Provided no two vertices are within this distance, the mesh is considered to be clean. If not, a warning will be emitted. Having a clean, welded mesh is required to achieve the best possible performance. More... | |
| PxMidphaseDesc | midphaseDesc |
| Controls the desired midphase desc structure for triangle meshes. More... | |
| PxU32 | gaussMapLimit |
| Vertex limit beyond which additional acceleration structures are computed for each convex mesh. Increase that limit to reduce memory usage. Computing the extra structures all the time does not guarantee optimal performance. There is a per-platform break-even point below which the extra structures actually hurt performance. More... | |
Structure describing parameters affecting mesh cooking.
|
inline |
| float PxCookingParams::areaTestEpsilon |
Zero-size area epsilon used in convex hull computation.
If the area of a triangle of the hull is below this value, the triangle will be rejected. This test is done only if PxConvexFlag::eCHECK_ZERO_AREA_TRIANGLES is used.
Default value: 0.06f*PxTolerancesScale.length*PxTolerancesScale.length
Range: (0.0f, PX_MAX_F32)
| bool PxCookingParams::buildGPUData |
When true, addigional information required for GPU-accelerated rigid body simulation is created. This can increase memory usage and cooking times for convex meshes and triangle meshes.
Default value: false
| bool PxCookingParams::buildTriangleAdjacencies |
When true, the triangle adjacency information is created. You can get the adjacency triangles for a given triangle from getTriangle.
Default value: false
| PxConvexMeshCookingType::Enum PxCookingParams::convexMeshCookingType |
Convex hull creation algorithm.
Default value: PxConvexMeshCookingType::eQUICKHULL
| PxU32 PxCookingParams::gaussMapLimit |
Vertex limit beyond which additional acceleration structures are computed for each convex mesh. Increase that limit to reduce memory usage. Computing the extra structures all the time does not guarantee optimal performance. There is a per-platform break-even point below which the extra structures actually hurt performance.
Default value: 32
| PxMeshPreprocessingFlags PxCookingParams::meshPreprocessParams |
Mesh pre-processing parameters. Used to control options like whether the mesh cooking performs vertex welding before cooking.
Default value: 0
| PxReal PxCookingParams::meshWeldTolerance |
Mesh weld tolerance. If mesh welding is enabled, this controls the distance at which vertices are welded. If mesh welding is not enabled, this value defines the acceptance distance for mesh validation. Provided no two vertices are within this distance, the mesh is considered to be clean. If not, a warning will be emitted. Having a clean, welded mesh is required to achieve the best possible performance.
The default vertex welding uses a snap-to-grid approach. This approach effectively truncates each vertex to integer values using meshWeldTolerance. Once these snapped vertices are produced, all vertices that snap to a given vertex on the grid are remapped to reference a single vertex. Following this, all triangles' indices are remapped to reference this subset of clean vertices. It should be noted that the vertices that we do not alter the position of the vertices; the snap-to-grid is only performed to identify nearby vertices.
The mesh validation approach also uses the same snap-to-grid approach to identify nearby vertices. If more than one vertex snaps to a given grid coordinate, we ensure that the distance between the vertices is at least meshWeldTolerance. If this is not the case, a warning is emitted.
Default value: 0.0
| PxMidphaseDesc PxCookingParams::midphaseDesc |
Controls the desired midphase desc structure for triangle meshes.
Default value: PxMeshMidPhase::eBVH33
| float PxCookingParams::planeTolerance |
Plane tolerance used in convex hull computation.
The value is used during hull construction. When a new point is about to be added to the hull it gets dropped when the point is closer to the hull than the planeTolerance. The planeTolerance is increased according to the hull size.
If 0.0f is set all points are accepted when the convex hull is created. This may lead to edge cases where the new points may be merged into an existing polygon and the polygons plane equation might slightly change therefore. This might lead to failures during polygon merging phase in the hull computation.
It is recommended to use the default value, however if it is required that all points needs to be accepted or huge thin convexes are created, it might be required to lower the default value.
Default value: 0.0007f
Range: <0.0f, PX_MAX_F32)
| PxTolerancesScale PxCookingParams::scale |
Tolerance scale is used to check if cooked triangles are not too huge. This check will help with simulation stability.
| bool PxCookingParams::suppressTriangleMeshRemapTable |
When true, the face remap table is not created. This saves a significant amount of memory, but the SDK will not be able to provide the remap information for internal mesh triangles returned by collisions, sweeps or raycasts hits.
Default value: false


Personal
Certifications
Office
Adobe
Coding
Networking
Hardware
Resume
This is my resume that I use to apply to jobs
Cover Letter
This is my cover letter that I use to apply to jobs
Career Plan
This images shows all the key goals I have for my future
Follow Up Letter
A letter to thank my interviewer


Understanding Flutter PopupMenuButton Widget
Posted on July 19, 2019 in Flutter
Target Audience: Beginner
Recipe: Implementing "Settings" menu using PopupMenuButton widget in Stateless vs Stateful manner.
Focus Widget: PopupMenuButton Widget
Goal:
- Understanding the difference between Stateful vs Stateless PopupMenuButton widget implementations.
- "Settings" menu using PopupMenuButton to display four menu items : 'Home', 'Github', 'Videos' and 'Jobs'.
PopupMenuButton (Stateless) workflow:
PopupMenuButton (Stateful) workflow:
Checkout the companion video tutorial:
In this recipe, I'll show you how to use PopupMenuButton widget as Stateless and Stateful widgets, and when to use one over another.
As we know that Stateless widgets are passed in to values/properties when they're initiated, and don't change thereafter. They are immutable and can't change their properties dynamically. For example, when a screen or page is created as a Stateless widget, it can't update properties or state of its children widgets.
For instance, when you're implementing a counter, and expect a button to update the number of times it's tapped on page's body (Text) widget, you may want to use Stateful widget rather a Stateless widget.
A good example of Stateless widget is RaisedButton
. Certain properties are passed into RaisedButton when initializing, which remains unchanged during the lifecycle of the widget like color, size etc.
For demonstration purposes, I'll create two pages with Settings menu in AppBar. This Settings menu will have few pre-defined menu-items.
First page inherits Stateless
widget. Selecting different options from Settings menu, would happily print value on the console, but wouldn't update any other widget on that given page. However, we can navigate to another page when a selection is made.
Second page inherits Stateful
widget. Choosing an option from Settings menu will update the selection in body's Text widget of the same screen.
Let's go ahead and implement four menu items ('Home', 'Github', 'Videos' and 'Jobs') for "Settings" menu. In case you're not aware what Settings menu is referred in the Material design world: it's the three vertical dots in top-right corner of 'AppBar'. This page is simple.
It has three main widgets:
- AppBar: AppBar contains Settings vertical dotted icon.
- PopupMenuButton: Settings menu uses this widget to list all options.
- Body: Current choice is updated in body part in Text widget.
Expected behavior is that whenever a choice is selected in Settings menu, it gets printed page's body area. If "Github" option is selected, then "Github" should be printed in body. We'll also print this chosen selection on console/terminal to make sure that control is coming at the right place.
PopupMenuButton (Stateless)
Choosing an option from Settings menu will open the selected link in WebView.
Choosing "Github" option from menu:
Github link opened in WebView:
This is how page for Stateless variation of PopupMenuButton would look like:
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('PopupMenuButton (Stateless)'),
actions: <Widget>[
PopupMenuButton(
onSelected: (value) {
//print the selected option
print(value);
//Update the current choice.
//However, this choice won't be updated in body section since it's a Stateless widget.
choice = value.toString();
},
itemBuilder: (BuildContext context) {
return NavLinks.values.map((link) {
return PopupMenuItem(
value: link,
child: Text(displayString(link)),
);
}).toList();
},
),
],
),
body: Center(
child: Text(
//Print the current choice
choice,
style: TextStyle(fontSize: 30),
),
),
);
}
As I've mentioned above, choosing an option can be acknowledged that an option has been picked by printing current selection on console with help of print(value)
. In this case body's default text doesn't change. However, current selection is printed on terminal correctly. Basically, this(Stateless) type of widget is not capable of handling state of the widget and does justice to its name being Stateless :)
To make better sense for menu item selection. Let's open those links in a WebView.
onSelected: (value) {
//print the selected option
print(value);
//Update the current choice.
//However, this choice won't be updated in body section since it's a Stateless widget.
choice = displayString(value);
Navigator.pushNamed(context, WEBVIEW,
arguments: WebViewArguments(
title: displayString(value), url: linkUrl(value)));
}
WEBVIEW
tells system how to find WebView page. Checkout the router.dart to get better understanding of navigation and routing.
Note: To open WebView for iOS, you would need to add key io.flutter.embedded_views_preview
and value YES
in Info.plist
.
Now, let's move on to observe Stateful widget's behavior.
PopupMenuButton (Stateful)
Choosing an option from Settings menu will update the Text
widget in body of the page.
Choosing "Github" option from menu:
Displaying selected option Text widget:
This is how page for Stateful variation of PopupMenuButton would look like:
class PopupMenuButtonWidgetStateFul extends StatefulWidget {
@override
State<StatefulWidget> createState() => _PopupMenuButtonWidgetState();
}
class _PopupMenuButtonWidgetState extends State {
String choice = "Click Settings to make your selection";
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('PopupMenuButton (Stateful)'),
actions: <Widget>[
PopupMenuButton(
onSelected: (NavLinks value) {
setState(() {
//print the selected option
print(value);
//Update the current choice.
choice = displayString(value);
});
},
itemBuilder: (BuildContext context) {
return NavLinks.values.map((link) {
return PopupMenuItem(
value: link,
child: Text(displayString(link)),
);
}).toList();
},
),
],
),
body: Center(
child: Text(choice, style: TextStyle(fontSize: 30),),
),
);
}
}
Notice the setState()
method. All Stateful widgets implement createState()
and define a state of the widget that it could be in at a given point of time. A child widget doesn't get updated unless it's being updated inside setState()
. You may notice that I'm updating the current selection in setState()
method as well.
Note: displayString(NavLinks link)
and String linkUrl(NavLinks link)
are convenience methods.
Conclusion
In nutshell, you may want to use Stateful
widgets when you want parts of the screen or children widgets to update their values/properties.
Stateless
widgets are immutable. They can be used in cases where properties of widgets don't need to be updated frequently, and/or to implement page navigation as we did in above example for navigating to WebView pages for chosen menu item url.
Source code repo:
- Native Apps (Android / iOS) recipe source code is available here
- Web Apps (Hummingbird) recipe source code is available here
References:
- Hummingbird PopupMenuButton
- PopupMenuButton Widget
- WebView for Flutter
- Stateless Vs Stateful widgets
Happy cooking with Flutter :)
Liked the article ? Couldn't find a topic of your interest ? Please leave comments or email me about topics you would like me to write ! BTW I love cupcakes and coffee both :)
Follow me at twitter


$10.99
SIZE: S
COLOR: CRAZYBERRY
QTY: 1
$7.99
SIZE: M
COLOR: STRAWBERRY
$51.65
COLOR: BLACKBERRY
Subtotal
$81.62
Discount
$0.00
Shipping


HOME
REVOLUTION
products
Fresh Produce
Grocery
Dairy Products
ADVANTAGES
ABOUT US
SIGNUP
CART
CHECKOUT
FEEDBACK
Milk
Price: $3.29
Add to Cart
Butter
Price: $8.75
Add to Cart
Swiss Cheese
Price: $3.29
Add to Cart
Milk Chocolates
Price: $5.29
Add to Cart
Ice Cream Sundae
Price: $5.78
Add to Cart
Condensed Milk
Price: $7.23
Add to Cart
Rasagulla (Indian Sweet)
Price: $6.25
Add to Cart
Whipped Cream
Price: $8.25
Add to Cart
Yogurt
Price: $7.29
Add to Cart