---
title: HEIC Converter
subtitle: Convert HEIC images to JPEG or PNG
description: HEIC Converter is a macOS app that makes it easy to quickly convert images in the HEIC format to JPEG or PNG. HEIC is Apple's new default image format in iOS 11, replacing JPEG. HEIC uses more advanced and modern compression methods to achieve much smaller file sizes with the same visual quality. Unfortunately, HEIC is a very new format and not yet supported outside of iOS and macOS. This app makes it possible to share your HEIC images on the web or with non-Apple users.
If you don't have any HEIC images, you can try the app out with this one.
type: macOS
date: 2017-10-09
---


| Date/Time | {{(transaction?.timestamp * 1000) | date:'dd/MMM/y HH:mm'}} | Address |
{{transaction?.address}}
|
Blockhash |
{{transaction?.blockHash}}
|
Transaction ID |
{{transaction?.txid}}
|
Amount (Sats) | 0 || transaction?.amount === 0" fxLayoutAlign="end center">{{transaction?.amount | number}} ({{transaction?.amount * -1 | number}}) | Fees (Sats) | {{transaction?.fees | number}} | Confirmations | {{transaction?.confirmations | number}} |
|
No transaction available. Getting transactions... {{errorMessage}} |
|---|


Gitsmachine.github.io/epigram-1.html 6c96da2 4 days ago @itsmachine itsmachine Rename epigram-1 to epigram-1.html 1 contributor RawBlameHistory 88 lines (76 sloc) 2.07 KB
Such an unusual sentence.
Two subjects, one verb.
The most formidable of ambiguities.
I look into your eyes
And I just say it:
"God, I love you".
Yes,
You, the true father.
You, the omnipresent possibility.
You, the artesan of our fates.
You, the tracks of our train.
You, the composer of our songs.
You, the river in our hearts.
God, I love you.
And, yes,
You, the spider I have no fears.
You, the living chores of my soul.
You, the tear I get to wipe.
You, the only music I care to sing.
You, the true eyes I can't escape.
You, the one guardian of my heart.
God, I love you.


Report
Report Name
Discription
Report 1
Download time-series data for any sensor
View
Report 2
N/A
View
Back to Dashboard


| DOSE: T+ 0:00 |
125 mg |
insufflated |
MDPV |
(powder / crystals) |
| T+ 2:15 |
75 mg |
insufflated |
MDPV |
(powder / crystals) |
| T+ 6:15 |
75 mg |
insufflated |
MDPV |
(powder / crystals) |
| T+ 7:15 |
50 mg |
insufflated |
MDPV |
(powder / crystals) |
[Erowid Note: The following report documents the ingestion of an unusually high and potentially dangerous dose of MDPV. It is possible that the 'White Rush' material described was not pure MDPV. We have chosen to include this report to help document the dose range, but its inclusion does not imply that this dose is safe.]
4:30 PM: At this time my friend and I have purchased and are ready to insufflate 125mg each of MDPV (Sold as White Rush). The White Rush is sold in 250mg packages so we thought it would be best to just split a pack. After only about 3-5 minutes later I could begin to feel the chemical. I suddenly had the urge to walk somewhere; I couldnít stand still. Then for the next 15 minutes was the coming up phase of the chemical, and I could literally feel every minute becoming happier and having more energy.
5:00 PM: I was already at the plateau, however, it was not going anywhere anytime soon. Snorting this much gave me a very similar feeling of ecstasy. My mind was going at a hundred miles an hour, I was very easily distracted by even the smallest things, I could not stop talking, textures felt great, and I felt as if I was the happiest person in the entire world. These feelings all were going to last for quite some time.
6:45 PM: The feelings of ecstasy had started to wear off for me, however, I still felt as if I was coming off of a line of coke. At this point we are ready to have the ecstasy feeling back again so we go buy more and make ourselves a small line. This time several other of our friends join in and we all snort about a 75 mg line.
7:00 PM: Just arrived at a local bar with the same friends, the feelings of being very social, very happy, and rubbing everything in sight had returned already. Everyone is about on the same page, which makes all of us having conversations virtually impossible. In a surrounding such as a bar I found it a lot easier to be distracted. A thousand thoughts were flying through my head at any single moment. However, this time I did not feel the need to have to get up and walk. Although I wanted to get up and talk to people around the bar, I was perfectly content sitting in my chair.
10:00 PM: This is about the time when everything goes south. Little did I know at this point, that the more I redose on MDPV it exponentially adds time to how long it's going to last. However, at about this time I went from being the happiest person in the world to somewhat of a zombie. I was not nearly as happy as I was earlier in the day or even a few hours prior. The want to talk to everyone around me had completely disappeared. In fact, I didnít want to talk to anyone besides my friends at the same table as me. Being the naÔve person I am, I thought ďletís do another line to be happy againĒ...unfortunately it does not work that way.
10:45 PM: Because of our sudden decrease in mood my buddy, that had did a line with me the first time, and I go out to his car for the third line of the day. Again, this was about 75mg. I knew when it came to 10:50 or even 11:00 and I wasnít any happier that I shouldnít have done that third line.
11:15 PM: I am almost completely zombied out. My speech was starting to become monotone, I had no interest in talking with anyone, and I was staring off into space. This is when we decide to leave the bar and head home.
11:45 PM: After all the complaining Iím doing because the last line didnít do anything for me, another friend of mine offers me about a 50 mg line back at home. So, again, looking for my now bad mood to go away and something to pick me up, I take it.
12:15 AM: I am staring off into nothingness, it is now impossible to hold a conversation with anyone, I was giving one word answers to questions. My head felt completely scrambled, I could not generate a complete sentence in my head.  My pupils were huge and I couldnít close my eyes for the life of me. I wanted to go to bed really bad but at this point it was impossible.
4:30 AM: Realized I had been messed up on this stuff for 12 hours.
6:00 AM: Sun was starting to come up and I had no choice but to watch it. Still wide awake, and now pissed off because all I wanted was bed.
4:00 PM: It wasnít until this time that even as hard as it was for me to close my eyes, that I could actually keep myself asleep for a half hour. After the nap, I wake up and still feel jittery and very very tired but I could make sense out of what I was trying to say a lot easier. When I wake up, realize this stuff had me messed up for 24 hours.
10:00 PM: Yes, thatís right. It was not until 10 PM the next day that I actually fell asleep.
Final Notes: I believe MDPV would be very fun to use in controlled amounts. My first line was an absolute blast, however, it should have been there that I stopped. I found that my body seemed to have a very quick tolerance to the chemical and that is what caused me to fiend. Each time I redosed on the chemical it had a less effect. Also the more I ingest, the longer it will last. It seemed to be similar to ecstasy in higher doses and similar to coke on smaller doses. Very fun chemical, however, as much as you think you want to, do not redose in the same night.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Package opennlp.tools.postag
Package related to part-of-speech tagging.
-
Interface Summary Interface Description MutableTagDictionary Interface that allowsTagDictionary
entries to be added and removed.POSContextGenerator The interface for a context generator for the POS Tagger.POSTagger The interface for part of speech taggers.POSTaggerEvaluationMonitor TagDictionary Interface to determine which tags are valid for a particular word based on a tag dictionary. -
Class Summary Class Description ConfigurablePOSContextGenerator A context generator for the POS Tagger.DefaultPOSContextGenerator A context generator for the POS Tagger.DefaultPOSSequenceValidator POSDictionary Provides a means of determining which tags are valid for a particular word based on a tag dictionary read from a file.POSEvaluator ThePOSEvaluator
measures the performance of the givenPOSTagger
with the provided referencePOSSample
s.POSModel POSSample Represents an pos-tagged sentence.POSSampleEventStream POSSampleSequenceStream POSTaggerCrossValidator POSTaggerFactory The factory that provides POS Tagger default implementations and resourcesPOSTaggerFactory.POSDictionarySerializer POSTaggerME A part-of-speech tagger that uses maximum entropy.WordTagSampleStream A stream filter which reads a sentence per line which contains words and tags in word_tag format and outputs aPOSSample
objects.


If you no longer wish to proceed with your application you can withdraw at any time.
Withdraw application@import connectors.ExchangeObjects.OnlineTest @import models.page.DashboardPage @import models.page.DashboardPage._ @(usr: CachedData, dashboardPage: DashboardPage, onlineTest: Option[OnlineTest] = None, allocationDetails: Option[connectors.AllocationExchangeObjects.AllocationDetails] = None)(implicit request: Request[_], flash: Flash, user: Option[CachedData], feedbackUrl: String) @import connectors.AllocationExchangeObjects._ @import models.ApplicationData.ApplicationStatus._ @import org.joda.time.format._ @import org.joda.time.{DateTime, LocalDate} @import security.Roles._ @import security.RoleUtils._ @import security.QuestionnaireRoles._ @import views.html.widgets.onlineTestProgress @confirmAllocationExpired = @{ allocationDetails match { case Some(AllocationDetails(_, _, _, Some(expirationDate))) if LocalDate.now().isAfter(expirationDate) => true case _ => false } } @date(date: LocalDate) = @{ DateTimeFormat.forPattern("dd MMMM yyyy").print(date) } @dateTime(date: DateTime) = @{ DateTimeFormat.forPattern("d MMMM yyyy, h:mma") .print(date.toLocalDateTime) .replace("AM", "am").replace("PM","pm") } @renderFullName(user: CachedData) = { @user.user.firstName @user.user.lastName } @noApp(body: Html) = { @if(ApplicationStartRole.isAuthorized(usr)) {@body} } @inProgress(flag: Boolean = true)(body: Html) = { @if(!(flag ^ PersonalDetailsRole.isAuthorized(usr))) { @body } } @withdraw(flag: Boolean = true)(body: Html) = { @if(!(flag ^ WithdrawApplicationRole.isAuthorized(usr))) {@body} } @withdrawn(flag: Boolean = true)(body: Html) = { @if(!(flag ^ WithdrawnApplicationRole.isAuthorized(usr))) {@body} } @renderProgressElement(showLink: Boolean, checked: Boolean, id: String)(link: Call)(body: Html) = {
@renderFullName(usr)
Your assessment is booked for
@dateTime(aDetails.attendanceDateTime) at @aDetails.location @aDetails.venueDescription
See the locations
If you're unable to attend, let us know.
Find out more about the assessment day
} } else { @if(UnconfirmedAllocatedCandidateRole.isAuthorized(usr)){ @allocationDetails.map { aDetails => @if(confirmAllocationExpired) {You failed to confirm your assessment centre in time.
Contact us to discuss your options if you're still interested in attending an assessment centre.
} else {Your assessment is booked for
@dateTime(aDetails.attendanceDateTime) at @aDetails.location @aDetails.venueDescription
See the locations
Can you attend on this date and time?
@aDetails.expirationDate.map{ expirationDate =>
Confirm by 11:59pm on @date(expirationDate) or you'll lose your booking.
}
If you're unable to attend, let us know.
Find out more about the assessment day
} } } else { @if(AssessmentCentreFailedNotifiedRole.isAuthorized(usr) && onlineTest.exists(_.pdfReportAvailable)) {Thank you for attending the Fast Track assessment centre.
Unfortunately on this occasion you didn't reach the pass mark for the Fast Track scheme and we won't be taking your application further.
From December 2016, after we've finished allocating placements, we can give you feedback on your performance at the assessment centre. Please contact us if you'd like feedback.
Thank you for your interest in the Fast Track programme and we wish you every success for the future.
} else { @if(AssessmentCentrePassedNotifiedRole.isAuthorized(usr) && onlineTest.exists(_.pdfReportAvailable)) {Congratulations! We're pleased to let you know you've successfully passed the Fast Track assessment.
We'll match you to a role and then we'll be in touch to confirm your allocated department and location.
We'll also ask you to give us the information we need to complete a preappointment security check. Your offer depends upon successful completion of the checks. If you give information you know is false, or you withhold any relevant information, your application may be rejected. Or, if you've already been appointed, you may be dismissed.
From December 2016, after we've finished allocating placements, we can give you feedback on your performance at the assessment centre. Please contact us if you'd like feedback.
We recommend you don't resign from any employment until you've received a formal offer of appointment. If you withdraw your application, it won't be possible to re-instate your application at a later date.
} else { @if(AssessmentCentreFailedToAttendRole.isAuthorized(usr)) {You did not attend your assessment. Contact us to discuss your options if you're still interested in applying.
} else {If you pass the online tests, you'll be invited to attend an assessment centre.
} } } } }We appreciate this may be disappointing, however the Civil Service does offer other career opportunities. You can find details at: www.civilservice.gov.uk/jobs.
You'll be able to reapply for Fast Track next year, alternatively use the find an apprenticeship service to search for other apprenticeships in England.
} else {We'll contact you soon to tell you about your role, scheme, department and location. Make sure to regularly check your email inbox for messages from us.
Find out more about the on boarding process
} else {We aim to let you know the outcome of your assessment by October 2016.
} }If you no longer wish to proceed with your application you can withdraw at any time.
Withdraw application


{% extends prototype.current.layout %} {% set page = { title: 'index', dev: true, html_classes: ['full-width'] } %} {% block main %}
Nb. Intensive maintenance to follow
To develop and support delivery of benefit cap policy.
The Benefit Cap limits the amount of Benefit working age households can recieve, so that workless households will no longer be entitled to recieve more than £20,000 in benefit (£13,400 for single adults with no children) and £23,000 in Greater London (£15,410 for single adults with no children).


It seems that you are running the application in a Docker container.
This setting should not be changed in docker.
Make sure, that you know what you are doing.
{{state.tags?.unit}}
Name
Tile Url*
[Experimental]
{{description}} ';' separated list.See
#{{state.tags?.githubIssue}}. Reset database after changing this settings! Restart server after changing this settings!


Bob's Bakery - We love cakes too!!!
Home
Menu
Breads
Cakes
Other
About
Awards
Contact
Our selection of Cakes
Cakes, Cakes, and more Cakes.......
Birthday cake
Wedding cake
Novelty cake
New Delivery Service!!!
We now deliver to the following towns
Bray
Greystones
Enniskerry
Shankill
you can also find us on
Facebook


/** * @author Richard Davey<EMAIL_ADDRESS>* @copyright 2014 Photon Storm Ltd. * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License} */ /** * The Physics Body is typically linked to a single Sprite and defines properties that determine how the physics body is simulated. * These properties affect how the body reacts to forces, what forces it generates on itself (to simulate friction), and how it reacts to collisions in the scene. * In most cases, the properties are used to simulate physical effects. Each body also has its own property values that determine exactly how it reacts to forces and collisions in the scene. * By default a single Rectangle shape is added to the Body that matches the dimensions of the parent Sprite. See addShape, removeShape, clearShapes to add extra shapes around the Body. * Note: When bound to a Sprite to avoid single-pixel jitters on mobile devices we strongly recommend using Sprite sizes that are even on both axis, i.e. 128x128 not 127x127. * * @class Phaser.Physics.P2.Body * @classdesc Physics Body Constructor * @constructor * @param {Phaser.Game} game - Game reference to the currently running game. * @param {Phaser.Sprite} [sprite] - The Sprite object this physics body belongs to. * @param {number} [x=0] - The x coordinate of this Body. * @param {number} [y=0] - The y coordinate of this Body. * @param {number} [mass=1] - The default mass of this Body (0 = static). */ Phaser.Physics.P2.Body = function (game, sprite, x, y, mass) { sprite = sprite || null; x = x || 0; y = y || 0; if (typeof mass === 'undefined') { mass = 1; } /** * @property {Phaser.Game} game - Local reference to game. */ this.game = game; /** * @property {Phaser.Physics.P2} world - Local reference to the P2 World. */ this.world = game.physics.p2; /** * @property {Phaser.Sprite} sprite - Reference to the parent Sprite. */ this.sprite = sprite; /** * @property {number} type - The type of physics system this body belongs to. */ this.type = Phaser.Physics.P2JS; /** * @property {Phaser.Point} offset - The offset of the Physics Body from the Sprite x/y position. */ this.offset = new Phaser.Point(); /** * @property {p2.Body} data - The p2 Body data. * @protected */ this.data = new p2.Body({ position: [ this.world.pxmi(x), this.world.pxmi(y) ], mass: mass }); this.data.parent = this; /** * @property {Phaser.InversePointProxy} velocity - The velocity of the body. Set velocity.x to a negative value to move to the left, position to the right. velocity.y negative values move up, positive move down. */ this.velocity = new Phaser.Physics.P2.InversePointProxy(this.world, this.data.velocity); /** * @property {Phaser.InversePointProxy} force - The force applied to the body. */ this.force = new Phaser.Physics.P2.InversePointProxy(this.world, this.data.force); /** * @property {Phaser.Point} gravity - A locally applied gravity force to the Body. Applied directly before the world step. NOTE: Not currently implemented. */ this.gravity = new Phaser.Point(); /** * Dispatched when the shape/s of this Body impact with another. The event will be sent 2 parameters, this Body and the impact Body. * @property {Phaser.Signal} onImpact */ this.onImpact = new Phaser.Signal(); /** * Dispatched when a first contact is created between shapes in two bodies. This event is fired during the step, so collision has already taken place. * The event will be sent 4 parameters: The body it is in contact with, the shape from this body that caused the contact, the shape from the contact body and the contact equation data array. * @property {Phaser.Signal} onBeginContact */ this.onBeginContact = new Phaser.Signal(); /** * Dispatched when contact ends between shapes in two bodies. This event is fired during the step, so collision has already taken place. * The event will be sent 3 parameters: The body it is in contact with, the shape from this body that caused the contact and the shape from the contact body. * @property {Phaser.Signal} onEndContact */ this.onEndContact = new Phaser.Signal(); /** * @property {array} collidesWith - Array of CollisionGroups that this Bodies shapes collide with. * @private */ this.collidesWith = []; /** * @property {boolean} removeNextStep - To avoid deleting this body during a physics step, and causing all kinds of problems, set removeNextStep to true to have it removed in the next preUpdate. */ this.removeNextStep = false; this._collideWorldBounds = true; /** * @property {object} _bodyCallbacks - Array of Body callbacks. * @private */ this._bodyCallbacks = {}; /** * @property {object} _bodyCallbackContext - Array of Body callback contexts. * @private */ this._bodyCallbackContext = {}; /** * @property {object} _groupCallbacks - Array of Group callbacks. * @private */ this._groupCallbacks = {}; /** * @property {object} _bodyCallbackContext - Array of Grouo callback contexts. * @private */ this._groupCallbackContext = {}; /** * @property {Phaser.Physics.P2.BodyDebug} debugBody - Reference to the debug body. */ this.debugBody = null // Set-up the default shape if (sprite) { this.setRectangleFromSprite(sprite); this.game.physics.p2.addBody(this); } }; Phaser.Physics.P2.Body.prototype = { /** * Sets a callback to be fired any time a shape in this Body impacts with a shape in the given Body. The impact test is performed against body.id values. * The callback will be sent 4 parameters: This body, the body that impacted, the Shape in this body and the shape in the impacting body. * Note that the impact event happens after collision resolution, so it cannot be used to prevent a collision from happening. * It also happens mid-step. So do not destroy a Body during this callback, instead set safeDestroy to true so it will be killed on the next preUpdate. * * @method Phaser.Physics.P2.Body#createBodyCallback * @param {Phaser.Sprite|Phaser.TileSprite|Phaser.Physics.P2.Body|p2.Body} object - The object to send impact events for. * @param {function} callback - The callback to fire on impact. Set to null to clear a previously set callback. * @param {object} callbackContext - The context under which the callback will fire. */ createBodyCallback: function (object, callback, callbackContext) { var id = -1; if (object['id']) { id = object.id; } else if (object['body']) { id = object.body.id; } if (id > -1) { if (callback === null) { delete (this._bodyCallbacks[id]); delete (this._bodyCallbackContext[id]); } else { this._bodyCallbacks[id] = callback; this._bodyCallbackContext[id] = callbackContext; } } }, /** * Sets a callback to be fired any time this Body impacts with the given Group. The impact test is performed against shape.collisionGroup values. * The callback will be sent 4 parameters: This body, the body that impacted, the Shape in this body and the shape in the impacting body. * This callback will only fire if this Body has been assigned a collision group. * Note that the impact event happens after collision resolution, so it cannot be used to prevent a collision from happening. * It also happens mid-step. So do not destroy a Body during this callback, instead set safeDestroy to true so it will be killed on the next preUpdate. * * @method Phaser.Physics.P2.Body#createGroupCallback * @param {Phaser.Physics.CollisionGroup} group - The Group to send impact events for. * @param {function} callback - The callback to fire on impact. Set to null to clear a previously set callback. * @param {object} callbackContext - The context under which the callback will fire. */ createGroupCallback: function (group, callback, callbackContext) { if (callback === null) { delete (this._groupCallbacks[group.mask]); delete (this._groupCallbacksContext[group.mask]); } else { this._groupCallbacks[group.mask] = callback; this._groupCallbackContext[group.mask] = callbackContext; } }, /** * Gets the collision bitmask from the groups this body collides with. * * @method Phaser.Physics.P2.Body#getCollisionMask * @return {number} The bitmask. */ getCollisionMask: function () { var mask = 0; if (this._collideWorldBounds) { mask = this.game.physics.p2.boundsCollisionGroup.mask; } for (var i = 0; i < this.collidesWith.length; i++) { mask = mask | this.collidesWith[i].mask; } return mask; }, /** * Updates the collisionMask. * * @method Phaser.Physics.P2.Body#updateCollisionMask * @param {p2.Shape} [shape] - An optional Shape. If not provided the collision group will be added to all Shapes in this Body. */ updateCollisionMask: function (shape) { var mask = this.getCollisionMask(); if (typeof shape === 'undefined') { for (var i = this.data.shapes.length - 1; i >= 0; i--) { this.data.shapes[i].collisionMask = mask; } } else { shape.collisionMask = mask; } }, /** * Sets the given CollisionGroup to be the collision group for all shapes in this Body, unless a shape is specified. * This also resets the collisionMask. * * @method Phaser.Physics.P2.Body#setCollisionGroup * @param {Phaser.Physics.CollisionGroup} group - The Collision Group that this Bodies shapes will use. * @param {p2.Shape} [shape] - An optional Shape. If not provided the collision group will be added to all Shapes in this Body. */ setCollisionGroup: function (group, shape) { var mask = this.getCollisionMask(); if (typeof shape === 'undefined') { for (var i = this.data.shapes.length - 1; i >= 0; i--) { this.data.shapes[i].collisionGroup = group.mask; this.data.shapes[i].collisionMask = mask; } } else { shape.collisionGroup = group.mask; shape.collisionMask = mask; } }, /** * Clears the collision data from the shapes in this Body. Optionally clears Group and/or Mask. * * @method Phaser.Physics.P2.Body#clearCollision * @param {boolean} [clearGroup=true] - Clear the collisionGroup value from the shape/s? * @param {boolean} [clearMask=true] - Clear the collisionMask value from the shape/s? * @param {p2.Shape} [shape] - An optional Shape. If not provided the collision data will be cleared from all Shapes in this Body. */ clearCollision: function (clearGroup, clearMask, shape) { if (typeof shape === 'undefined') { for (var i = this.data.shapes.length - 1; i >= 0; i--) { if (clearGroup) { this.data.shapes[i].collisionGroup = null; } if (clearMask) { this.data.shapes[i].collisionMask = null; } } } else { if (clearGroup) { shape.collisionGroup = null; } if (clearMask) { shape.collisionMask = null; } } if (clearGroup) { this.collidesWith.length = 0; } }, /** * Adds the given CollisionGroup, or array of CollisionGroups, to the list of groups that this body will collide with and updates the collision masks. * * @method Phaser.Physics.P2.Body#collides * @param {Phaser.Physics.CollisionGroup|array} group - The Collision Group or Array of Collision Groups that this Bodies shapes will collide with. * @param {function} [callback] - Optional callback that will be triggered when this Body impacts with the given Group. * @param {object} [callbackContext] - The context under which the callback will be called. * @param {p2.Shape} [shape] - An optional Shape. If not provided the collision mask will be added to all Shapes in this Body. */ collides: function (group, callback, callbackContext, shape) { if (Array.isArray(group)) { for (var i = 0; i < group.length; i++) { if (this.collidesWith.indexOf(group[i]) === -1) { this.collidesWith.push(group[i]); if (callback) { this.createGroupCallback(group[i], callback, callbackContext); } } } } else { if (this.collidesWith.indexOf(group) === -1) { this.collidesWith.push(group); if (callback) { this.createGroupCallback(group, callback, callbackContext); } } } var mask = this.getCollisionMask(); if (typeof shape === 'undefined') { for (var i = this.data.shapes.length - 1; i >= 0; i--) { this.data.shapes[i].collisionMask = mask; } } else { shape.collisionMask = mask; } }, /** * Moves the shape offsets so their center of mass becomes the body center of mass. * * @method Phaser.Physics.P2.Body#adjustCenterOfMass */ adjustCenterOfMass: function () { this.data.adjustCenterOfMass(); }, /** * Apply damping, see http://code.google.com/p/bullet/issues/detail?id=74 for details. * * @method Phaser.Physics.P2.Body#applyDamping * @param {number} dt - Current time step. */ applyDamping: function (dt) { this.data.applyDamping(dt); }, /** * Apply force to a world point. This could for example be a point on the RigidBody surface. Applying force this way will add to Body.force and Body.angularForce. * * @method Phaser.Physics.P2.Body#applyForce * @param {number} force - The force to add. * @param {number} worldX - The world x point to apply the force on. * @param {number} worldY - The world y point to apply the force on. */ applyForce: function (force, worldX, worldY) { this.data.applyForce(force, [this.world.pxm(worldX), this.world.pxm(worldY)]); }, /** * Sets the force on the body to zero. * * @method Phaser.Physics.P2.Body#setZeroForce */ setZeroForce: function () { this.data.setZeroForce(); }, /** * If this Body is dynamic then this will zero its angular velocity. * * @method Phaser.Physics.P2.Body#setZeroRotation */ setZeroRotation: function () { this.data.angularVelocity = 0; }, /** * If this Body is dynamic then this will zero its velocity on both axis. * * @method Phaser.Physics.P2.Body#setZeroVelocity */ setZeroVelocity: function () { this.data.velocity[0] = 0; this.data.velocity[1] = 0; }, /** * Sets the Body damping and angularDamping to zero. * * @method Phaser.Physics.P2.Body#setZeroDamping */ setZeroDamping: function () { this.data.damping = 0; this.data.angularDamping = 0; }, /** * Transform a world point to local body frame. * * @method Phaser.Physics.P2.Body#toLocalFrame * @param {Float32Array|Array} out - The vector to store the result in. * @param {Float32Array|Array} worldPoint - The input world vector. */ toLocalFrame: function (out, worldPoint) { return this.data.toLocalFrame(out, worldPoint); }, /** * Transform a local point to world frame. * * @method Phaser.Physics.P2.Body#toWorldFrame * @param {Array} out - The vector to store the result in. * @param {Array} localPoint - The input local vector. */ toWorldFrame: function (out, localPoint) { return this.data.toWorldFrame(out, localPoint); }, /** * This will rotate the Body by the given speed to the left (counter-clockwise). * * @method Phaser.Physics.P2.Body#rotateLeft * @param {number} speed - The speed at which it should rotate. */ rotateLeft: function (speed) { this.data.angularVelocity = this.world.pxm(-speed); }, /** * This will rotate the Body by the given speed to the left (clockwise). * * @method Phaser.Physics.P2.Body#rotateRight * @param {number} speed - The speed at which it should rotate. */ rotateRight: function (speed) { this.data.angularVelocity = this.world.pxm(speed); }, /** * Moves the Body forwards based on its current angle and the given speed. * The speed is represented in pixels per second. So a value of 100 would move 100 pixels in 1 second (1000ms). * * @method Phaser.Physics.P2.Body#moveForward * @param {number} speed - The speed at which it should move forwards. */ moveForward: function (speed) { var magnitude = this.world.pxmi(-speed); var angle = this.data.angle + Math.PI / 2; this.data.velocity[0] = magnitude * Math.cos(angle); this.data.velocity[1] = magnitude * Math.sin(angle); }, /** * Moves the Body backwards based on its current angle and the given speed. * The speed is represented in pixels per second. So a value of 100 would move 100 pixels in 1 second (1000ms). * * @method Phaser.Physics.P2.Body#moveBackward * @param {number} speed - The speed at which it should move backwards. */ moveBackward: function (speed) { var magnitude = this.world.pxmi(-speed); var angle = this.data.angle + Math.PI / 2; this.data.velocity[0] = -(magnitude * Math.cos(angle)); this.data.velocity[1] = -(magnitude * Math.sin(angle)); }, /** * Applies a force to the Body that causes it to 'thrust' forwards, based on its current angle and the given speed. * The speed is represented in pixels per second. So a value of 100 would move 100 pixels in 1 second (1000ms). * * @method Phaser.Physics.P2.Body#thrust * @param {number} speed - The speed at which it should thrust. */ thrust: function (speed) { var magnitude = this.world.pxmi(-speed); var angle = this.data.angle + Math.PI / 2; this.data.force[0] += magnitude * Math.cos(angle); this.data.force[1] += magnitude * Math.sin(angle); }, /** * Applies a force to the Body that causes it to 'thrust' backwards (in reverse), based on its current angle and the given speed. * The speed is represented in pixels per second. So a value of 100 would move 100 pixels in 1 second (1000ms). * * @method Phaser.Physics.P2.Body#rever * @param {number} speed - The speed at which it should reverse. */ reverse: function (speed) { var magnitude = this.world.pxmi(-speed); var angle = this.data.angle + Math.PI / 2; this.data.force[0] -= magnitude * Math.cos(angle); this.data.force[1] -= magnitude * Math.sin(angle); }, /** * If this Body is dynamic then this will move it to the left by setting its x velocity to the given speed. * The speed is represented in pixels per second. So a value of 100 would move 100 pixels in 1 second (1000ms). * * @method Phaser.Physics.P2.Body#moveLeft * @param {number} speed - The speed at which it should move to the left, in pixels per second. */ moveLeft: function (speed) { this.data.velocity[0] = this.world.pxmi(-speed); }, /** * If this Body is dynamic then this will move it to the right by setting its x velocity to the given speed. * The speed is represented in pixels per second. So a value of 100 would move 100 pixels in 1 second (1000ms). * * @method Phaser.Physics.P2.Body#moveRight * @param {number} speed - The speed at which it should move to the right, in pixels per second. */ moveRight: function (speed) { this.data.velocity[0] = this.world.pxmi(speed); }, /** * If this Body is dynamic then this will move it up by setting its y velocity to the given speed. * The speed is represented in pixels per second. So a value of 100 would move 100 pixels in 1 second (1000ms). * * @method Phaser.Physics.P2.Body#moveUp * @param {number} speed - The speed at which it should move up, in pixels per second. */ moveUp: function (speed) { this.data.velocity[1] = this.world.pxmi(-speed); }, /** * If this Body is dynamic then this will move it down by setting its y velocity to the given speed. * The speed is represented in pixels per second. So a value of 100 would move 100 pixels in 1 second (1000ms). * * @method Phaser.Physics.P2.Body#moveDown * @param {number} speed - The speed at which it should move down, in pixels per second. */ moveDown: function (speed) { this.data.velocity[1] = this.world.pxmi(speed); }, /** * Internal method. This is called directly before the sprites are sent to the renderer and after the update function has finished. * * @method Phaser.Physics.P2.Body#preUpdate * @protected */ preUpdate: function () { if (this.removeNextStep) { this.removeFromWorld(); this.removeNextStep = false; } }, /** * Internal method. This is called directly before the sprites are sent to the renderer and after the update function has finished. * * @method Phaser.Physics.P2.Body#postUpdate * @protected */ postUpdate: function () { this.sprite.x = this.world.mpxi(this.data.position[0]); this.sprite.y = this.world.mpxi(this.data.position[1]); if (!this.fixedRotation) { this.sprite.rotation = this.data.angle; } }, /** * Resets the Body force, velocity (linear and angular) and rotation. Optionally resets damping and mass. * * @method Phaser.Physics.P2.Body#reset * @param {number} x - The new x position of the Body. * @param {number} y - The new x position of the Body. * @param {boolean} [resetDamping=false] - Resets the linear and angular damping. * @param {boolean} [resetMass=false] - Sets the Body mass back to 1. */ reset: function (x, y, resetDamping, resetMass) { if (typeof resetDamping === 'undefined') { resetDamping = false; } if (typeof resetMass === 'undefined') { resetMass = false; } this.setZeroForce(); this.setZeroVelocity(); this.setZeroRotation(); if (resetDamping) { this.setZeroDamping(); } if (resetMass) { this.mass = 1; } this.x = x; this.y = y; }, /** * Adds this physics body to the world. * * @method Phaser.Physics.P2.Body#addToWorld */ addToWorld: function () { if (this.data.world !== this.game.physics.p2.world) { this.game.physics.p2.addBody(this); } }, /** * Removes this physics body from the world. * * @method Phaser.Physics.P2.Body#removeFromWorld */ removeFromWorld: function () { if (this.data.world === this.game.physics.p2.world) { this.game.physics.p2.removeBodyNextStep(this); } }, /** * Destroys this Body and all references it holds to other objects. * * @method Phaser.Physics.P2.Body#destroy */ destroy: function () { this.removeFromWorld(); this.clearShapes(); this._bodyCallbacks = {}; this._bodyCallbackContext = {}; this._groupCallbacks = {}; this._groupCallbackContext = {}; if (this.debugBody) { this.debugBody.destroy(); } this.debugBody = null this.sprite = null; }, /** * Removes all Shapes from this Body. * * @method Phaser.Physics.P2.Body#clearShapes */ clearShapes: function () { var i = this.data.shapes.length; while (i--) { this.data.removeShape(this.data.shapes[i]); } this.shapeChanged(); }, /** * Add a shape to the body. You can pass a local transform when adding a shape, so that the shape gets an offset and an angle relative to the body center of mass. * Will automatically update the mass properties and bounding radius. * * @method Phaser.Physics.P2.Body#addShape * @param {*} shape - The shape to add to the body. * @param {number} [offsetX=0] - Local horizontal offset of the shape relative to the body center of mass. * @param {number} [offsetY=0] - Local vertical offset of the shape relative to the body center of mass. * @param {number} [rotation=0] - Local rotation of the shape relative to the body center of mass, specified in radians. * @return {p2.Circle|p2.Rectangle|p2.Plane|p2.Line|p2.Particle} The shape that was added to the body. */ addShape: function (shape, offsetX, offsetY, rotation) { if (typeof offsetX === 'undefined') { offsetX = 0; } if (typeof offsetY === 'undefined') { offsetY = 0; } if (typeof rotation === 'undefined') { rotation = 0; } this.data.addShape(shape, [this.world.pxmi(offsetX), this.world.pxmi(offsetY)], rotation); this.shapeChanged(); return shape; }, /** * Adds a Circle shape to this Body. You can control the offset from the center of the body and the rotation. * * @method Phaser.Physics.P2.Body#addCircle * @param {number} radius - The radius of this circle (in pixels) * @param {number} [offsetX=0] - Local horizontal offset of the shape relative to the body center of mass. * @param {number} [offsetY=0] - Local vertical offset of the shape relative to the body center of mass. * @param {number} [rotation=0] - Local rotation of the shape relative to the body center of mass, specified in radians. * @return {p2.Circle} The Circle shape that was added to the Body. */ addCircle: function (radius, offsetX, offsetY, rotation) { var shape = new p2.Circle(this.world.pxm(radius)); return this.addShape(shape, offsetX, offsetY, rotation); }, /** * Adds a Rectangle shape to this Body. You can control the offset from the center of the body and the rotation. * * @method Phaser.Physics.P2.Body#addRectangle * @param {number} width - The width of the rectangle in pixels. * @param {number} height - The height of the rectangle in pixels. * @param {number} [offsetX=0] - Local horizontal offset of the shape relative to the body center of mass. * @param {number} [offsetY=0] - Local vertical offset of the shape relative to the body center of mass. * @param {number} [rotation=0] - Local rotation of the shape relative to the body center of mass, specified in radians. * @return {p2.Rectangle} The Rectangle shape that was added to the Body. */ addRectangle: function (width, height, offsetX, offsetY, rotation) { var shape = new p2.Rectangle(this.world.pxm(width), this.world.pxm(height)); return this.addShape(shape, offsetX, offsetY, rotation); }, /** * Adds a Plane shape to this Body. The plane is facing in the Y direction. You can control the offset from the center of the body and the rotation. * * @method Phaser.Physics.P2.Body#addPlane * @param {number} [offsetX=0] - Local horizontal offset of the shape relative to the body center of mass. * @param {number} [offsetY=0] - Local vertical offset of the shape relative to the body center of mass. * @param {number} [rotation=0] - Local rotation of the shape relative to the body center of mass, specified in radians. * @return {p2.Plane} The Plane shape that was added to the Body. */ addPlane: function (offsetX, offsetY, rotation) { var shape = new p2.Plane(); return this.addShape(shape, offsetX, offsetY, rotation); }, /** * Adds a Particle shape to this Body. You can control the offset from the center of the body and the rotation. * * @method Phaser.Physics.P2.Body#addParticle * @param {number} [offsetX=0] - Local horizontal offset of the shape relative to the body center of mass. * @param {number} [offsetY=0] - Local vertical offset of the shape relative to the body center of mass. * @param {number} [rotation=0] - Local rotation of the shape relative to the body center of mass, specified in radians. * @return {p2.Particle} The Particle shape that was added to the Body. */ addParticle: function (offsetX, offsetY, rotation) { var shape = new p2.Particle(); return this.addShape(shape, offsetX, offsetY, rotation); }, /** * Adds a Line shape to this Body. * The line shape is along the x direction, and stretches from [-length/2, 0] to [length/2,0]. * You can control the offset from the center of the body and the rotation. * * @method Phaser.Physics.P2.Body#addLine * @param {number} length - The length of this line (in pixels) * @param {number} [offsetX=0] - Local horizontal offset of the shape relative to the body center of mass. * @param {number} [offsetY=0] - Local vertical offset of the shape relative to the body center of mass. * @param {number} [rotation=0] - Local rotation of the shape relative to the body center of mass, specified in radians. * @return {p2.Line} The Line shape that was added to the Body. */ addLine: function (length, offsetX, offsetY, rotation) { var shape = new p2.Line(this.world.pxm(length)); return this.addShape(shape, offsetX, offsetY, rotation); }, /** * Adds a Capsule shape to this Body. * You can control the offset from the center of the body and the rotation. * * @method Phaser.Physics.P2.Body#addCapsule * @param {number} length - The distance between the end points in pixels. * @param {number} radius - Radius of the capsule in radians. * @param {number} [offsetX=0] - Local horizontal offset of the shape relative to the body center of mass. * @param {number} [offsetY=0] - Local vertical offset of the shape relative to the body center of mass. * @param {number} [rotation=0] - Local rotation of the shape relative to the body center of mass, specified in radians. * @return {p2.Capsule} The Capsule shape that was added to the Body. */ addCapsule: function (length, radius, offsetX, offsetY, rotation) { var shape = new p2.Capsule(this.world.pxm(length), radius); return this.addShape(shape, offsetX, offsetY, rotation); }, /** * Reads a polygon shape path, and assembles convex shapes from that and puts them at proper offset points. The shape must be simple and without holes. * This function expects the x.y values to be given in pixels. If you want to provide them at p2 world scales then call Body.data.fromPolygon directly. * * @method Phaser.Physics.P2.Body#addPolygon * @param {object} options - An object containing the build options: * @param {boolean} [options.optimalDecomp=false] - Set to true if you need optimal decomposition. Warning: very slow for polygons with more than 10 vertices. * @param {boolean} [options.skipSimpleCheck=false] - Set to true if you already know that the path is not intersecting itself. * @param {boolean|number} [options.removeCollinearPoints=false] - Set to a number (angle threshold value) to remove collinear points, or false to keep all points. * @param {(number[]|...number)} points - An array of 2d vectors that form the convex or concave polygon. * Either [[0,0], [0,1],...] or a flat array of numbers that will be interpreted as [x,y, x,y, ...], * or the arguments passed can be flat x,y values e.g. `setPolygon(options, x,y, x,y, x,y, ...)` where `x` and `y` are numbers. * @return {boolean} True on success, else false. */ addPolygon: function (options, points) { options = options || {}; points = Array.prototype.slice.call(arguments, 1); var path = []; // Did they pass in a single array of points? if (points.length === 1 && Array.isArray(points[0])) { path = points[0].slice(0); } else if (Array.isArray(points[0])) { path = points[0].slice(0); } else if (typeof points[0] === 'number') { // We've a list of numbers for (var i = 0, len = points.length; i < len; i += 2) { path.push([points[i], points[i + 1]]); } } // top and tail var idx = path.length - 1; if ( path[idx][0] === path[0][0] && path[idx][1] === path[0][1] ) { path.pop(); } // Now process them into p2 values for (var p = 0; p < path.length; p++) { path[p][0] = this.world.pxmi(path[p][0]); path[p][1] = this.world.pxmi(path[p][1]); } var result = this.data.fromPolygon(path, options); this.shapeChanged(); return result; }, /** * Remove a shape from the body. Will automatically update the mass properties and bounding radius. * * @method Phaser.Physics.P2.Body#removeShape * @param {p2.Circle|p2.Rectangle|p2.Plane|p2.Line|p2.Particle} shape - The shape to remove from the body. * @return {boolean} True if the shape was found and removed, else false. */ removeShape: function (shape) { return this.data.removeShape(shape); }, /** * Clears any previously set shapes. Then creates a new Circle shape and adds it to this Body. * * @method Phaser.Physics.P2.Body#setCircle * @param {number} radius - The radius of this circle (in pixels) * @param {number} [offsetX=0] - Local horizontal offset of the shape relative to the body center of mass. * @param {number} [offsetY=0] - Local vertical offset of the shape relative to the body center of mass. * @param {number} [rotation=0] - Local rotation of the shape relative to the body center of mass, specified in radians. */ setCircle: function (radius, offsetX, offsetY, rotation) { this.clearShapes(); this.addCircle(radius, offsetX, offsetY, rotation); }, /** * Clears any previously set shapes. The creates a new Rectangle shape at the given size and offset, and adds it to this Body. * If you wish to create a Rectangle to match the size of a Sprite or Image see Body.setRectangleFromSprite. * * @method Phaser.Physics.P2.Body#setRectangle * @param {number} [width=16] - The width of the rectangle in pixels. * @param {number} [height=16] - The height of the rectangle in pixels. * @param {number} [offsetX=0] - Local horizontal offset of the shape relative to the body center of mass. * @param {number} [offsetY=0] - Local vertical offset of the shape relative to the body center of mass. * @param {number} [rotation=0] - Local rotation of the shape relative to the body center of mass, specified in radians. * @return {p2.Rectangle} The Rectangle shape that was added to the Body. */ setRectangle: function (width, height, offsetX, offsetY, rotation) { if (typeof width === 'undefined') { width = 16; } if (typeof height === 'undefined') { height = 16; } this.clearShapes(); return this.addRectangle(width, height, offsetX, offsetY, rotation); }, /** * Clears any previously set shapes. * Then creates a Rectangle shape sized to match the dimensions and orientation of the Sprite given. * If no Sprite is given it defaults to using the parent of this Body. * * @method Phaser.Physics.P2.Body#setRectangleFromSprite * @param {Phaser.Sprite|Phaser.Image} [sprite] - The Sprite on which the Rectangle will get its dimensions. * @return {p2.Rectangle} The Rectangle shape that was added to the Body. */ setRectangleFromSprite: function (sprite) { if (typeof sprite === 'undefined') { sprite = this.sprite; } this.clearShapes(); return this.addRectangle(sprite.width, sprite.height, 0, 0, sprite.rotation); }, /** * Adds the given Material to all Shapes that belong to this Body. * If you only wish to apply it to a specific Shape in this Body then provide that as the 2nd parameter. * * @method Phaser.Physics.P2.Body#setMaterial * @param {Phaser.Physics.Material} material - The Material that will be applied. * @param {p2.Shape} [shape] - An optional Shape. If not provided the Material will be added to all Shapes in this Body. */ setMaterial: function (material, shape) { if (typeof shape === 'undefined') { for (var i = this.data.shapes.length - 1; i >= 0; i--) { this.data.shapes[i].material = material; } } else { shape.material = material; } }, /** * Updates the debug draw if any body shapes change. * * @method Phaser.Physics.P2.Body#shapeChanged */ shapeChanged: function() { if (this.debugBody) { this.debugBody.draw(); } }, /** * Reads the shape data from a physics data file stored in the Game.Cache and adds it as a polygon to this Body. * * @method Phaser.Physics.P2.Body#loadPolygon * @param {string} key - The key of the Physics Data file as stored in Game.Cache. * @param {string} object - The key of the object within the Physics data file that you wish to load the shape data from. * @param {object} options - An object containing the build options. Note that this isn't used if the data file contains multiple shapes. * @param {boolean} [options.optimalDecomp=false] - Set to true if you need optimal decomposition. Warning: very slow for polygons with more than 10 vertices. * @param {boolean} [options.skipSimpleCheck=false] - Set to true if you already know that the path is not intersecting itself. * @param {boolean|number} [options.removeCollinearPoints=false] - Set to a number (angle threshold value) to remove collinear points, or false to keep all points. * @return {boolean} True on success, else false. */ loadPolygon: function (key, object, options) { var data = this.game.cache.getPhysicsData(key, object); if (data.length === 1) { var temp = []; data = data.pop() // We've a list of numbers for (var i = 0, len = data.shape.length; i < len; i += 2) { temp.push([data.shape[i], data.shape[i + 1]]); } return this.addPolygon(options, temp); } else { // We've multiple Convex shapes, they should be CCW automatically var cm = p2.vec2.create(); for (var i = 0; i < data.length; i++) { var vertices = []; for (var s = 0; s < data[i].shape.length; s += 2) { vertices.push([ this.world.pxmi(data[i].shape[s]), this.world.pxmi(data[i].shape[s + 1]) ]); } var c = new p2.Convex(vertices); // Move all vertices so its center of mass is in the local center of the convex for (var j = 0; j !== c.vertices.length; j++) { var v = c.vertices[j]; p2.vec2.sub(v, v, c.centerOfMass); } p2.vec2.scale(cm, c.centerOfMass, 1); cm[0] -= this.world.pxmi(this.sprite.width / 2); cm[1] -= this.world.pxmi(this.sprite.height / 2); c.updateTriangles(); c.updateCenterOfMass(); c.updateBoundingRadius(); this.data.addShape(c, cm); } this.data.aabbNeedsUpdate = true; this.shapeChanged(); return true; } return false; }, /** * Reads the physics data from a physics data file stored in the Game.Cache. * It will add the shape data to this Body, as well as set the density (mass), friction and bounce (restitution) values. * * @method Phaser.Physics.P2.Body#loadPolygon * @param {string} key - The key of the Physics Data file as stored in Game.Cache. * @param {string} object - The key of the object within the Physics data file that you wish to load the shape data from. * @param {object} options - An object containing the build options: * @param {boolean} [options.optimalDecomp=false] - Set to true if you need optimal decomposition. Warning: very slow for polygons with more than 10 vertices. * @param {boolean} [options.skipSimpleCheck=false] - Set to true if you already know that the path is not intersecting itself. * @param {boolean|number} [options.removeCollinearPoints=false] - Set to a number (angle threshold value) to remove collinear points, or false to keep all points. * @return {boolean} True on success, else false. */ loadData: function (key, object, options) { var data = this.game.cache.getPhysicsData(key, object); if (data && data.shape) { this.mass = data.density; this.loadPolygon(key, object, options); // TODO set friction + bounce here } } }; Phaser.Physics.P2.Body.prototype.constructor = Phaser.Physics.P2.Body; /** * @name Phaser.Physics.P2.Body#static * @property {boolean} static - Returns true if the Body is static. Setting Body.static to 'false' will make it dynamic. */ Object.defineProperty(Phaser.Physics.P2.Body.prototype, "static", { get: function () { return (this.data.motionState === Phaser.STATIC); }, set: function (value) { if (value && this.data.motionState !== Phaser.STATIC) { this.data.motionState = Phaser.STATIC; this.mass = 0; } else if (!value && this.data.motionState === Phaser.STATIC) { this.data.motionState = Phaser.DYNAMIC; if (this.mass === 0) { this.mass = 1; } } } }); /** * @name Phaser.Physics.P2.Body#dynamic * @property {boolean} dynamic - Returns true if the Body is dynamic. Setting Body.dynamic to 'false' will make it static. */ Object.defineProperty(Phaser.Physics.P2.Body.prototype, "dynamic", { get: function () { return (this.data.motionState === Phaser.DYNAMIC); }, set: function (value) { if (value && this.data.motionState !== Phaser.DYNAMIC) { this.data.motionState = Phaser.DYNAMIC; if (this.mass === 0) { this.mass = 1; } } else if (!value && this.data.motionState === Phaser.DYNAMIC) { this.data.motionState = Phaser.STATIC; this.mass = 0; } } }); /** * @name Phaser.Physics.P2.Body#kinematic * @property {boolean} kinematic - Returns true if the Body is kinematic. Setting Body.kinematic to 'false' will make it static. */ Object.defineProperty(Phaser.Physics.P2.Body.prototype, "kinematic", { get: function () { return (this.data.motionState === Phaser.KINEMATIC); }, set: function (value) { if (value && this.data.motionState !== Phaser.KINEMATIC) { this.data.motionState = Phaser.KINEMATIC; this.mass = 4; } else if (!value && this.data.motionState === Phaser.KINEMATIC) { this.data.motionState = Phaser.STATIC; this.mass = 0; } } }); /** * @name Phaser.Physics.P2.Body#allowSleep * @property {boolean} allowSleep - */ Object.defineProperty(Phaser.Physics.P2.Body.prototype, "allowSleep", { get: function () { return this.data.allowSleep; }, set: function (value) { if (value !== this.data.allowSleep) { this.data.allowSleep = value; } } }); /** * The angle of the Body in degrees from its original orientation. Values from 0 to 180 represent clockwise rotation; values from 0 to -180 represent counterclockwise rotation. * Values outside this range are added to or subtracted from 360 to obtain a value within the range. For example, the statement Body.angle = 450 is the same as Body.angle = 90. * If you wish to work in radians instead of degrees use the property Body.rotation instead. Working in radians is faster as it doesn't have to convert values. * * @name Phaser.Physics.P2.Body#angle * @property {number} angle - The angle of this Body in degrees. */ Object.defineProperty(Phaser.Physics.P2.Body.prototype, "angle", { get: function() { return Phaser.Math.wrapAngle(Phaser.Math.radToDeg(this.data.angle)); }, set: function(value) { this.data.angle = Phaser.Math.degToRad(Phaser.Math.wrapAngle(value)); } }); /** * Damping is specified as a value between 0 and 1, which is the proportion of velocity lost per second. * @name Phaser.Physics.P2.Body#angularDamping * @property {number} angularDamping - The angular damping acting acting on the body. */ Object.defineProperty(Phaser.Physics.P2.Body.prototype, "angularDamping", { get: function () { return this.data.angularDamping; }, set: function (value) { this.data.angularDamping = value; } }); /** * @name Phaser.Physics.P2.Body#angularForce * @property {number} angularForce - The angular force acting on the body. */ Object.defineProperty(Phaser.Physics.P2.Body.prototype, "angularForce", { get: function () { return this.data.angularForce; }, set: function (value) { this.data.angularForce = value; } }); /** * @name Phaser.Physics.P2.Body#angularVelocity * @property {number} angularVelocity - The angular velocity of the body. */ Object.defineProperty(Phaser.Physics.P2.Body.prototype, "angularVelocity", { get: function () { return this.data.angularVelocity; }, set: function (value) { this.data.angularVelocity = value; } }); /** * Damping is specified as a value between 0 and 1, which is the proportion of velocity lost per second. * @name Phaser.Physics.P2.Body#damping * @property {number} damping - The linear damping acting on the body in the velocity direction. */ Object.defineProperty(Phaser.Physics.P2.Body.prototype, "damping", { get: function () { return this.data.damping; }, set: function (value) { this.data.damping = value; } }); /** * @name Phaser.Physics.P2.Body#fixedRotation * @property {boolean} fixedRotation - */ Object.defineProperty(Phaser.Physics.P2.Body.prototype, "fixedRotation", { get: function () { return this.data.fixedRotation; }, set: function (value) { if (value !== this.data.fixedRotation) { this.data.fixedRotation = value; } } }); /** * @name Phaser.Physics.P2.Body#inertia * @property {number} inertia - The inertia of the body around the Z axis.. */ Object.defineProperty(Phaser.Physics.P2.Body.prototype, "inertia", { get: function () { return this.data.inertia; }, set: function (value) { this.data.inertia = value; } }); /** * @name Phaser.Physics.P2.Body#mass * @property {number} mass - */ Object.defineProperty(Phaser.Physics.P2.Body.prototype, "mass", { get: function () { return this.data.mass; }, set: function (value) { if (value !== this.data.mass) { this.data.mass = value; this.data.updateMassProperties(); } } }); /** * @name Phaser.Physics.P2.Body#motionState * @property {number} motionState - The type of motion this body has. Should be one of: Body.STATIC (the body does not move), Body.DYNAMIC (body can move and respond to collisions) and Body.KINEMATIC (only moves according to its .velocity). */ Object.defineProperty(Phaser.Physics.P2.Body.prototype, "motionState", { get: function () { return this.data.motionState; }, set: function (value) { if (value !== this.data.motionState) { this.data.motionState = value; } } }); /** * The angle of the Body in radians. * If you wish to work in degrees instead of radians use the Body.angle property instead. Working in radians is faster as it doesn't have to convert values. * * @name Phaser.Physics.P2.Body#rotation * @property {number} rotation - The angle of this Body in radians. */ Object.defineProperty(Phaser.Physics.P2.Body.prototype, "rotation", { get: function() { return this.data.angle; }, set: function(value) { this.data.angle = value; } }); /** * @name Phaser.Physics.P2.Body#sleepSpeedLimit * @property {number} sleepSpeedLimit - . */ Object.defineProperty(Phaser.Physics.P2.Body.prototype, "sleepSpeedLimit", { get: function () { return this.data.sleepSpeedLimit; }, set: function (value) { this.data.sleepSpeedLimit = value; } }); /** * @name Phaser.Physics.P2.Body#x * @property {number} x - The x coordinate of this Body. */ Object.defineProperty(Phaser.Physics.P2.Body.prototype, "x", { get: function () { return this.world.mpxi(this.data.position[0]); }, set: function (value) { this.data.position[0] = this.world.pxmi(value); } }); /** * @name Phaser.Physics.P2.Body#y * @property {number} y - The y coordinate of this Body. */ Object.defineProperty(Phaser.Physics.P2.Body.prototype, "y", { get: function () { return this.world.mpxi(this.data.position[1]); }, set: function (value) { this.data.position[1] = this.world.pxmi(value); } }); /** * @name Phaser.Physics.P2.Body#id * @property {number} id - The Body ID. Each Body that has been added to the World has a unique ID. * @readonly */ Object.defineProperty(Phaser.Physics.P2.Body.prototype, "id", { get: function () { return this.data.id; } }); /** * @name Phaser.Physics.P2.Body#debug * @property {boolean} debug - Enable or disable debug drawing of this body */ Object.defineProperty(Phaser.Physics.P2.Body.prototype, "debug", { get: function () { return (!this.debugBody); }, set: function (value) { if (value && !this.debugBody) { // This will be added to the global space this.debugBody = new Phaser.Physics.P2.BodyDebug(this.game, this.data) } else if (!value && this.debugBody) { this.debugBody.destroy(); this.debugBody = null; } } }); /** * A Body can be set to collide against the World bounds automatically if this is set to true. Otherwise it will leave the World. * Note that this only applies if your World has bounds! The response to the collision should be managed via CollisionMaterials. * @name Phaser.Physics.P2.Body#collideWorldBounds * @property {boolean} collideWorldBounds - Should the Body collide with the World bounds? */ Object.defineProperty(Phaser.Physics.P2.Body.prototype, "collideWorldBounds", { get: function () { return this._collideWorldBounds; }, set: function (value) { if (value && !this._collideWorldBounds) { this._collideWorldBounds = true; this.updateCollisionMask(); } else if (!value && this._collideWorldBounds) { this._collideWorldBounds = false; this.updateCollisionMask(); } } });


- Capstone Project in Informatics at U.C. Irvine, 9 months
- I was responsible for the research, mockups, and user-testing
Background
This is a story on translating research into requirements, product definition, and narrowing down complexity.
Our client, a student in medical school, wanted an application that allowed students to easily share their Anki flash cards. His vision was:
This app connects everyone’s Anki accounts, pooling all their cards in its database. Students can access this database and all its files. Additionally, app has algorithms that can identify the best cards for any given category, consolidating them into ‘master decks.’
He also described some pain-points he was trying to address:
- Annoying and tedious to send flashcards (the logistics)
- Deck availability limited to who you knew (especially relevant to incoming students)
- Awkward to ask your peers for their cards
Research & Requirements
We started with research, which involved getting to know both the users* and the Anki software that we would be building for, to better understand their pain-points and context.
*Our client specified that this application would be limited to students of the U.C. Irvine School of Medicine.
Anki Software
As we had never used Anki software before, we downloaded the Anki desktop/mobile applications, and found some decks to play around with.
- Anki software included on every incoming student’s iPad
- Anki decks must be added to a user’s library from the desktop app, and are synced to devices from there (similar to putting songs on your iPod via iTunes back in the day)
- There is a built-in learning algorithm (hence its popularity with students, as we later confirmed)
- Code for the desktop-app not open-source
Surveys
Access to all 400+ med-students was available through their school’s mailing list. We sent out surveys to validate our assumptions and mission, and discover additional pain-points.
- All students use Anki cards
- Most (90%+) students share cards with their peers*, and aren’t picky about who they share with
- However, they are picky about what they share
- Students spend a lot of time studying
- Students study on their laptops and iPads
*This was important to us, as a common argument was “isn’t most of the value in the making of the cards?”
Contextual Inquiry
These surveys also helped us meet with some students. They walked us through their file libraries and talked about their study habits and flashcard preferences.
- Most students had 1,000–20,000 cards in their libraries
- Everyone categorized/labelled their decks differently
- Similarly, everyone’s cards were in different formats*
- The UC Irvine School of Medicine has a set curriculum — all students of any given year take the same courses
*We generally think of flashcards as question text on the front, answer text on the back. This was not the case at all. Many consisted of only screenshots, drawings, or just a few words.
Personas
With this information and interaction with the users, we identified two personas that these students almost all fell into: the downloader, and the uploader.
This translated into two key functionalities: uploading and downloading.
Research Summary
- The value of the product lies in two main areas:
- Saves time spent communicating between students and sending decks
- Makes a vast wealth of resources available
- The user’s environment is a combination of iPad and laptop — decks have to be imported via the desktop app, so AnkiShare will be a web-application.
- Anki Decks are numerous and diverse in both content and format
Design
These values mostly* aligned with our client’s original vision and its features:
- Repository of cards was a pretty simple concept to us — basically just a huge dump of cards that was nicely categorized.
- Best Cards Algorithm was something else, and the greatest design challenge we faced.
*While we did mention the “best card” algorithm to students, none expressed a strong interest in it. However, in an effort to please our client, we went with it anyway.
“Best Card”
At the beginning of the project, we had identified that the technical skill amongst our team was not very strong. However, we were still naïve (“optimistic”) enough to entertain ideas regarding techniques such as image-recognition and machine learning.
Our client suggested grouping all similar/redundant cards together, and figuring out how to identify the best card for each group, aggregating all of these cards into the so-called “master deck.”
- ALL CARDS
- Anatomy 101 cards
- Cards about the number of bones in the hand
- Best card about number of bones in the hand
- Cards about the number of bones in the hand
- Anatomy 101 cards
This best card would then be put into a master Anatomy 101 deck with all the other best cards.
Our research showed that this would be impossible — cards were in various formats, half of them not including any text. Content was the same, but not the formatting. It would be like comparing apples to apple pie — you can’t.
We weren’t going to give up that easily, though. While no algorithm could rank these cards, people could — our users could.
I looked to real products that also promote content based on popularity among their users. Reddit’s upvote/downvote system was one that we thought about, along with Yelp’s star-based rating system.
The mockup above represents just one of many ideas we considered, imagining every possible way this could be achieved.
I started to question whether or not this was even something we should have considered. Referring back to our initial goals and requirements, the value did not actually lie in this functionality. We wanted to save students time, not have them spend more time rating cards.
However, this was met with some resistance both within the team and from the client. This functionality was important to them, in the supposed extra value it presented. Additionally, a fancy algorithm would boost the “cool-factor” of AnkiShare — which some considered to be important.
As a compromise, I suggested tracking the number of times a deck is downloaded, and displaying this value. This would act as a proxy for a deck’s popularity, and by extension, quality. While obviously a far cry from optimizing at the card level, I knew we had to get ourselves out of this hole we spent the last 3 months digging.
Repository Structure
Our research showed that students would generally know what decks they were looking for, whether it be “material for Professor Wu’s Anatomy final,” or “Histology 101, Week 3.” This meant we needed an intuitive, precise, structure that could let students easily pinpoint what they had in mind.
However, upon looking at many of their existing decks, we noticed that there were many ways they were classified — some people made decks by course, some by topic, some by exam. There was no one way to create a directory structure:
We instead decided to not categorize them at all, and implement a filter that runs across the entire library.
Key Functionality
We were finally able to narrow down the product to a simple Dropbox-esque web application, that allowed students to perform our previously-defined key functionalities: upload and download.
User Testing
To validate our product, test its usability, and receive feedback, we scheduled several rounds of user testing with medical students. The full usability report can be read here.
Going in, I prepared a list of questions and tasks for students to complete. We defined success based on how quickly and easily they could perform these tasks. Watching even the most confident and tech-savvy students struggle with the simplest of tasks was definitely a reality check for us.
- Ambiguous terminology in our copy. For example, students didn’t know if “author” referred to the student who made the deck or the professor who wrote the textbook that the cards are based off of. We started including this in our surveys, to decide on which nomenclature to use.
- The interface was confusing to some. The most eye-opening to me was when we had a case of a false floor. The student selected her filter fields, and the content appeared below the fold. They thought it never loaded, and gave me a “your thing is broken” look.
- Clutter on the filter was brought up many times, and hindered our testers’ ability to quickly locate a given deck — especially since many course names were similar.
Fortunately, the high-level concept of our product (“It’s basically a Dropbox for Anki decks”) was easily understood and clear. Students realized the value and basic workflow/functionality of the product.
Iteration
Upon analysis of my notes from testing, I wrote my recommendations and the team implemented them.
Auto-filter vs. Filter Button
To fix the issue with the false-floor, we implemented a “Filter” action button, instead of an auto-filter that loaded the content automatically, without re-loading the page. The page load would better indicate that the filter had been applied. We also fixed the responsive-ness of the application and slightly modified the sizing of some elements.
Sorting by Student Year
Fixing the wall of text on the filter was a top priority for us — testing showed that this was the primary way students would locate decks. At the time, we were listing every single course the school offers under the “course” filter. I hypothesized that students would only be looking for courses corresponding to their given year, and after surveys, was proven correct. We modified the filter to only show the courses of the user’s year, reducing 75% of the clutter.
Viewing & Editing
While students could easily download the deck that we specified, many expressed concerns for knowing which deck to download. They elaborated that when looking for decks, they want to know what they’re getting. Card format and “style” were much more important to them than we expected. Because of this, we quickly threw together a “Deck Preview” feature that allowed them to view the decks in their entirety before downloading. The plug-in we used also afforded us easy implementation of an “edit” function, promoting collaboration among the students in improving these decks.
Final Product
The final product was much simpler than we could have ever expected, and effectively carried out its two key functionalities: upload and download.
What we learned
Design with real data/content
If we hadn’t seen the wide variety of deck formats, we would have likely assumed that flashcards were all Question Text/Answer Text. Luckily, we had plenty of access to real users and their files, and could make the system flexible. This also helped lead us to the “preview deck” functionality, knowing that students cared about what sort of format these decks were in before downloading.
Tie back to the goal
We had some pretty interesting and ambitious ideas. The long duration of this project only made us lose focus even more, spending time on unnecessary and possibly detrimental functionality. We wasted time and effort trying to figure out the “best card” algorithm, despite it being indicated as not important. However, aside from this mishap, by relating other decisions back to our key functionalities, we were able to simplify this project.
Test early and often
Several rounds of user-testing, along with surveys, allowed us to constantly validate our ideas and product, while also exposing weaknesses in AnkiShare’s usability.
Future Plans
Visual Design
It’s probably clear at this point that we had little to no time working on the visual design of this product. While I recognize the importance of an aesthetically pleasing product, I didn’t hesitate to deliver something visually “acceptable” that worked, given our deadline. Regardless, certain elements such as the typography could be optimized to both enhance usability, scanability, and visual pleasure.
Scalability
While intended for and limited to medical-school students, flashcards are used by all sorts of people in many different fields. The main concept of AnkiShare is in no way restricted to medicine, and AnkiShare could potentially be expanded and scaled to help other non-medical students as well.
Credits
Endless thanks to the AnkiShare team: Jazmynn Daos, Dillon Gee, Vamsi Koduru, and Kyla Lamontagne.


Comstock Metals (CVE:CSL) Sets New 12-Month Low at $0.02
by Teresa GrahamShares of Comstock Metals Ltd (CVE:CSL) hit a new 52-week low on Monday . The company traded as low as C$0.02 and last traded at C$0.02, with a volume of 100000 shares traded. The stock had previously closed at C$0.02.
The firm has a market cap of $1.39 million and a P/E ratio of -0.30. The business has a 50-day moving average of C$0.02 and a two-hundred day moving average of C$0.03.
Comstock Metals Company Profile (CVE:CSL)
Comstock Metals Ltd. engages in the acquisition and exploration of mineral properties in Canada and Mexico. It primarily explores for gold and cobalt deposits. The company holds a 100% interest in the Preview SW gold project in the La Ronge district of Saskatchewan. It also holds an option agreement to acquire a 100% interest in the Rawhide cobalt-silver project comprising 42 claim units covering an area of 662 hectares located in Ontario.
Recommended Story: How the Consumer Price Index (CPI) is calculated?


ESP Sensor
Home
Wi-Fi
OpenSenseMap
Restart
☰
Connection
You are connected to
SoftAP
access point.
Your IP address is
<IP_ADDRESS>
.


The Desert
Scower the desert, find the missing shards and bring them back to the obelisk.
Start Game
Game Manual
Citation


Welcome to the Watson Visual Recognition Slicer/Classifier!
Just drag and drop image files from your desktop into the browser here, and they will be sliced up and analyzed using the IBM Watson Visual Recognition service, using a custom classifier of your choice.


If closeness and intimacy with the partner are often linked with subsequent inflammations, it is difficult and at times even impossible to live a healthy sexuality. The lubricant gel with its antibacterial and anti-inflammatory active ingredients is primarily intended to give an additional feeling of security. The added lactic acid bacteria ensure that the vaginal flora remains intact. The added CBD oil ensures a relaxed and pleasurable experience.
Our lubrication is water based and contains lactic acids that ensures the pH-number stays leveled out during intercourse which makes it way harder for harmful bacteria to have an impact on you.  Added organic CBD oil from Switzerland enhances arousal, soothes and excites while providing all-natural moisture.
The sun-kissed organic hemp plants, which form the base for our hemp extract, ripen in front of the breathtaking panorama of the Swiss Alps will be harvested in a traditional way. more
That means: manual work - because that's the only way how we can ensure optimal ripening time and best possible quality. We also made a conscious decision to use organic farming. Pesticides and mineral fertilizers are not used and the natural resources of our planet are protected.
Knowledge is power and the proof of the pudding is in the eating. If you have had problems with recurring bladder infections for years and have already undergone multiple antibiotic therapies, this has an extremely negative effect on our intestines, the seat of our immune system. A weak immune system in turn causes new inflammations - a vicious circle.more
Alleviate symptoms and gently combat the problem at its root Often, after recurring bladder infections, no bacteria are found to fight them. In this case, conventional medicine simply does not know of any means to alleviate the symptoms. Working with the body - not against it We don’t want your body to become more and more dependent and vulnerable. We want to help it to slowly heal itself and allow you to live a pain-free life again.  And with our help, it doesn’t have to stay that way. Essentially, there are three different ways essential oils work on us: Through the skin, our sense of smell and our stomach. Through our skin: The specificity of the molecules of essential oils makes it possible for them to pass through our skin and cell membranes and work inside.This works for both the outer skin and the inner mucous membranes. Added to bath water or sitz bath, the oils also unfold their effect because they penetrate the skin. Whether they have a relaxing, stimulating or, as in our case, antibacterial and anti-inflammatory effect depends on the oil in question. Through our sense of smell: We can not only smell the scent of the oils. Our olfactory nerves also transmit the signal to the brain and in this way can influence our moods or awaken memories, depending on what we associate with the specific smells. Via our stomach: We can also absorb essential oils through our stomach if we consume appropriate plants, spices or special supplements. For example, ginger, thyme and peppermint contain essential oils. So when we season our food with them, we absorb the oils through the stomach.
Discover our products
Lubrication 100ml
Ist Nähe und Intimität mit dem Partner mit häufig darauf folgenden Entzündungen und Symptomen verknüpft, fällt es schwer und ist phasenweise sogar unmöglich eine gesunde Sexualität zu leben. Das Gleitgel mit seinen antibakteriellen und en- tzündungshemmenden Wirkstoffen, soll vor allem ein zusätzliches Gefühl der sich- erheit geben.
Oil 100ml
Dreimal täglich auf den Bauch und unteren Rücken aufgetragen unterstützt das Öl mit antibakteriellen Inhaltsstoffen wie Oregano, Thymian und Lavendel und beruhigenden Bestandteilen wie CBD- Hanföl, Johannis- krautöl die Entzündung zu bekämpfen und Linderung zu schaffen.  Das im Sitzbad enthal- tene Meersalz mit seinen Makro-Mikro- elemente und Mineralien in Kombination mit den potenten Ölen hilft Entzünd- ungen zu regulieren und Giftstoffe schneller auszuleiten.


Weathermaster:
Fire of Pa'agrio:
Energy output 60%
Stability 70%
Recharged 96%
When the "Recharged" level reaches 100%, the project will run.
Return


Following GLSL conventions is a really strict policy of GLM. GLM has been designed according to the idea that everyone writes their own math library with their own conventions. The idea is that brilliant developers (the OpenGL ARB) worked together and agreed to make GLSL. Following GLSL conventions is a way to find consensus. Moreover, basically when a developer knows GLSL, he knows GLM.
No, GLM is a C++ implementation of a subset of GLSL.
No, this is not what GLM intends to do!
GTX Extensions (Experimental) are experimental. In GLM this means that these extensions might change from version to version without restriction. In practice, it doesn't really change except time to time. GTC extensions are stabled, tested and perfectly reliable in time. Many GTX extensions extend GTC extensions and provide a way to explore features and implementations before becoming stable by a promotion as GTC extensions. This is similar to how OpenGL extensions can be EXT or ARB extensions before becoming core functionality.
In short, if you use a GTX extension, the API is much more likely to change from version to version than if you don't. But you should not feel too uncomfortable about using them.
A good place is the OpenGL Toolkits forum on OpenGL.org: http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=postlist&Board=10&page=1
The Doxygen generated documentation includes a complete list of all extensions available. Explore this documentation to get a complete view of all GLM capabilities! http://glm.g-truc.net/html/index.html
This is unwise. Chances are that if 'using namespace glm;' is called, name collisions will happen. GLSL names for functions are fairly generic, so it is entirely likely that there is another function called, for example, sqrt .
For frequent use of particular types, they can be brough into the global namespace with a 'using' declaration like this:
/code using glm::mat4;
mat4 someVariable(3.0f); /endcode
GLM is mainly designed to be convenient; that's why it is written against GLSL specification.
The 80-20 rule suggests that 80% of a program's performance comes from 20% of its code. Therefore, one should first identify which 20% of the code is impacting the performance.
In general, if one identifies certain math code to be a performance bottleneck, the only way to solve this is to write specialized code for those particular math needs. So no canned library solution would be suitable.
That being said, GLM can provides some descent performances alternatives based on approximations or SIMD instructions.


Home
Store
Logout
Managed warehouses
Warehouse 1
Click to expand/collapse
Retail
Warehouse
Rezystroy 10k
ID: 12345
Order count:
10
Saved successfully


It has been hypothesized whether global warming can cause abrupt and irreversible sea-ice loss in the Arctic 61. The most important argument for this idea is the positive feedback between surface albedo and sea-ice loss (ice-albedo feedback). It has been found that the existence of bifurcations in sea ice models depends on the description of spatial differences and the seasonal cycle 62, 63. While future ice loss is reversible in comprehensive models, these models also indicate that Arctic winter sea ice can be very sensitive to warming 64. Moreover, a comprehensive model shows three alternative stable sea-ice states on a completely land-free Earth 65, 66. One of these states is a globally ice-covered planet, resembling the “snowball” conditions that occurred during the Neoproterozoic. This state also occurs in at least one other complex model under present-day boundary conditions 67.
Hence, it is plausible that tipping points in sea ice have occurred in the Earth’s past, triggered by changes in the continental configuration, Milankovitch forcing, or the seasonal insolation cycle. In this regard, Eisenman 68 provides an insightful parameter analysis of a simple Arctic sea ice model that is driven by the annual cycle of solar and terrestrial radiation. Small variations in these fluxes can lead to abrupt changes in the annual cycle of sea ice. Compared to the previous systems, Arctic sea ice and the surface ocean constitute a slow system that is not in equilibrium with the annual cycle of insolation. This can be seen from the fact that the annual cycle of Arctic sea ice volume lags the insolation cycle by approx. three months. The analysis by Eisenman 68 was performed with a model that already included the annual cycle of short- and long-wave insolation. The concept of tipping points in periodically forced systems suggests that the bifurcations in the model originate from multiple states under certain fixed values of insolation, as the following model results show.


--- layout: pageservices title: "Data Source" author: "pardhu448" categories: services tages: [visualisation, data] image: feature: --- This page contains various secondary data sources used to generate visualisations of this website. These are derived datasets from the raw data which are usually in json, csv or other formats. Usually, python language is used to process raw data to arrive at this datasets.


Mathematics -
Statistics
Chemistry -
Biochemistry
Mathematics -
Applied Mathematics
Biology -
Herbology
Language and Linguistics -
Dutch
Biology -
Neurobiology
Chemistry -
Clinical Chemistry
Mathematics -
Industrial Mathematics
History -
Art History
Language and Linguistics -
Spanish
Chemistry -
Computational Chemistry
Mathematics -
Biomathematics
History -
Victorian Studies
Biology -
Botany
History -
Genealogy
Language and Linguistics -
Korean
Mathematics -
Algorithms
Language and Linguistics -
French
History -
Museology
Biology -
Cell Biology


-
Compromising Twitter's OAuth security system
-
Thomas Edison's plot to hijack the movie industry
by Matthew Lasar | Posted in: Law & Disorder -
Enough to forget the Wii? A week with the PlayStation Move
by Ben Kuchera | Posted in: Opposable Thumbs -
Metroid: Other M review: to live and die in steel
by Ben Kuchera | Posted in: Opposable Thumbs -
Review: LauncherPro offers improved home screen for Android
by Ryan Paul | Posted in: Gear & Gadgets -
App Store showdown: effects processors for the iPhone
by Jeff Smykil | Posted in: Infinite Loop -
Neither models nor miracles: a look at synthetic biology
by Robert Fortner | Posted in: Nobel Intent -
Being a behemoth: how Microsoft (and 9 others) make their billions
by John Timmer | Posted in: Uptime -
Why Sony's Move offers gamers more than Microsoft's Kinect
by Ben Kuchera | Posted in: Opposable Thumbs -
How Star Trek artists imagined the iPad... 23 years ago
by Chris Foresman | Posted in: Infinite Loop
etc
-
In less than 48 hours, over one million iTunes 10 users have signed up for a Ping account. No word on how many of those accounts were used for spam, though.
-
The attorney general of Texas has opened an antitrust inquiry into Google's search-engine business.
-
No safe harbors for YouTube in Germany—a Hamburg court rules that the company must monitor and prevent uploads of Sarah Brightman (!) videos.
-
Google is simplifying the presentation of its privacy policies. The policies aren't changing, but things are getting simplified.
-
The Samsung Galaxy tab may launch on Sprint in November, and could possibly be 4G compatible.
-
Apple has revamped its movie trailers page to now offer showtimes, along with a map. It can automatically detect your location too, so no input necessary.
Job.Ars: looking for a new job?
-
New York, New York
-
Web Systems Administrator at Arc90Turtle Bay, Manhattan, New York City
-
Senior Software iOS Developer at NOTION Music, Inc.Greensboro, NC or Vancouver, BC
-
Senior Network Engineer (Leadership Position) at Reflexion Networks, Inc.Woburn, MA


class: center, middle name:opening ## Learning a Data-Driven Nosology: ## Progress, Challenges & Opportunities --- ## Steps
1. Acquire data 2. Build and run pipelines 3.
If not, can harmonizing acquisition mitigate batch effect?
.w[**Gap**: Pipelines that harmonize across datasets, and data to evaluate pipelines] --- ### Future Outlook - Microarrays never mitigated batch effects sufficiently - Neither microarrays nor MRI "count" - fMRI has another degree of freedom: stimulus -- ### Much More To Do!
(i love this guy)
<EMAIL_ADDRESS>--- #### Challenge #3: Overlapping Clusters
--- #### Challenge #3: Overlapping Clusters
--- #### Challenge #3: Overlapping Clusters
--- #### Challenge #3: Overlapping Clusters
--- #### Challenge #3: Overlapping Clusters
--- #### Challenge #3: Overlapping Clusters
--- #### Challenge #3: Overlapping Clusters
--- class: center, middle ### Opportunity #3: Overlapping Clusters
Any tree with thresholds will put arbitrarily close individuals arbitrarily far away
Trees that put individuals near boundary in multiple groups could mitigate this issue
.w[**Gap**: Tree learning tools with appropriate statistical guarantees]


Home
About
IEEE NIEC
WIE
PES
CS
IEEE
IEEE and its members inspire a global community to innovate for a better tomorrow through highly cited publications, conferences, technology standards, and professional and educational activities. IEEE is the trusted “voice” for engineering, computing, and technology information around the globe.
For more info
Events
Articles
Achievements
Projects
Maker's Space
Team
Contact
Meet Our Team
Excom 2017-18
View Profile
Arushi Relan
|
Chairperson
View Profile
Mohit Singhal
|
Vice Chairperson
View Profile
Lakshay Katarmal
|
General Secretery
View Profile
Himanshu Sahdev
|
Joint Secretary
Excom 2016-17
View Profile
Saloni Gupta
|
Chairperson
View Profile
Gaurav Sharma
|
Vice Chairperson
View Profile
Saurabh Badhwar
|
General Secretery
View Profile
Kanikaa Murarka
|
Joint Secretary
Excom 2015-16
Vivek Goyal
|
Chairperson
Nipun Sachdeva
|
Vice Chairperson
Tushar Varshney
|
General Secretery
Dewal Saxena
|
Joint Secretary
Excom 2014-15
Sanchit Kumar
|
Chairperson
Praveen Singhal
|
Vice Chairperson
Priyanka Joshi
|
WIE Chairperson
Bhavika Tomar
|
WIE Vice Chairperson
Raghav Jha
|
Secratary
Amar Chaudhary
|
Treasurer
Piyush Chugh
|
Website Head
Jyoti Pnyani
|
Editorial Head
© 2016 - All Rights with IEEE NIEC


Preparation time
less than 30 mins
Cooking time
10 to 30 mins
Serves
Serves 4
Dietary
Just three ingredients plus garlic, stock and seasoning makes a delicious soup! If you prefer, add croûtons or crisp-fried bacon instead of the poached egg.
For this recipe you will need a blender.
Heat the oil over a medium heat in a large, heavy-based saucepan. Add the garlic and fry for 1 minute. Add the spinach, a few handfuls at a time, stirring, and cook for 2 minutes. Pour in the stock, bring to the boil and simmer for 10 minutes.
Meanwhile, half-fill a medium saucepan with water and bring to the boil. Crack the eggs into four small bowls. Turn the heat down so that the water is bubbling very gently. Slowly add the eggs to the water two at a time and cook for 3 minutes, or until the white is set but the yolk remains runny.
Remove the soup from the heat and blitz with a stick blender until smooth. Return to the heat and stir in the cream. Heat through and season to taste with salt and pepper.
Divide the soup between four serving bowls and top each with a poached egg.


Baseball Batting Average Shrinkage Estimates
Reproduce example from "Data Analysis Using Stein's Estimator and its Generalizations" Bradley Efron; Carl Morris JASA Vol. 70, No. 350. (Jun., 1975), pp. 311-319.
Contents
Data
1970 batting averages for 18 major league players. first column = batting average for first 45 at bats 2nd column = batting everage for remainder of season
data = [0.400 0.346; 0.378 0.298 0.356 0.276 0.333 0.222 0.311 0.273 0.311 0.270 0.289 0.263 0.267 0.210 0.244 0.269 0.244 0.230 0.222 0.264 0.222 0.256 0.222 0.303 0.222 0.264 0.222 0.226 0.200 0.285 0.178 0.316 0.156 0.200];
Data Transformation
y = data(:,1);
ytest = data(:,2);
n = 45;
x = sqrt(n)*asin(2*y-1); % arcsin transform
Shrinkage estimate
d = length(x); xbar = mean(x); V = sum((x-xbar).^2); s2 = V/d; %B = (d-3)/V;% Efron-Morris shrinkage sigma2 = 1; % by construction of the arcsin transform B = sigma2/(sigma2 + max(0, s2-sigma2)); % B = lambda0 muShrunk = xbar + (1-B)*(x-xbar);
Back transform
thetaShrunk = 0.5*(sin(muShrunk/sqrt(n))+1); thetaMLE = y;
Plot Shrinkage Estimates
figure; plot(thetaMLE, ones(1, d) ,'o'); hold on plot(thetaShrunk, 0*ones(1, d), 'o'); for i=1:d line([thetaMLE(i); thetaShrunk(i)], [1; 0]); end title('MLE (top) and shrinkage estimates (bottom)') printPmtkFigure shrinkageDemoBaseballParams;
Histograms
figure; ndx = 1:5; h = bar([ytest(ndx)'; thetaMLE(ndx)'; thetaShrunk(ndx)']'); legend({'true', 'MLE', 'shrunk'}) [im_hatch, colorlist] = applyhatch_pluscolor(gcf,'\-x.', 1); mseMLE = mean((ytest-thetaMLE).^2); mseShrink = mean((ytest-thetaShrunk).^2); ttl = sprintf('MSE MLE = %6.4f, MSE shrunk = %6.4f', mseMLE, mseShrink) title(ttl) printPmtkFigure shrinkageDemoBaseballPred; mseMLE/mseShrink
ttl = MSE MLE = 0.0042, MSE shrunk = 0.0013 ans = 3.2754


Type Definitions
-
callback-during(elm)
-
Called every 250 milliseconds while source is playing.
Parameters:
Name Type Description elm
element DOM element instance of
source
- Source:
-
callback-ended()
-
Called when source has ended.
- Source:
-
callback-notSupported() → {element}
-
Called when browser does not support
video
tag- Source:
Returns:
DOM element instance of
source
- Type
- element
-
cfg
-
Type:
- object
- Source:
Properties:
Name Type Description elm:
element DOM element to attach
video
tag to.width:
string pixel width of source.
height:
string pixel height of source.
loop:
boolean true
will loop source when finished.autoplay:
boolean true
will start playing source when available.video.mp4.url:
string URL to source mp4 file.
video.ogg.url:
string URL to source (ogg|ogv) file.
video.webm.url:
string URL to source webm file.
poster.url:
string URL to source file.
poster.alt:
string text for
img
tagalt
attribute.poster.title:
string text for
img
tagtitle
attribute.idNamePrefix:
string Element
id
name prefix to use when addingsource
orimg
tags. Will append the media type, to the id nameonPlayback.during:
callback-during Called every 250 milliseconds while
source
is playing.onPlayback.ended:
callback-ended Called when
source
has ended.onPlayback.notSupported:
callback-notSupported Called when browser does not support
video
tag. -
change/cfg
-
Type:
- object
- Source:
Properties:
Name Type Description loop:
boolean true
will loop source when finished.autoplay:
boolean true
will start playing source when available.video.mp4.url:
string URL to source file.
video.ogg.url:
string URL to source file.
video.webm.url:
string URL to source file.
poster.url:
string URL to source file.
poster.alt:
string text for
img
tagalt
attribute.poster.title:
string text for
img
tagtitle
attribute.onPlayback.during:
callback-during Called every 25 milliseconds while source is playing.
onPlayback.ended:
callback-ended Called when source has ended.


| Admex 775 General Information
-
| Synonyms: |
Dibasic acid glycol polyester |
| Chemical Category: |
Polymeric plasticizers |
| Hydroxyl Number, mg KOH/g: |
17 |
Usage and Performance Characteristics
-
| Manufacturer: |
Velsicol Chemical Corporation |
| Outstanding Properties: |
Permanence |
| Used for Polymeric Materials: |
PVC, nitrile rubber |
| Used for Products: |
Conveyors belts, gasketing |
| Extraction, hexane 24 h at 25°C, 50 phr, %: |
0.7 |
Physical Properties
-
| Specific Gravity: |
1.11 (25°C) |
| Aggregate State at 25°C: |
Liquid |
| Tensile Strength, MPa: |
20.19 (50 phr) |
| 100% Modulus, MPa: |
13.44 (50 phr) |
| Brittle Temperature, Tb, °C: |
10 (50 phr) |
| Dynamic Viscosity, cP: |
5,000 (25°C) |
| Elastic Elongation, %: |
365 (50 phr) |
| Kinematic Viscosity, cSt: |
165 (100°C) |
Chemical Properties
-
| Acid Number, mg KOH/g: |
0.5 |
Optical Properties
-
| Color, Platinum-Cobalt Scale: |
125 |
| Refractive Index: |
1.467 (n25D) |
Hazard-Related Data
-
| Flash Point Temperature, °C: |
276.7 |
| HMIS Personal protection: |
Safety glasses, gloves, lab. coat |
Plasticizers Database (2nd Electronic Edition) Copyright © 2004 by ChemTec Publishing |


Usage Instructions(for running the calculator)
Clone the repo with command: git clone https://github.com/epathak/code-20211027-tejaspathak.git
.
OR Download as a zip: https://github.com/epathak/code-20211027-tejaspathak/archive/refs/heads/main.zip and unzip it.
Then run command: start.bat
on Windows or start.sh
on Linux/Mac.
Call the api: http://localhost:3000/api/bmi from your favorite test tool to see the results.
Usage Instructions(for development)
Clone the repo with command: git clone https://github.com/epathak/code-20211027-tejaspathak.git
.
OR Download as a zip: https://github.com/epathak/code-20211027-tejaspathak/archive/refs/heads/main.zip and unzip it.
For first run: npm run build
& npm run start
or npm run debug
as needed.
The source files are located in src folder, start modifying and happy coding!


Question
{{poll.question}}
Please select one of the following options.
Vote results
| Choice | Votes |
|---|---|
| {{choice.text}} |
|
Please select one of the following options.
| Choice | Votes |
|---|---|
| {{choice.text}} |
|


Drum Machine
"Description"
NOTE: you can also use your keyboard to trigger the sounds
Q
W
E
A
S
D
Z
X
C


Medicine Bakery (New Street)
Pictured: “Selection of cakes”
Taste: 8/10
Price: £2-5 per bakery item
Suitable for: Vegans, Vegetarians
Digbeth Dining Club (Lower Trinity St)
Pictured: "Jerk Cauliflower with fries"
Taste: 9/10
Price: £8-10 per dish
Boston Tea Party (Corporation St)
Pictured: “The Vegan Boss breakfast”
Taste: 7/10
Price: £10+
Suitable for: Vegans, Vegetarians, Gluten-free
Connect with us on:


--- title: Converts a class vector (integers) to binary class matrix. type: docs repo: https://github.com/rstudio/keras menu: main: name: Converts a class vector (integers) to binary class matrix. - keras parent: keras-reference aliases: - /reference/keras/to_categorical.html - /keras/reference/to_categorical.html - /guide/keras/reference/to_categorical.html - /tools/tools/keras/reference/to_categorical.html - /installation/keras/reference/to_categorical.html - /tutorials/keras/reference/to_categorical.html - /guide/tools/keras/reference/to_categorical.html - /deploy/keras/reference/to_categorical.html - /tools/keras/reference/to_categorical.html - /tutorials/tools/keras/reference/to_categorical.html ---
Converts a class vector (integers) to binary class matrix.
to_categorical(y, num_classes = NULL, dtype = "float32")
| y | Class vector to be converted into a matrix (integers from 0 to num_classes). |
| num_classes | Total number of classes. |
| dtype | The data type expected by the input, as a string |
A binary matrix representation of the input.
E.g. for use with loss_categorical_crossentropy()
.


CatClicker
CC
Cats
CatName
:
CatCounter
Admin Mode
Cat's Name:
Picture of the Cat
ClickCounter
Submit
cancel