This document contains information regarding changes that have been made to the Spry framework from one release to another. See the Spry Readme for general information regarding this technology.
Changes for Spry PreRelease 1.5 - 2007/5/15
- Data
- Renamed $() to Spry.$() to avoid problems when integrating other toolkits that define their own $() functions. Folks who wish to keep using $() can simply add "var $ = Spry.$;" at the bottom of SpryData.js to restore functionality.
- Fixed a bug where findRowsWithColumnValues() was returning an empty array instead of null when no matching row was found and firstMatchOnlly was specified.
- Added Session Expired hook for data loading to allow developers to catch session expired server messages and handle the response appropriately.
- Added SpryUtils.js file that contains Spry.Utils.submitForm function to allow developers to send form data via the XMLHTTPRequest object.
- Added for DataSet.distinct() a list of fields. The DataSet constructor has a new parameter distinctFieldsOnLoad.
- Added HTMLDataSet support. Implementation uses a separate file SpryHTMLDataSet.js, but SpryData.js is still required.
- Added SpryPagedView class to make paging of data easier.
- Added Spry.Data.DataSet.prototype.setDataFromArray() to make it easier for folks to initialize a base data set from an Array.
- Added missing onPostLoad notification to Spry.Data.DataSet.prototype.loadData().
- Modified createXMLHttpRequest() so that it tries to use the ActiveX version of the XMLHttpRequest object first, so that developers can still load file:// urls when running IE7 in the local zone.
- Modified processTokens() and processTokenChildren() so that they always use an output array to collect the generated strings. This boosts the performance of the transformation process 35% on IE 6.
- Column Types:
- Added Spry.Data.DataSet.prototype.applyColumnTypes() which gets invoked after the data in a data set is loaded. It runs through all rows of the data set and converts its values to match the column types.
- Added an "html" column type which results in the automatic entity decoding of values stored in a column of that type.
- setColumnType() now takes a column name string *or* an array of column name strings as its first argument.
- Added SpryDataExtensions.js which contains advanced features that *some* developers may want to take advantage of.
- Added support for multiple non-destructive filters for a data set.
- Modified sort functions to account for possible undefined values. This allows us to handle XML formats where certain child tags are optional.
- XMLDataSet
- Modified the XMLDataSet so that it manually parses the XML string it receives from the server when an XML Dom is not auto-created by the browser. This will allow us to load XML that is returned by the server with a Content-Type that is not 'text/xml' or 'application/xml'.
- Added support for controlling the flattening process via the "subPaths" constructor option.
- Added support for Spry.Data.NestedXMLDataSet .
- Removed optimization that was preventing rows from being created for nodes selected by an XPath that had no value and no attributes.
- Added Spry.Data.JSONDataSet and Spry.Data.NestedJSONDataSet.
- Includes the JSON parser reference implementation from json.org.
- Added utility functions for extracting values embedded within the URL search and hash components.
- Modified setURL() so that when the URL matches the current URL, it takes into account the method and any postData before bailing early.
- Fixed Spry.Utils.loadURL() so that it calls the request's errorCallback() if it exists and an exception was thrown. This allows us to notify observers during sync loads.
- Modified Spry.Utils.updateContent() so that it makes an asynchronous "GET" request by default. Developers can switch to "POST" or synchronous requests by specifying method:"POST" and/or async:false options in the call to updateContent().
- Effects
- Fixed a Cluster chaining bug that caused every effect in the chain, that was before the current one executing, to fire their animation() method for every animation step of the current effect.
- Rename of AppearFade effect to Fade and GrowShrink effect to Grow.
- The Fade, Grow, Slide, Shake, Squish, Highligh, Blind effects were transformed from simple functions in classes. This will not allow you to call the effects without the 'new' keyword.
- The new created classes are extending the Cluster class. This means they are able to be clustered them self after. They can be also started, canceled, stoped.
- The effects are no longer auto-starting on instantiation. After the desired effect is instantiated you should call the start() method for the effect to run.
- The Effect.direction is default false for the Cluster effects (in the past was Spry.forward)
- The start() is automatically run in reverse in case the toggle option is enabled.
- The effects registered to a Cluster are runned in the reversed order. If you have a Move() than a Size() in toggle the Size() run first.
- For compatibility reasons with previous versions of Spry we added a number of Do* wrappers (DoBlind, DoFade, DoSquish ...). They are designed to preserve the old functionalities with a minimal effort in migration. However future releases may drop these functions.
- All the effects (Animators and Clusters) are supporting notifications. You can now register an Observer either as a function or as an Object and it will be automatically be called onPreEffect, onStep, onPostEffect, onCancel
- MoveSlide Animator dropped. It was transformed into a Cluster and moved inside the Slide Cluster.
- Size Animator has a new flag useCSSBox accepting boolean values (default false). When resizing an element this will also resize the margin, padding and the border of the element with the same proportion it use for width and height. All our Cluster Effects have this setting too (Squish, Slide, Blind, Grow ...)
- The Registry class changed the API and functionality. It was kept for compatibility reasons with the Do* wrappers but is possible to disappear in future.
- The initial offset and box dimentions where incorrectly computed when they where set in <style> or external CSS for FF, Opera and Safari browsers.
- The Puff, Pulsate, DropOut and Fold are now accepting most of the common Spry Effects options like duration, from, to, toggle.
- The duration for the Shake can be specified.
- Highlight is no longer requiring a from: option to work on Firefox.
- Highlight is supporting the values for from: and to: in short CSS version format like #CCC and in the rgb format. Eg: rgb(208, 205, 125)
- Spry.Effect.getColor() renamed to Spry.Effect.getBgColor()
- Added 6 new transitions algorithms for smoother effects
- FPS (Frames per second) is a new option for all effects
- Changed the default transitions for each effect for better smoothness
- Default FPS increased to ~60FPS
- Widgets
- Accordion
- Fixed a bug where the useFixedHeightPanels and fixedPanelHeight were ignored on page load. This caused the default panel to be incorrectly sized in some situations.
- Updated animator code to smooth out animation and add support for transition functions.
- Added support for closing all panels in variable panel heights mode.
- Modified all event handlers to return false and preventDefault when necessary. This opens the doors for using links as a means of keyboard navigation between panels.
- CollapsiblePanel
- Modified the default CollapsiblePanel CSS so that the .CollapsiblePanel rule draws both the top and bottom borders around the widget to avoid the IE "Bleeding Background and Borders Bug" which appears when the panel is closed.
- Updated animator code to smooth out animation and add support for transition functions.
- TabbedPanels
- Modified the default TabbedPanels CSS so that the .TabbedPanels rule floats the widget container left to make sure that any floating or clearing done with any of its child elements are contained completely within the TabbedPanels container. This minimizes any impact or undesireable interaction with other floated elements on the page that may be used for layout.
- Textarea Validation Widget
- Fixed a conflict with prototype.js
- Textfield Validation Widget
- Added support for IDN (International Domain Names) for URL validation
- The URI validation is compliant with RFC 3986
- The focus was incorrectly passed to the <form> element sometime when leaving an Textfield Validation using the Tab key
- New Widgets:
- Auto Suggest Widget
- Collapsible Panel Group Widget
- Radio Validation Widget
- Sliding Panels Widget
- Accordion
- Docs
- Added HTML data set overview.
- Added JSON primer.
- Added JSON Data Set overview.
- Added XML primer.
- Added Menu Bar overview.
- Added Spry API.
- Added the Effects Migration doc.
- Added the Validation doc.
- Added the Sliding Panel overview.
- Added the Spry Pager overview.
- Moved Effects API to the Spry API.
- Merged the Effects Overview into the Effects Coding doc and updated to new effects method.
- Changed TabbedPanel to TabbedPanels references that were confusing folks and were just plain wrong.
- Added a Docs.html page that links to all the articles.
- Demos
- Effects
- The JS code moved outside of the HTML file.
- The Fade&Blind and Fade&Slide transformed into real Cluster classes as proof of concept how you may reuse the existing effects and create your own
- Added observers. onPreEffect will cancel the other effects running, onCancel the elements are restored to their normal state, onPostEffect the element will run a second time toggled to prepare the elements for a new effect demo.
- Included the Puff, DropOut, Pulsate and Fold effects
- Gallery
- Modified SetMainImage() to remove any opacity related style properties on the image after the animations complete. This is a workaround that forces IE to re-render the image to get rid of the white dots/holes it creates in the image when animating opacity.
- Products
- Switched the dsProductFeatures data set to being a NestedXMLDataSet instead of relying on a templated XPath.
- Effects
- Samples
- Added CustomColumnsSample.html.
- Added HTMLFragsInXMLSample.html.
- Added SpryPagedViewSample.html.
- Added XMLDocToObject.html.
- Added HTMLDataSet samples.
- Added a horizontal slider sample.
- Added Session Handling samples.
- Added Form Submission samples for Coldfusion, PHP and ASP.
- Added JSON Data Set Sample.
- Added JSON Parser Sample.
- Added Nested XML Data Sample.
- Added Collapsible Panel Group Sample.
- Added URL Utilities Sample.
- Added URL with Data Sample.
- Fixed some samples to solve W3C validation issues.
- Updated Effects samples rewritten to new method.
- Added spry:sort to Sort sample.
- Added sample for XPath filtering with URL Params.
- Added Sharing Data Between Data Sets Sample.
- Added Multiple Filters Sample.
- Modified the Detail Region Effects Sample so that it has smooth transitions even when the user is rapidly clicking items.
- Modified the Data Set Sample to use setDataFromArray().
- Added a loadURL() Sample.
- Added Sliding Panels, Sliding Panels 2 Pane Layout, and Sliding Panels from Data Samples.
Changes for Spry PreRelease 1.4 - 2006/12/14
- Data
- Added function Spry.Utils.serializeObject() for serializing a JS Object into JSON format.
- Added Spry.XML.nodeToObject() and Spry.XML.documentToObject() utility methods which allow developers to access XML data as JS properties on an object in a manner which is similar to E4X.
- Added Spry.Utils.updateContent() for dynamically loading an HTML fragment into an element.
- Added Spry.Utils.setInnerHTML() for setting the innerHTML of an element and executing any scripts within the content string. This method is now used by Spry regions when regenerating their content.
- Added support for mapping a region state name to another state name. This can be useful for overriding the built-in states, like "ready", "loading", and "error", so that they use markup from a custom state when they fire.
- Added support for more attributes:
- spry:even - Conditionally adds the user specified CSS class name to an element based on the current row number used at the time that element was re-generated.
- spry:odd - Conditionally adds the user specified CSS class name to an element based on the current row number used at the time that element was re-generated.
- spry:setrow - Attaches a non-destructive onclick handler that sets the current row by row ID.
- spry:setrownumber - Attaches a non-destructive onclick handler that sets the current row by row number.
- spry:sort - Attaches a non-destructive onclick handler that sorts a specific data set based on columns specified by the user.
- spry:readystate - Maps the "ready" state name to the name specified in its value.
- spry:errorstate - Maps the "error" state name to the name specified in its value.
- spry:loadingstate - Maps the "loading" state name to the name specified in its value.
- Added code to report and error when nested regions and detail regions are detected.
- Added new methods to the DataSet API:
- getRowCount()
- getRowByID()
- getRowByRowNumber()
- findRowsWithColumnValues()
- Effects
- Minor updates of documentation (effects_api and effects_coding, especially of the allowed elements to which the effects can be applied to).
- Fixed bugs:
- GrowShrink effect: if border is set, width&height style doesn't get reset to the original value after you toggled the target element
- GrowShrink effect: text size inside the target element is alternated after the effect has been finished
- Slide and Blind effect: Scrollbar disappears if overflow:scroll is set and you toggle the element
- GrowShrink effect: nested image elements doesn't grow if you grow the target element
- Slide effect: Text inside sliding element doesn't appear once you toggle the effect (IE 7 only)
- Shake effect: doesn't work perperly in Opera 9.0
- AppearFade effect: not working for content of a <div> inside a <td> (IE only)
- new feature:
- GrowShrink effect: added options 'referHeight' and 'growCenter'
- GrowShrink effect: added options 'referHeight' and 'growCenter'
- IE 7 related fixes also take effect on Windows Vista (not only on XP)
- new feature:
- Slide effect: added option 'horizontal' to allow horizontal sliding
- Slightly updated documentation to reflect new slide option
- Simplified cluster construction: cluster now is an effect, too, which accepts setup and finish callbacks as option arguments of its constructor
- Base effects (like Move, Size, etc.) can be called without from argument. Instead of passing element, fromPos, toPos, options as arguments, the effects can be called with element, toPos, options. The fromPos is calculated on the fly based on the current position.
- AppearFade, Blind, GrowShrink, Slide and Squish effects now can be triggered for initially invisible elements ('display:none' or 'visibility:hidden')
- Widgets
- Added Menu Bar widget
- Added Tabbed Panels widget
- Added Collapsible Panel widget
- Added Form Validation Widgets
- Accordion:
- Added support for variable height panels.
- Added some new constructor options:
- useFixedHeightPanels - This value is true by default. If false allows for variable height panels.
- fixedPanelHeight - Number of pixels to use as the height of each panel when animating. By default this is the same as the first open panel.
- duration - Number of milliseconds it takes to open/close a panel. Default is 500 msecs.
- Fixed bug that prevented panels from animating properly when the accordion started out with a display:none style.
- Removed addNewPanel(), getNewPanelSnippet(), getNewAccordionSnippet(), and getNewAccordionConstructorSnippet() methods. They don't work cross-browser, and should've never seen the light of day.
- Docs
- Added overview for Tabbed Panels widget.
- Added overview for Collapsible Panel widget.
- Added overview docs for each Form widget.
- Demos
- Gallery
- Switch from using an interval timer to manually firing off the slide show timer after each image loads. This will allow images loading over slow connections to completely load.
- Products
- index.html to use spry:sort and spry:setrow.
- Use a spry:choose attribute to show/preserve the currently selected product on initial load and after a sort.
- RSS Reader
- Modified index.{html,cfm,php} to use spry:setrow.
- Added Form Validation demo.
- Gallery
- Samples
- Added sample for Tabbed Panels widget.
- Added sample for Collapsible Panel widget.
- Added samples for 4 Form widgets.
- Moved data set and region examples to the samples/data_region folder.
- Changed Effects sample files to use standard samples.css file.
- Added a samples/utils folder with samples of Spry utility functions.
- Released a query-to-XML sample page that shows how to convert dynamic data into XML.
- Added to EvenOddRowSample.html to include spry:even and spry:odd.
- Added SprySetRowSample.html.
- Modified the AccordionSample:
- Added sample for changing the duration of animations.
- Modified variable height accordion sample to use animation.
- Added a style for spans used as content panels so that they animate properly.
- Added SetCurrentRowByValueSample.html to show how to select a row based on some column values.
- Added StateMappingSample.html to show how to map the built-in region states to your own custom states.
Changes for Spry PreRelease 1.3.1 - 2006/08/11
- Fixed Accordion openNextPanel() and openPrevPanel() so that they work cross-browser.
- Added samples/effects/menu_sample.html.
- Removed:
- demos/products/index_test.html
- samples/data
Changes for Spry PreRelease 1.3 - 2006/08/10
- Introduced Spry Effects, the 3rd portion of the Spry Framework.
- Provided SpryEffects.js in the includes folder.
- Provided Effects sample files in Effect folder.
- Effects Overview doc posted online. (Removed in Spry 1.5. Combined into Effects Coding doc)
- Effects Coding doc posted online.
- Effects API
- Removed documentation from the zip. All docs will be available online on Labs site as HTML and PDF.
- Changes to SpryData.js:
- Fix the loop in Spry.Utils.createXMLHttpRequest() so that it doesn't skip the next progID in the array after removing a non-existent one.
- Make sure all initialization of the Spry.Utils.loadURL.Request headers property uses an object so that it works properly when used with Prototype 1.5 rc0.
- Fix Spry.Utils.Notifier.prototype.notifyObservers() so that it uses a normal for loop instead of a "for in" loop.
- Added support for {ds_UnfilteredRowCount}.
- Updates to SpryAccordion.js
- Added panel opening function: openNextPanel(), openPreviousPanel(), openFirstPanel, and openLastPanel()
- Added current panel accessor: getCurrentPanel() - return the panel, getCurrentPanelIndex() - returns the index of the current panel in the getPanels() array.
- Added addNewPanel(tab, content) function to dynamically add new panels in Javascript. Panels get added after the current panel.
- Gallery Demo updated to use new SpryEffects.js.
Changes for Spry PreRelease 1.2 - 2006/07/10
- Spry is now compatible with frameworks based on Prototype 1.5 rc0 or later.
- Switched all hash tables (associative arrays) to use Object instead of Array.
- Removed all Spry.Utils.propertyIsEnumerable() calls from all for/in loops.
- Small fix to xpath.js to switch a loop from for/in to a normal for loop.
- Spry:content can now be used inside a spry:region or spry:detailregion, as well as on the region element itself.
- Auto stripping of the SpryHiddenRegion class name from region containers on load to aid in the hiding of data references.
- Added support for the spry:state attribute which can be used by a designer tell Spry what markup to use when the region is in its "loading", "error" or "ready" state. Spry will automatically swap in the correct markup as the region's state changes.
- Added ordered processing of spry: attributes to allow combined use to reduce the need for using wrapper nodes to add logic. You can see an example within /samples/AttributeComboSample.html.
- Added Spry.Data.Region.debug variable. When set to true, it allows developers to see what the final template for the region looks like, as well as the markup that is being generated for each region. You can see an example /samples/AttributeComboSample.html.
- Accordion Widget
- Moved SpryAccordion.js into widgets/accordion directory, along with a reference HTML sample and CSS file.
- Added support for keyboard navigation.
- Re-wrote parts of the PanelAnimator to allow for rapid switching between panels via keyboard navigation.
- Integrated patches from the community:
- Added keepSorted constructor option to the Data Set to allow the sort order to be preserved between loads.
- Added new built-in data references:
- {ds_EvenOddRow} - Writes out "even" or "odd" based on the row index of the current row being processed.
- {ds_RowNumberPlus1} - Writes out the current row index plus one.
- Misc Bug Fixes:
- Spry.Utils.createXMLHttpRequest creates more than one request for a single call on IE 6.
- Auto setup of Master/Detail between data sets fails if only POST data contains data refs.
- Sorting should sort all data, not just the result of a non-destructive filter.
- Spry.Data.DataSet.prototype.filterData bugs:
- "unfiltredData" typo causes data loss.
- filterFunc overridden instead of filterDataFunc.
- null arg removes data filter but doesn't re-apply an existing view filter.
- IE removes quotes around attribute values that contain a single data reference.
- Gallery Demo
- Cleaned up Spry code used by the select form element.
- Modified gallery.js to use the region observer callback to set the main image and select the first thumbnail instead of using timers.
- Added CSS workaround for IE "doubled margin" bug.
- RSS Reader Demo
- Added error and loading feedback with region region states.
Changes for Spry Prerelease 1.1
- Switched to using namespaced attributes. Attributes are now of the form spry:*. The Spry namespace is defined by adding the the following attribute to the HTML tag of the document: xmlns:spry="http://ns.adobe.com/spry".
- Added support for the new spry:content attribute, which allows the replacement of static content with dynamic content when JavaScript is enabled. This allows pages to work in a non scripting environment.
- Added region state notification mechanism.
- Added Prototype's $() convenience function.
- Added support for descending and toggle sort.
- Added support for non-destructive filtering.
- Added data set load interval.
- Added built-in references:
- {ds_CurrentRowNumber}
- {ds_CurrentRowID}
- {ds_SortOrder}
- {ds_SortColumn}
- Filter callback functions now have the following args passed to them: function myFilterFunc(dataset, rowObj, rowNumber). Filter callback functions must now return the rowObj passed in, a new rowObj, or null.
- Added data set support for retrieving XML data via the POST method and specifying HTTP headers.
- Added a samples directory to the framework ZIP file. It's pretty bare right now, but over time will contain examples of things asked most frequently in the forums. One of the more useful samples is the Data Set Explorer page.
- Misc bug fixes:
- Text data not stored entity encoded.
- Data reference values need to be escaped in JS expressions.
- RegExp object forces Spry.Data.Region.processDataRefString() to bail early in IE.
- Spry attributes still exist in generated region output.
- Data set column (node text value) missing when node has an attribute.


Mum revamps her dinosaur-crazy son's bedroom into a real life Jurassic Park with budget buys from Wilko, Primark and Argos
Mum-of-three upcycled a chest of drawers from Ikea and used paint instead of wallpaper to keep costs low
by James Andrews, Nisha MalA mum-of-three transformed her dino-crazy son's bedroom into a real life Jurassic Park using bargains she got from Primark, Wilko and Argos.
Stacey Jones, from Manchester, wanted to create a dinosaur-themed bedroom for her little boy, but with a tight budget she knew she had to get creative.
The 39-year-old made over her son's room by painting mountains on the walls and upcycling a chest of drawers from Ikea.
"His bedroom is only small so painting mountains on the wall instead of using wallpaper kept the cost low and the room feeling light even though I’ve used green tones which could easily have made the room feel smaller," Stacey told money-saving site LatestDeals.co.uk.
"All the DIY was done by myself including the upcycle of the Ikea chest of drawers; I painted those in the same shades as the mountains on the wall and added plastic toy dinosaurs as the handles."
Stacey also went to Primark for dinosaur bedding for £9, and bought a dino cuddly toy for Argos for £2.25.
She was also keen to not over-do things, "I wanted a lot of natural tones and fabrics to compliment so the use of jute and wicker and the natural pine bed really stands out against the green," she said.
"Foliage and lights were added to the teepee bed and the dino feet stickers on the floor add to the dino jungle theme."

“My tips would be to use the same paint used on the walls to up cycle the drawers to keep costs low, and also to keep everything matching," she said.
"Don’t buy expensive drawer handles - I'd seen dinosaur ones for around £30 to £40 and I managed to make my own for £6.
"Source cheap artificial plants that you can cut up and use as the foliage on the bed frame as it works out much cheaper than buying the longs strands of faux ivy and so on.
"I feel so proud of what I managed to achieve on a small budget and best of all I got the seal of approval from Huey who tells me he loves his dinosaur bedroom every day!” Stacey said.
What Stacey bought as part of the makeover:
- Large T-rex wall head - £6.99 The Range
- Little man cave plaque - £4.99 The Range
- Bedding - £9 Primark
- Throw - £4 Primark
- Dino head on bed - £2.25 Argos
- Leaf mat - £8 eBay
- Jute rug - £20 Ikea
- Chest of drawers - £25 Ikea customised by Stacey with dinosaurs from her local pound shop
- Wicker Bedside table - £5 charity shop find
- Bamboo plant - £19.99 Home Bargains
- Dino feet floor/wall stickers - £4.99 Amazon
- Bed frame - £79.99 crazypricebeds
- Prints - £15 littlemydesign
- Pom Pom garland - made by Stacey for £3
- Triceratops head on the left - Argos £3
- Sign post - made by Stacey for £4
- Wooden Dino feet on wall and plaque on bed - £7 Teddy and Co UK
- Strip lights on bed - £2 Primark
- Paint for mountains in shades Tree Tops and Urban Jungle - £16 and £12 Wilko


Selected files:
Upload complete! Please wait while we process your file(s). This may take a few minutes, so don't close or refresh the page.


| The above plot
shows the allocated modulation scheme. The simulated system subdivided the
frequency into 160 subcarriers and updated the modulation scheme every 1 cm
of movement. Also added was a delay of 1 cm in the modulation allocation.
This was to simulate the time taken to perform the SNR estimation and
reallocation of the modulation scheme. The modulation varies from none (Blue
areas) through to 6 bits per Hz per sec (64 QAM). |


President
Treasurer
General Secretary
Content & Tech
Design
Doc & AR
Events
Finance
Hospitality
Industrial Relations
Logistics
Marketing
Workshop
Society of Materials Science Engineers
© 2018 SMSE. All Rights Reserved


About Me
Hi, I'm a games developer, passionate about creating and developing games. I am very self-motivated and always striving to improve and learn new things.
Information
Experience and support
My Expertise Area
Languages
Engines
My Education
2019 - 2022
Saxion University of Applied SciencesBachelor of Science
Creative Media Game Technologies2016 - 2018
Universty of Creative ArtsLevel 3 BTEC Extended Diploma
Creative Media Production and TechnologiesRecent Works
I worked at a navy and aerospace defence company named Thales. Whilst employed at Thales I worked on their Naval Game, a serious game to be played by students potentially interested in a career at Thales. I was responsible for improving the user experience of the project by creating tooling for dynamic animated scene transitions and UI feedbacks. I created tools and systems that could implement scene transitions and responsive feedback easily to ensure that future developers would uphold a better standard of UX.
Watch the gameplay trailer here .
My Services
Game Development
Do you have an idea for a game you would like to be created? I can do that for you; I have experience making a wide range of different games and interactive experiences.
 Using Live2D I can create a fully trackable virtual avatar from the chest up for your streams, videos or personal use.
App Development
Do you have an idea for an app? Using the Unity game engine I can create that for you and even implement feature such as sharing and in app purchasing.
Do you have a project in mind
If you have a project you would like realised do not hesitate to get in touch for a chat about how I can help, contact me directly here.
Contact Me


spatial for JavaScript
How long was my run?
Which is the closest ATM from my current location?
...or many libraries with one function each
(at least 95 libs)
...but in the browser (or in Node, of course)
{
"type": "Point",
"coordinates": [11.7, 57.7]
}
{
"type": "LineString",
"coordinates": [[11, 57], [12, 58]]
}
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [11.7, 57.7]
},
"properties": {
"name": "Göteborg",
"population": 491630
}
}
Demo
function findAtms(latlng) { var location = turf.point([latlng.lng, latlng.lat]); atmsRequest.then(function(resp) { atms = atms || resp; var nearest = turf.nearest(location, atms); atmLayer.clearLayers(); atmLayer.addData(nearest); map.fitBounds( atmLayer.getBounds().extend(latlng), {maxZoom: 16}); }); }
function findAtms(route) { var line = turf.flip(turf.linestring(route.coordinates)), buffered = turf.buffer(line, 1000, 'meters'), nearbyAtms = turf.within(atms, buffered); [...] }
map.on('mousemove', function(e) { var p = turf.point([e.latlng.lng, e.latlng.lat]), pointOnLine = turf.pointOnLine(line, p), nearest = turf.nearest(pointOnLine, nearbyAtms); lineMarker.clearLayers(); lineMarker.addData(pointOnLine); closestAtm.clearLayers(); closestAtm.addData(nearest); });


git-grep(1) Manual Page
NAME
git-grep - Print lines matching a pattern
SYNOPSIS
git grep [-a | --text] [-I] [--textconv] [-i | --ignore-case] [-w | --word-regexp] [-v | --invert-match] [-h|-H] [--full-name] [-E | --extended-regexp] [-G | --basic-regexp] [-P | --perl-regexp] [-F | --fixed-strings] [-n | --line-number] [-l | --files-with-matches] [-L | --files-without-match] [(-O | --open-files-in-pager) [<pager>]] [-z | --null] [-c | --count] [--all-match] [-q | --quiet] [--max-depth <depth>] [--color[=<when>] | --no-color] [--break] [--heading] [-p | --show-function] [-A <post-context>] [-B <pre-context>] [-C <context>] [-W | --function-context] [-f <file>] [-e] <pattern> [--and|--or|--not|(|)|-e <pattern>...] [ [--[no-]exclude-standard] [--cached | --no-index | --untracked] | <tree>...] [--] [<pathspec>...]
DESCRIPTION
Look for specified patterns in the tracked files in the work tree, blobs registered in the index file, or blobs in given tree objects. Patterns are lists of one or more search expressions separated by newline characters. An empty string as search expression matches all lines.
CONFIGURATION
- grep.lineNumber
If set to true, enable -n option by default.
- grep.patternType
Set the default matching behavior. Using a value of basic, extended, fixed, or perl will enable the --basic-regexp, --extended-regexp, --fixed-strings, or --perl-regexp option accordingly, while the value default will return to the default matching behavior.
- grep.extendedRegexp
If set to true, enable --extended-regexp option by default. This option is ignored when the grep.patternType option is set to a value other than default.
OPTIONS
- --cached
Instead of searching tracked files in the working tree, search blobs registered in the index file.
- --no-index
Search files in the current directory that is not managed by Git.
- --untracked
In addition to searching in the tracked files in the working tree, search also in untracked files.
- --no-exclude-standard
Also search in ignored files by not honoring the .gitignore mechanism. Only useful with --untracked.
- --exclude-standard
Do not pay attention to ignored files specified via the .gitignore mechanism. Only useful when searching files in the current directory with --no-index.
- -a
- --text
Process binary files as if they were text.
- --textconv
Honor textconv filter settings.
- --no-textconv
Do not honor textconv filter settings. This is the default.
- -i
- --ignore-case
Ignore case differences between the patterns and the files.
- -I
Don't match the pattern in binary files.
- --max-depth <depth>
For each <pathspec> given on command line, descend at most <depth> levels of directories. A negative value means no limit. This option is ignored if <pathspec> contains active wildcards. In other words if "a" matches a directory named "a", "*" is matched literally so --max-depth is still effective.
- -w
- --word-regexp
Match the pattern only at word boundary (either begin at the beginning of a line, or preceded by a non-word character; end at the end of a line or followed by a non-word character).
- -v
- --invert-match
Select non-matching lines.
- -h
- -H
By default, the command shows the filename for each match. -h option is used to suppress this output. -H is there for completeness and does not do anything except it overrides -h given earlier on the command line.
- --full-name
When run from a subdirectory, the command usually outputs paths relative to the current directory. This option forces paths to be output relative to the project top directory.
- -E
- --extended-regexp
- -G
- --basic-regexp
Use POSIX extended/basic regexp for patterns. Default is to use basic regexp.
- -P
- --perl-regexp
Use Perl-compatible regexp for patterns. Requires libpcre to be compiled in.
- -F
- --fixed-strings
Use fixed strings for patterns (don't interpret pattern as a regex).
- -n
- --line-number
Prefix the line number to matching lines.
- -l
- --files-with-matches
- --name-only
- -L
- --files-without-match
Instead of showing every matched line, show only the names of files that contain (or do not contain) matches. For better compatibility with git diff, --name-only is a synonym for --files-with-matches.
- -O [<pager>]
- --open-files-in-pager [<pager>]
Open the matching files in the pager (not the output of grep). If the pager happens to be "less" or "vi", and the user specified only one pattern, the first file is positioned at the first match automatically.
- -z
- --null
Output \0 instead of the character that normally follows a file name.
- -c
- --count
Instead of showing every matched line, show the number of lines that match.
- --color[=<when>]
Show colored matches. The value must be always (the default), never, or auto.
- --no-color
Turn off match highlighting, even when the configuration file gives the default to color output. Same as --color=never.
- --break
Print an empty line between matches from different files.
- --heading
Show the filename above the matches in that file instead of at the start of each shown line.
- -p
- --show-function
Show the preceding line that contains the function name of the match, unless the matching line is a function name itself. The name is determined in the same way as git diff works out patch hunk headers (see Defining a custom hunk-header in gitattributes(5)).
- -<num>
- -C <num>
- --context <num>
Show <num> leading and trailing lines, and place a line containing -- between contiguous groups of matches.
- -A <num>
- --after-context <num>
Show <num> trailing lines, and place a line containing -- between contiguous groups of matches.
- -B <num>
- --before-context <num>
Show <num> leading lines, and place a line containing -- between contiguous groups of matches.
- -W
- --function-context
Show the surrounding text from the previous line containing a function name up to the one before the next function name, effectively showing the whole function in which the match was found.
- -f <file>
Read patterns from <file>, one per line.
- -e
The next parameter is the pattern. This option has to be used for patterns starting with - and should be used in scripts passing user input to grep. Multiple patterns are combined by or.
- --and
- --or
- --not
- ( ... )
Specify how multiple patterns are combined using Boolean expressions. --or is the default operator. --and has higher precedence than --or. -e has to be used for all patterns.
- --all-match
When giving multiple pattern expressions combined with --or, this flag is specified to limit the match to files that have lines to match all of them.
- -q
- --quiet
Do not output matched lines; instead, exit with status 0 when there is a match and with non-zero status when there isn't.
- <tree>...
Instead of searching tracked files in the working tree, search blobs in the given trees.
- --
Signals the end of options; the rest of the parameters are <pathspec> limiters.
- <pathspec>...
If given, limit the search to paths matching at least one pattern. Both leading paths match and glob(7) patterns are supported.
Examples
- git grep 'time_t' -- '*.[ch]'
Looks for time_t in all tracked .c and .h files in the working directory and its subdirectories.
- git grep -e '#define' --and \( -e MAX_PATH -e PATH_MAX \)
Looks for a line that has #define and either MAX_PATH or PATH_MAX.
- git grep --all-match -e NODE -e Unexpected
Looks for a line that has NODE or Unexpected in files that have lines that match both.
GIT
Part of the git(1) suite


PostgREST Navigation v3
Add points to the map or enter your WGS84 WKT text:
Distance Snap
Raindrop Flow
Catchment Constrained
Max:
km Rd Max:
km
Or enter NHDPlus/Program Identifiers and optional Measures
Start ComID:
Stop ComID:
Start Perm Id:
Stop Perm Id:
Start Reach Code:
Stop Reach Code:
Start Hydro Seq:
Stop Hydro Seq:
Start Measure:
Stop Measure:
Upstream with Tributaries
Upstream Main Path Only
Downstream with Divergences
Downstream Main Path Only
Point to Point
km
Random All
Contiguous US
Hawaii
Puerto Rico / VI
Guam / Marianas
American Samoa


Audio
Your browser does not support the audio element.
Video
Your browser does not support the video element.


Contains examples of the following elements: html, head, title, body, p, h1, h2, pre, img, table, ul, li.
| Star Wars Character | Impression |
| Rey | Discount Natalie Portman. Still Hot though. |
| Kylo Ren | This isn't Twilight. Stop wasting my time with this EMO Snape-clone. |
| Finn | If I'd had something to drink every time he got angsty, I'd be dead. |
| Han Solo | Don't make him run. WHY ARE YOU MAKING HIM RUN!?!? |
The Blessings of Grain Freedom from worries mundane Joy with lost friends -- Michael Moser


Unit 0
=======================================================
Concepts
-basics of the Web
-HTML
-URLs
-HTTP
-Web applications
---------------------------------------------------------------------------------------------
Computers are stupid
-computers have no independant thought or creativity
-can only do what they are told explicitly to do by the programmer
---------------------------------------------------------------------------------------------
World Wide Web
-runs on HTML
-HTML is the glue that holds the Web together
---------------------------------------------------------------------------------------------
Major pieces of the Web
-person and web browser, Internet, and servers
-although different systems, they all can communicate using HTML
---------------------------------------------------------------------------------------------
HTML
-stands for hypertext markup language
-made of text content (what is seen), markup (what it looks like), referances to other documents (images and videos), and links to other pages
---------------------------------------------------------------------------------------------
HTML Markup
-made of opening and closing tags
-the entire thing is called an element
-Use the "b" tag to make things bold, and the "em" tag to make them italicized
---------------------------------------------------------------------------------------------
HTML Attributes
-(a href = "www.imgur.com") Javert (/a)
-"Javert" becomes a link to www.imgur.com
-(a) = the anchor
---------------------------------------------------------------------------------------------
Images
-tag is "img"
-(img src = "url" alt = "text")
-"text" is what shows up when the image doesn't load
-void tag: has no centent or ending
-image tag falls under this category
---------------------------------------------------------------------------------------------
Whitespace
-"br" tag allows for breaks in the lines, seperating them
-falls under the "void tag" category
-"p" tag makes the content into a paragraph
-"pg" tag is not a void tag
-content of the tag will render as a paragraph
---------------------------------------------------------------------------------------------
Inline/block
-"br" tag simply ends a line, so it is inline
-"p" tag makes an invisible box, and is therefore block
---------------------------------------------------------------------------------------------
Span/div
-(span) text (/span) is inline, and acts much like the "br" tag
(div) text (/div) is block, and acts a lot like the "p" tag


Class: App.TestMethodDocumentation
| Defined in: | node_modules/codo/spec/_templates/methods/method_documentation.coffee |
| Inherits: | App.Doc |
Class Method Summary
- . (Boolean) lets_do_it(it, options) Private Do it!
Instance Method Summary
- # (?) fetchLimit() Should be overloaded to change fetch limit.
- # (Boolean) do(it, again, options) Private Do it!
- # (Boolean) doWithoutSpace(it, again, options) Private Do it!
Class Method Details
.
(Boolean)
lets_do_it(it, options)
Private
Do it!
Instance Method Details
#
(?)
fetchLimit()
Should be overloaded to change fetch limit.
#
(Boolean)
do(it, again, options)
Private
Do it!
#
(Boolean)
doWithoutSpace(it, again, options)
Private
Do it!


This box will turn to pink if the viewing area is less than 600px
This box will turn to orange if the viewing area is greater than 900px
This box will turn to blue if the viewing area is between 600px and 900px
This box will only apply to devices with max-device-width: 480px (ie. iPhone)
Your current viewing area is: less than 600px between 600 - 900px greater than 900px


Surfing is a surface water sport in which the wave rider, referred to as a surfer, rides on the forward or deep face of a moving wave, which is usually carrying the surfer toward the shore. Waves suitable for surfing are primarily found in the ocean, but can also be found in lakes or in rivers in the form of a standing wave or tidal bore. However, surfers can also utilize artificial waves such as those from boat wakes and the waves created in artificial wave pools.


Lose your weight over a chat and socializing! At Fitness Diaries, we believe staying healthy and losing weight need not be a lonely and exhausting journey. Fitness Diaries adds a twist to your fitness routine and makes it fun and competitive. Create your fitness group, add your friends, track your goal to challenge each other and make it fun. Also, the app gives you trending diets and recipes and exercises to follow to achieve your goal.
Bring your fitness gang on Fitness Diaries, declare your goal, track your weight and let the competition begin. Socialize over your Fitness and make losing weight motivating & fun.
Choose your diet and get a list of recipes to supplement your fitness regime. Fitness Diaries gives out all trending to traditional diets to choose from.
Losing weight need not be a boring journey. Bring your friends to create your group and motivate each other to stay fit & lose weight. Share your fitness day with your circle and keep growing.
Get a quick insight on workouts and exercises which can fit in your busy day schedule. Challenge your group and push everyone to achieve their goal.


--- layout: documentation title: GenericStructuredCOAType ---
The GenericStructuredCOAType specifies an instantial extension from the abstract StructuredCOAType intended to support the generic inclusion of any COA content.
| Field Name | Type | Description |
|---|---|---|
| @idoptional | QName |
Specifies a unique ID for this StructuredCOA. |
| @idrefoptional | QName |
Specifies a reference to the ID for this StructuredCOA specified elsewhere. When idref is specified, the id attribute must not be specified, and any instance of this StructuredCOA should not hold content. |
| @reference_locationoptional | anyURI |
Specifies a reference URL for the location of the Generic Structured COA. |
| Description1..1 | StructuredTextType |
A structured Description of this Generic Structured COA. |
| Type1..1 | ControlledVocabularyStringType |
Specifies the type of Generic Structured COA. |
| Specification1..1 | EncodedCDATAType |
The Specification field encapsulates any test mechnism specification in its native format within a string field. The specification should be within a CDATA construct within the string field. |


Ayahuasca (M. hostilis & Syrian Rue)
syrian rue 3.5 gr
mimosa hostilis root bark 10 gr
Drank the roo at 11:48pm. Blah!
12.17am drank the mimosa. Dang if that is the grossest shizzle. Drys my mouth, and it's all chalky. Just looking at it, it looks appetizing like red wine or cranberry juice. Looks are deceiving. Me, my bf, and our friend are the only ones huascing, our friend decides Nausicaa is a good movie to put on. Well me and my bf hardly saw any of the begininning of it cause we were watching the spew fly! Just a few minutes after drinking that fowl mimosa my stomach was givin me hell.
I threw up at 12:33am. I couldn't stop my mouth watering. Images from the movie were starting to arrange themselves in jigsaw puzzles and then slowly reconnect to the actual image. I saw a lions face covering the entire tv screen, then it just kinda dawdled its way to the real image, of a character walking. I thought I'd try to drink another 5 grams slowly, and not chug it like I did before. I was worried I may have lost the trip. But luckily I didn't, I was fine, so I didn't drink anymore. I kept thinking I should be tougher but the vomiting I did not want more of.
As I lay on the couch I totally gave up trying to make any sense of this movie, I watched my cev's, and was quite startled. Besides being spectacularly bright, all the patterns were moving in a distinctly circular motion, and I have never seen this w/ anything else. It did seem very wholesome and earthy, like the circle of life or something, how everything is interconnected. I could open my eyes and still see the cev's, but it was a much thinner layer, almost transparent but everywhere. As for the mindtrip, it kinda scared me a bit, like when I first started trippin on mushrooms. Apparantly I still had some of the fear left in my psyche. Not like I'm not afraid of things, but I thought I was over being afraid of the trip, you know?
My thoughts split into about 6 layers, and were all going at once, but not chaotic at all. Each thought layer had it's own voice and personality, and I would switch in between them. They seemed to being having their own private conversations and I felt as though I was intruding, but then again it's my mind and I can't help but hear what they were saying. Sometimes I got a little confused and thought I was talking out loud.
One layer was panicky and I kept reverting to that one very quickly, as though I was being followed and kept checking the rear view mirror constantly to see if I'm still being pursued. Then I'd go back to the layer of good old sanity and experience and remember how many countless times I've tripped. I remember that my bf's here, my friends are here, I'm not alone and I'm safe. One conversation is as follows: 'Why do I have to keep reminding myself I'm ok? What's wrong with reminding myself is that against the law?  Will ya'll stop calling yourself names and have fun?! Ok I will that's a good idea. I love you. I love you too!' These conversations with myself were endless it seemed.  Then I started experimenting with controlling how I laughed in my head.
At 12:50am I had to throw up again. I got up and the head rush was pounding away.  I had to crawl the rest of the way up the stairs and I crawled into the bathroom and fainted. I knew I was going to pass out so I was prepared to lay on the floor. I wasn't out for very long, and once I had my bearings E immediately threw up, and this time it was much more chaotic and otherworldy now that I was trippin pretty hard. The laughing in my head wouldn't stop either.
It was painful, and when I was done I layed on the floor again. I was so hot and was having trouble trying to roll my sleeves up, and then I broke out in a cold sweat. I was facing the bathtub, but it looked like there was a door in there, and it kept opening and closing. I turned around and there was the real door. That kinda freaked me out.
Laying on the floor I had one of the most painful experiences of my life. Laying like a fetus, it felt as though my insides were shattering and slicing and exploding and burning all at once over and over. The pain started almost as a tickle, but in a few seconds turned into a crescendo of torture. While the laughter continued in my head, I was trying to scream over it in my mind, 'make it stop make it stop. please stop, please be over soon.' I felt weak at the fact I was begging. It didn't seem real. But finally, the pain died down. It left almost as quickly as it came. I got up and was kinda like wow that really happened huh. And actually I felt very satisfied. I felt like I had shed some vile poison that had been corroding me. Like I was born again.
I spent the rest of the trip feeling great, watching the movie and enjoying the visuals. Around 3am I could feel the trip dying down, and I actually felt the sharp dropoff and realized the trip was over. Like changing the channel when the movie is done. I probably wouldn't have fainted if I hadn't got up so fast, and combined with that powerful headrush, no wonder that happened. I was so happy that there wasn't any tension, not at all like any rc's. Once the nausea left, I felt pretty relaxed and chill, reflective. Also, the only thing I noticed about sound that was different was I kept hearing whispering, very faint, a womans voice.
This was such a great experience and a great first time, I look forward to more.
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.


This site requires javascript to function.
Please enable javascript or install a browser that can support it, such as Chrome or Firefox, and reload this page.


FUNZIP(1) FUNZIP(1) NAME funzip - filter for extracting from a ZIP archive in a pipe SYNOPSIS funzip [-password] [input[.zip|.gz]] ARGUMENTS [-password] Optional password to be used if ZIP archive is encrypted. Decryp‐ tion may not be supported at some sites. See DESCRIPTION for more details. [input[.zip|.gz]] Optional input archive file specification. See DESCRIPTION for details. DESCRIPTION funzip without a file argument acts as a filter; that is, it assumes that a ZIP archive (or a gzip'd(1) file) is being piped into standard input, and it extracts the first member from the archive to stdout. When stdin comes from a tty device, funzip assumes that this cannot be a stream of (binary) compressed data and shows a short help text, instead. If there is a file argument, then input is read from the specified file instead of from stdin. A password for encrypted zip files can be specified on the command line (preceding the file name, if any) by prefixing the password with a dash. Note that this constitutes a security risk on many systems; currently running processes are often visible via simple commands (e.g., ps(1) under Unix), and command-line histories can be read. If the first entry of the zip file is encrypted and no password is specified on the command line, then the user is prompted for a password and the password is not echoed on the console. Given the limitation on single-member extraction, funzip is most useful in conjunction with a secondary archiver program such as tar(1). The following section includes an example illustrating this usage in the case of disk backups to tape. EXAMPLES To use funzip to extract the first member file of the archive test.zip and to pipe it into more(1): funzip test.zip | more To use funzip to test the first member file of test.zip (any errors will be reported on standard error): funzip test.zip > /dev/null To use zip and funzip in place of compress(1) and zcat(1) (or gzip(1) and gzcat(1)) for tape backups: tar cf - . | zip -7 | dd of=/dev/nrst0 obs=8k dd if=/dev/nrst0 ibs=8k | funzip | tar xf - (where, for example, nrst0 is a SCSI tape drive). BUGS When piping an encrypted file into more and allowing funzip to prompt for password, the terminal may sometimes be reset to a non-echo mode. This is apparently due to a race condition between the two programs; funzip changes the terminal mode to non-echo before more reads its state, and more then ``restores'' the terminal to this mode before exiting. To recover, run funzip on the same file but redirect to /dev/null rather than piping into more; after prompting again for the password, funzip will reset the terminal properly. There is presently no way to extract any member but the first from a ZIP archive. This would be useful in the case where a ZIP archive is included within another archive. In the case where the first member is a directory, funzip simply creates the directory and exits. The functionality of funzip should be incorporated into unzip itself (future release). SEE ALSO gzip(1), unzip(1), unzipsfx(1), zip(1), zipcloak(1), zipinfo(1), zip‐ note(1), zipsplit(1) URL The Info-ZIP home page is currently at http://www.info-zip.org/pub/infozip/ or ftp://ftp.info-zip.org/pub/infozip/ . AUTHOR Mark Adler (Info-ZIP) Info-ZIP 20 April 2009 (v3.95) FUNZIP(1)


안녕하세요?Hello, how are you?
감사합니다or고맙습니다Thank you
네Yes
아니요No
있어요Exists or has
없어요Doesn't exist or don't have
수고하세요Goodbye to a worker
안녕히 계세요Goodbye if you are leaving
안녕히 가세요Goodbye if you are staying
무엇 (뭐)What
왜Why
어디Where
누구Who
언제When
어떻게How
무엇 (뭐)What
왜Why
어디Where
누구Who
언제When
어떻게How
무엇 (뭐)What
왜Why
어디Where
누구Who
언제When
어떻게How


“Come and join the family of Majlis Darbar Franchisee. However, Majlis Darbar franchisee requires low initial investment and in turn provides a great return on capital. Therefore, we are rapidly expanding across PAN India for instance and we are currently operating in Hyderabad with seven locations Banjarahills, Madhapur, Kondapur, Sainikpuri, D.D Colony, Himayathnagar and Kukatpally.
Above all, Majlis Darbar Franchisee offers permanent support from our consultancy, in addition aiming at the best performance and satisfaction of the franchisee. So, Why Wait.. Take the “Leap” into Franchising the Best Opportunity.! Fill out the inquiry form and our team will get in touch with you..””
Come and join the family of Majlis Darbar Franchisee. However, Majlis Darbar franchisee requires low initial investment and in turn provides a great return on capital. Therefore, we are rapidly expanding across PAN India for instance and we are currently operating in Hyderabad with seven locations,Bengaluru and Andra pradesh as well.
Are you interested to introduce our Arabian thrill in your way? Join our franchise opportunity with the details provided here.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim nostrud exercitation ullamco laboris nisi.
The franchisee-owned company-operated model, assures risk-free opportunities giving a minimum guarantee of revenue earned.
Bringing world-class recipes to a single place,serving trendy and delightful flavors which makes our menu to stand way out of the crowd.
Our dedicated marketing team develops in-house strategies with focused campaigns promoting from in-store to online media & PR.
We have the right structure in place to support you throughout the journey, providing initial and ongoing training for staff in all aspects.


 You observe the kitchen area where you currently stand. There is a narrow counter top under the windows on the left wall and a dining room server at the right, nothing out of the ordinary. A massive buffet with a painting of fruits stands next to it, filled with pots, porcelain and silver. You wonder how bothersome it was to take care of the dishes a century ago. You certainly are fond of the amenities offered by modern plumbing.
Your eyes pick up an old clock on the wall closest to the dining table.  It is a well-preserved timepiece from the Victorian Era. However, as you get closer to it, it does not seem to be ticking. You know that clocks have a steady 'tick-tock' sounds not unlike a metronome when they are working properly.
As you stand next to the clock, you take note that across the room above the dining room server, there is a wedding portrait. In fact, it is so imposing that you wonder how it did not capture your attention when you came in.
As you like tinkering with broken things, you know from experience that, if a pendulum clock has stopping, it could be due to its position. You think the clock is not quite level, so you poke at it with enthusiasm. Once satisfied that the clock is no longer leaning to the left or right, or at an angle, you expect the pendulum to start swinging again and wait to see if the metronome-like ticking is triggered.
Even if the clock is straightened, the pendulum does not seem to move. Confused, you open the clock's pendulum door to examine its innards. You gasp! There is a sheet wedged against the pendulum.
As you unfold it, you see the sheet of paper is referring to some kind of maths problem (you grimace). There are handwritten notes and question marks and it looks like the note was ripped off a newspaper.
You have a close look at the wedding picture. The lady on the left has a beautiful white dress and the man looks a bit stiff in his fancy outfit. The picture has aged well and is enclosed in an elaborated wooden frame. The frame is bulky and is hung securely on the wall.
You call in the McMillans to ask if they know who is the couple in the portrait. Mrs McMillan confirms the couple was indeed her relatives on their wedding day. She does not remember much about them.
Mr McMillan huffs and puffs in agreement. Montaguë barks.


|
CMSIS-DAP
Version 1.2.0 (Proposal)
Interface Firmware for CoreSight Debug Access Port
|
Commands between Debug Unit and host computer. More...
Content | |
| General Commands | |
| Information and Control commands for the CMSIS-DAP Debug Unit. | |
| Common SWD/JTAG Commands | |
| Set SWD/JTAG clock and control/monitor SWD/JTAG I/O pins. | |
| SWD Commands | |
| Configure the parameters for SWD mode. | |
| SWO Commands | |
| Configure the parameters for SWO mode. | |
| JTAG Commands | |
| Detect and configure the JTAG device chain. | |
| Transfer Commands | |
| Read and Writes to CoreSight registers. | |
| Test Input Commands | |
| Management commands for optional Test Inputs. | |
| Atomic Commands | |
| Execute atomic commands. | |
| Response Status | |
| Status Information in Response Data. | |
Commands between Debug Unit and host computer.
This section explains each command that is exchanged between the Debug Unit and the host computer. Every Command starts with a Command-ID and optional data. Depending on the Command, the CMSIS-DAP firmware replies with a Response that repeats the Command-ID and delivers additional data.
Command and Response data have a package size limitation that is defined with DAP_PACKET_SIZE. This configuration setting can be obtained with the command DAP_Info and is used to optimize the performance for Full-Speed or High-Speed USB. The debugger must ensure that each data package fits within the limitations of the configured DAP_PACKET_SIZE.
The following conventions describe the command semantic used in the following documentation:
| Symbol | Description |
|---|---|
| > | Prefix indicating the direction: Command from host to Debug Unit. |
| < | Prefix indicating the direction: Response from Debug Unit to host. |
| BYTE | 8-bit value. |
| SHORT | 16-bit value (low byte first). |
| WORD | 32-bit value (low byte first). |
| LWORD | 64-bit value (low byte first). |
| FLOAT | 32-bit single precision floating point value (LSB first). |
| 0x01 | Fixed HEX value in C notation. Used for example to identify a command. |
| Reserved | The field above is reserved for future extension. |
| **** | The field above has exactly one occurrence. |
| ++++ | The field above has a variable length. |
| ////// | The field above is repeated and may appear 0..n times. |
The commands are described in a structure consisting of three lines.
Examples:
The Command with the Command-ID 0x99 is sent from the host computer to the Debug Unit. The value of RecLen indicates the number of WORDS that follow with Data. Data is repeated several times depending on the value of RecLen.
Depending on the Command the Debug Unit may send a Response.


Java Accessibility Guide > Java Access Bridge Programmer's Guide for Assistive Technology Developers > Java Access Bridge API
The Java Access Bridge API enables you to develop assistive technology applications for the Microsoft Windows operating system that work with Java applications. It contains native methods that enable you to view and manipulate information about GUI elements in a Java application, which is forwarded to your assistive technology application through Java Access Bridge.
The following topics are covered:
The Java Access Bridge API can be found in three files: AccessBridgeCalls.h
, AccessBridgePackages.h
, and AccessBridgeCallbacks.h
. These files correspond to the Java Access Bridge API calls, the API data structures, and the API callbacks, respectively.
Java Access Bridge 2.0.2 includes a new set of APIs in order to support 64-bit systems. However, the changes to the API are specific to parameters passed in API calls; there are no name changes in the API.
Assistive Technologies must recompile their applications with the new header files provided in the source.
Objects of type jobject
are now passed as jlong
. The typedef JOBJECT64
is either a jobject
or jlong
depending on whether ACCESSBRIDGE_ARCH_LEGACY
is defined. See the AccessBridgePackages.h
header file.
For usage examples, see the JavaFerret.cpp
example:
void HandlePropertyChildChange( long vmID, PropertyChangeEvent event, AccessibleContext ac, JOBJECT64 oldChild, JOBJECT64 newChild); void HandlePropertyActiveDescendentChange( long vmID, PropertyChangeEvent event, AccessibleContext ac, JOBJECT64 oldActiveDescendent, JOBJECT64 newActiveDescendent);
The Java Access Bridge API calls are contained in AccessBridgeCalls.h
and to use them, you must also compile the file AccessBridgeCalls.c
, which acts as the interface between your application and WindowsAccessBridge.dll
.
These two functions start and shut down Java Access Bridge.
BOOL
initializeAccessBridge
();
Starts Java Access Bridge. You cannot use any part of the Java Access Bridge API until you call this function.
BOOL
shutdownAccessBridge
();
Shuts down Java Access Bridge. It is important to call this function when your application is finished using Java Access Bridge (before your application exists) so that Java Access Bridge can properly perform memory cleanup.
Note: Calling the function shutdownAccessBridge
is not a substitute for releasing any data structures that are maintained by the JVM; do this by calling the function ReleaseJavaObject
.
You typically call these functions before calling any other Java Access Bridge API function:
BOOL
IsJavaWindow
(HWND window);
Checks to see if the given window implements the Java Accessibility API.
BOOL
GetAccessibleContextFromHWND
(HWND target, long *vmID, AccessibleContext *ac);
Gets the AccessibleContext
and vmID
values for the given window. Many Java Access Bridge functions require the AccessibleContext
and vmID
values.
These take a function pointer to the function that will handle the event type. When you no longer are interested in receiving those types of events, call the function again, passing in the NULL
value. Find prototypes for the function pointers you need pass into these functions in the file AccessBridgeCallbacks.h
. See the section "API Callbacks" for more information about these prototypes.
void
SetFocusGained
(AccessBridge_FocusGainedFP fp);
void
SetFocusLost
(AccessBridge_FocusLostFP fp);
In order to determine the functionality available, you can get version information from the GetVersionInfo
call.
void
ReleaseJavaObject
(long vmID, Java_Object object);
Release the memory used by the Java object object
, where object
is an object returned to you by Java Access Bridge. Java Access Bridge automatically maintains a reference to all Java objects that it returns to you in the JVM so they are not garbage collected. To prevent memory leaks, you must call ReleaseJavaObject
on all Java objects returned to you by Java Access Bridge once you are finished with them. See JavaFerret.c
for an illustration of how to do this.
BOOL
GetVersionInfo
(long vmID, AccessBridgeVersionInfo *info);
Gets the version information of the instance of Java Access Bridge instance your application is using. You can use this information to determine the available functionality of your version of Java Access Bridge.
Note:
In order to determine the version of the JVM, you need to pass in a valid vmID
; otherwise all that is returned is the version of the WindowsAccessBridge.DLL
file to which your application is connected.
These functions provide the core of the Java Accessibility API that is exposed by Java Access Bridge.
The functions GetAccessibleContextAt
and GetAccessibleContextWithFocus
retrieve an AccessibleContext
object, which is a magic cookie (really a Java Object
reference) to an Accessible
object and a JVM cookie. You use these two cookies to reference objects through Java Access Bridge. Most Java Access Bridge API functions require that you pass in these two parameters.
Note: AccessibleContext
objects are 64-bit references under 64-bit inter-process communication (which uses the DLL and JAR files with -32
and -64
in their file names), while AccessibleContext
objects are 32-bit references under 32-bit inter-process communication (which uses the DLL and JAR files without -32
and -64
in their file names). Consequently, you need to recompile your Assistive Technology applications if you are using 64-bit inter-process communication.
The function GetAccessibleContextInfo
returns detailed information about an AccessibleContext
object belonging to the JVM. In order to improve performance, the various distinct methods in the Java Accessibility API are collected together into a few routines in the Java Access Bridge API and returned in struct
values. These struct
values are defined in the file AccessBridgePackages.h
and are described in the section "API Callbacks".
The functions GetAccessibleChildFromContext
and GetAccessibleParentFromContext
enable you to walk the GUI component hierarchy, retrieving the nth child, or the parent, of a particular GUI object.
BOOL
GetAccessibleContextAt
(long vmID, AccessibleContext acParent, jint x, jint y, AccessibleContext *ac)
Retrieves an AccessibleContext
object of the window or object that is under the mouse pointer.
BOOL
GetAccessibleContextWithFocus
(HWND window, long *vmID, AccessibleContext *ac);
Retrieves an AccessibleContext
object of the window or object that has the focus.
BOOL
GetAccessibleContextInfo
(long vmID, AccessibleContext ac, AccessibleContextInfo *info);
Retrieves an AccessibleContextInfo
object of the AccessibleContext
object ac
.
AccessibleContext
GetAccessibleChildFromContext
(long vmID, AccessibleContext ac, jint index);
Returns an AccessibleContext
object that represents the nth child of the object ac
, where n is specified by the value index
.
AccessibleContext
GetAccessibleParentFromContext
(long vmID, AccessibleContext ac);
Returns an AccessibleContext
object that represents the parent of object ac
.
These functions get AccessibleText
information provided by the Java Accessibility API, broken down into seven chunks for efficiency. An AccessibleContext
has AccessibleText
information contained within it if the flag accessibleText
in the AccessibleContextInfo
data structure is set to TRUE
. The struct
values used in these functions are defined in the file AccessBridgePackages.h
and are described in the section "API Callbacks".
 An AccessibleContext
object has AccessibleValue
information contained within it if the flag accessibleValue
in the AccessibleContextInfo
data structure is set to TRUE
. The values returned are strings (char *value
) because there is no way to tell in advance if the value is an integer, a floating point value, or some other object that subclasses the Java language construct java.lang.Number
.
BOOL
GetCurrentAccessibleValueFromContext
(long vmID, AccessibleValue av, wchar_t *value, short len);
BOOL
GetMaximumAccessibleValueFromContext
(long vmID, AccessibleValue av, wchar_ *value, short len);
BOOL
GetMinimumAccessibleValueFromContext
(long vmID, AccessibleValue av, wchar_ *value, short len);
These functions get and manipulate AccessibleSelection
information provided by the Java Accessibility API. An AccessibleContext
has AccessibleSelection
information contained within it if the flag accessibleSelection
in the AccessibleContextInfo
data structure is set to TRUE
. The AccessibleSelection
support is the first place where the user interface can be manipulated, as opposed to being queries, through adding and removing items from a selection. Some of the functions use an index that is in child coordinates, while other use selection coordinates. For example, add to remove from a selection by passing child indicies (for example, add the fourth child to the selection). On the other hand, enumerating the selected children is done in selection coordinates (for example, get the AccessibleContext
of the first object selected).
void
AddAccessibleSelectionFromContext
(long vmID, AccessibleSelection as, int i);
void
ClearAccessibleSelectionFromContext
(long vmID, AccessibleSelection as);
jobject
GetAccessibleSelectionFromContext
(long vmID, AccessibleSelection as, int i);
int
GetAccessibleSelectionCountFromContext
(long vmID, AccessibleSelection as);
BOOL
IsAccessibleChildSelectedFromContext
(long vmID, AccessibleSelection as, int i);
void
RemoveAccessibleSelectionFromContext
(long vmID, AccessibleSelection as, int i);
void
SelectAllAccessibleSelectionFromContext
(long vmID, AccessibleSelection as);
The Java Access Bridge API data structures are contained in the file AccessBridgePackages.h
. There are data structures in this file that you do not need (and can ignore); they are used as part of the inter-process communication mechanism of the two Java Access Bridge DLLs. The data structures of importance are as follows:
#define MAX_STRING_SIZE 1024 #define SHORT_STRING_SIZE 256 struct AccessBridgeVersionInfo { wchar_t VMversion[SHORT_STRING_SIZE]; // version of the Java VM wchar_t bridgeJavaClassVersion[SHORT_STRING_SIZE]; // version of the // AccessBridge.class wchar_t bridgeJavaDLLVersion[SHORT_STRING_SIZE]; // version of // JavaAccessBridge.dll wchar_t bridgeWinDLLVersion[SHORT_STRING_SIZE]; // version of // WindowsAccessBridge.dll }; struct AccessibleContextInfo { wchar_ name[MAX_STRING_SIZE]; // the AccessibleName of the object wchar_ description[MAX_STRING_SIZE]; // the AccessibleDescription of the object wchar_ role[SHORT_STRING_SIZE]; // localized AccesibleRole string wchar_ states[SHORT_STRING_SIZE]; // localized AccesibleStateSet string // (comma separated) jint indexInParent // index of object in parent jint childrenCount // # of children, if any jint x; // screen x-axis co-ordinate in pixels jint y; // screen y-axis co-ordinate in pixels jint width; // pixel width of object jint height; // pixel height of object BOOL accessibleComponent; // flags for various additional BOOL accessibleAction; // Java Accessibility interfaces BOOL accessibleSelection; // FALSE if this object doesn't BOOL accessibleText; // implement the additional interface BOOL accessibleInterfaces; // new bitfield containing additional // interface flags }; struct AccessibleTextInfo { jint charCount; // # of characters in this text object jint caretIndex; // index of caret jint indexAtPoint; // index at the passsed in point }; struct AccessibleTextItemsInfo { wchar_t letter; wchar_t word[SHORT_STRING_SIZE]; wchar_t sentence[MAX_STRING_SIZE]; }; struct AccessibleTextSelectionInfo { jint selectionStartIndex; jint selectionEndIndex; wchar_t selectedText[MAX_STRING_SIZE]; }; struct AccessibleTextRectInfo { jint x; // bounding recttangle of char at index, x-axis co-ordinate jint y; // y-axis co-ordinate jint width; // bounding rectangle width jint height; // bounding rectangle height }; struct AccessibleTextAttributesInfo { BOOL bold; BOOL italic; BOOL underline; BOOL strikethrough; BOOL superscript; BOOL subscript; wchar_t backgroundColor[SHORT_STRING_SIZE]; wchar_t foregroundColor[SHORT_STRING_SIZE]; wchar_t fontFamily[SHORT_STRING_SIZE]; jint fontSize; jint alignment; jint bidiLevel; jfloat firstLineIndent; jfloat leftIndent; jfloat rightIndent; jfloat lineSpacing; jfloat spaceAbove; jfloat spaceBelow; wchar_t fullAttributesString[MAX_STRING_SIZE]; };
The Java Access Bridge API callbacks are contained in the file AccessBridgeCallbacks.h
. Your event handling functions must match these prototypes.
Note: All of the Java Access Bridge event handlers are defined and used in the Java Ferret example.
You must call the function ReleaseJavaObject
on every JOBJECT64
returned through these event handlers once you are finished with them to prevent memory leaks in the JVM.
Here, JOBJECT64
is defined as jlong
on 64-bit systems and jobject
on legacy versions of Java Access Bridge. For definitions, see the section ACCESSBRIDGE_ARCH_LEGACY
in the AccessBridgePackages.h
header file.
If using legacy APIs, define ACCESSBRIDGE_ARCH_LEGACY
. See the AccessBridgePackages.h
header file.
typedef void (*
AccessBridge_FocusGainedFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_FocusLostFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_CaretUpdateFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_MouseClickedFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_MouseEnteredFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_MouseExitedFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_MousePressedFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_MouseReleasedFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_MenuCanceledFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_MenuDeselectedFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_MenuSelectedFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_PopupMenuCanceledFP
) (long vmID JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_PopupMenuWillBecomeInvisibleFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_PopupMenuWillBecomeVisibleFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_PropertyNameChangeFP
) (long vmID, JOBJECT64 event, JOBJECT64 source, wchar_t *oldName, wchar_t *newName);
typedef void (*
AccessBridge_PropertyDescriptionChangeFP
) (long vmID, JOBJECT64 event, JOBJECT64 source, wchar_t *oldDescription, wchar_t *newDescription);
typedef void (*
AccessBridge_PropertyStateChangeFP
) (long vmID, JOBJECT64 event, JOBJECT64 source, wchar_t *oldState, wchar_t *newState);
typedef void (*
AccessBridge_PropertyValueChangeFP
) (long vmID, JOBJECT64 event, JOBJECT64 source, wchar_t *oldValue, wchar_t *newValue);
typedef void (*
AccessBridge_PropertySelectionChangeFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_PropertyTextChangeFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_PropertyCaretChangeFP
) (long vmID, JOBJECT64 event, JOBJECT64 source, int oldPosition, int newPosition);
typedef void (*
AccessBridge_PropertyVisibleDataChangeFP
) (long vmID, JOBJECT64 event, JOBJECT64 source);
typedef void (*
AccessBridge_PropertyChildChangeFP
) (long vmID, JOBJECT64 event, JOBJECT64 source, JOBJECT64 oldChild, JOBJECT64 newChild);
typedef void (*
AccessBridge_PropertyActiveDescendentChangeFP
) (long vmID, JOBJECT64 event, JOBJECT64 source, JOBJECT64 oldActiveDescendent, JOBJECT64 newActiveDescendent);


{% include 'students/menu.html' %}
{{ arg['heading'] }}
Posted By
:
{{ arg['professor'] }}
Max Marks
:
{{ arg['max_marks'] }}
Course
:
{{ arg['course'] }}
Deadline
:
{{ arg['deadline'] }}
Description:
{{arg['description']}}
Files Uploaded :
{%for file in arg['filenames']%}
{{arg['files'][loop.index0]}} :
{{file}}
{%endfor%}
Delete My Submission


I don't know much about writing, but the one, and hardest, lesson I've learned was the art of not writing.
It can be contradictory, obviously, but understanding what not to write is the one fundamental skill often overlooked that leads to nothing but the demise of the object and subject, reader and writer.
For the writer, there is no abstract analysis, a "simple poem" describing one's feeling, or a crazy non-sensical novel: every written word is a promissory note with one's future self.
Writing is not simply describing what has become, or hypothesize on becoming itself or other abstract idea.
Writing is the unraveling of becoming itself - the set of directions with whom the subject will become.
This may appear as a fantastic, beautiful idea: setting up one's steps to become a better being. Yet, it can easily become the most destructive of forces.
Whenever melancholy, tragedy, evil, darkness shows up, there also exists an appetite for the writing of such experiences. The writer, naively, wants to merely "take out of the chest", describe what's happening, find a language for one's sufferring. The problem is there's not way of doing so. In each written sentence, the writer becomes the future subject, when not prisoner, of his own words.
Closely analyzing Nietzsche's last moments, and myriad similar examples, it becomes clear that they are not merely oppressed by an external societal force, inasmuch as they're also strong prisoners of their own literary becoming.
A more disturbing analogy would be Plato's claim that that poets should be thrown out of the city and the historical proof of this. From Milošević to German's Reich, the unraveling of the vicious national identity only happened through the medium of poetry, or associated means.
Surely, most of these writers did not actively conspired to turn literary hate, bias, and "will" into murdoreous, evil behaviour; still, the subject of such activities were surely motivated, when not urged, by them.
Writing is the most powerful tool in the world. And it wouldn't be surprise if it were dangerous.
That's why for me, I only write what I want to become, to see and to experience.
And if I try it, it's for a good reason: all good books are catholic books.


| MATLAB 文件帮助: cv.minEnclosingTriangle | 查看 cv.minEnclosingTriangle 的代码 | Index |
minEnclosingTriangle Finds a triangle of minimum area enclosing a 2D point set and returns its area.
[triangle,area] = cv.minEnclosingTriangle(points)
int32
or single
,
stored in numeric array (Nx2/Nx1x2/1xNx2) or cell array of 2-element
vectors ({[x,y], ...}
).The function finds a triangle of minimum area enclosing the given set of 2D points and returns its area.
The implementation of the algorithm is based on O'Rourke's [ORourke86] and
Klee and Laskowski's [KleeLaskowski85] papers. O'Rourke provides a
theta(n)
algorithm for finding the minimal enclosing triangle of a 2D
convex polygon with n
vertices. Since the cv.minEnclosingTriangle function
takes a 2D point set as input an additional preprocessing step of computing
the convex hull of the 2D point set is required. The complexity of the
cv.convexHull function is O(nlog(n))
which is higher than theta(n)
.
Thus the overall complexity of the function is O(nlog(n))
.
[ORourke86]:
Joseph O'Rourke, Alok Aggarwal, Sanjeev Maddila, and Michael Baldwin. "An optimal algorithm for finding minimal enclosing triangles". Journal of Algorithms, 7(2):258-269, 1986.
[KleeLaskowski85]:
Victor Klee and Michael C Laskowski. "Finding the smallest triangles containing a given convex polygon". Journal of Algorithms, 6(3):359-375, 1985.


(hide instructions)
Resume saved game.
Turn to 1 to begin.
10
This should have number 10, as specified in first map file. The end, at
99
, should be at 99.
99
Number 99, as specified in second map file.
(show instructions)


"""Abstract Authenticator Storage class defines interface
that storage mechanisms must implement to act as storage
provider for an Authenticator.
Should consider also how to encrypt/protect the underlying storage medium
"""
"""
© Copyright 2020-2021 University of Surrey
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
 IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
"""
from abc import ABC, abstractmethod
from typing import Dict, List
from ctap.credential_source import PublicKeyCredentialSource
from authenticator.datatypes import PublicKeyCredentialDescriptor
[docs]class DICEAuthenticatorStorage(ABC):
"""Abstract authenticator storage class defining core
functionality that storage methods must provide
Args:
\*\*args: variable number of named arguments to handle subclassing
"""
def __init__(self,**args):
pass
[docs] @abstractmethod
def is_initialised(self)->bool:
"""Check if the storage has been initialised
If not initialise init_new should be called
Returns:
bool: True if initialise, False if not
"""
[docs] @abstractmethod
def get_master_secret(self)->bytes:
"""gets the master secret
Returns:
bytes: bytes containing the master secret
"""
[docs] @abstractmethod
def init_new(self,master_secret:bytes):
"""Creates a new instance with the specified master secret
Args:
master_secret (bytes): master secret to initialise with
"""
[docs] @abstractmethod
def get_signature_counter(self)->int:
"""Gets the global signature counter
Returns:
int: global signature counter
"""
[docs] @abstractmethod
def update_signature_counter(self, new_counter:int)->bool:
"""Updates the global signature counter with the new value
Args:
new_counter (int): new value to set the counter to
Returns:
bool: True if set and written, False otherwise
"""
[docs] @abstractmethod
def increment_signature_counter(self)->bool:
"""Increments the global signature counter
Returns:
bool: True if incremented and written, False otherwise
"""
[docs] @abstractmethod
def update_credential_source(self, rp_id: str,
credential_source: PublicKeyCredentialSource) -> bool:
"""Updates the specified credential source with a new version. This is primarily
used for updating signature counters after a getAssertion call
When performing the update the implementer should call get_loaded_bytes
on the credential_source to get the originally loaded bytes and match based
on those.
Args:
rp_id (str): string of the rp_id
credential_source (PublicKeyCredentialSource): credential source to update
Returns:
bool: [description]
"""
[docs] @abstractmethod
def add_credential_source(self,rp_id:str,user_id:bytes,
credential_source:PublicKeyCredentialSource)->bool:
"""Adds the specified credential source indexed by the RpID and the UserId
Args:
rp_id (str): Relying party ID
user_id (bytes): User ID
credential_source (PublicKeyCredentialSource): credential source to store
Returns:
bool: True if written, False otherwise
"""
[docs] @abstractmethod
def debug(self):
"""Prints a debug string about the contents of the storage medium, i.e. keys,
RPs etc
"""
[docs] @abstractmethod
def get_credential_source(self,rp_id:str,user_id:bytes)->PublicKeyCredentialSource:
"""gets a credential source using the Relying Party ID and User ID as indexes
Args:
rp_id (str): Relying party to look up
user_id (bytes): User id within relying party to retrieve
Returns:
PublicKeyCredentialSource: credential source found
"""
[docs] @abstractmethod
def get_credential_source_by_rp(self,rp_id:str, allow_list=None)->Dict:
"""Gets credential sources using the relying party ID as an index and then applying the
passed in allow_list, if provided
Args:
rp_id (str): Relying party to look up
allow_list ([type], optional): allow list of credentials. Defaults to None.
Returns:
PublicKeyCredentialSource: map of credential sources matching the criteria
"""
[docs] @abstractmethod
def get_pin_retries(self)->int:
"""Gets the number of PIN retries remaining
Returns:
int: PIN retries remaining
"""
[docs] @abstractmethod
def get_pin(self)->bytes:
"""Gets the pin
Returns:
bytes: bytes containing the PIN
"""
[docs] @abstractmethod
def set_pin_retries(self, retries:int)->int:
"""Sets the number of retries remaining
Args:
value (int): retries remaining to set
Returns:
int: the number of retries remaining
"""
[docs] @abstractmethod
def set_pin(self, pin_value:bytes):
"""Sets the PIN to the specified bytes
Args:
pin_value (bytes): PIN as bytes
"""
[docs] @abstractmethod
def decrement_pin_retries(self)->int:
"""Decreases PIN retries by one
Returns:
int: PIN retries remaining after decrease
"""
[docs] @abstractmethod
def reset(self)->bool:
"""Resets the storage medium to new
Warning: this will cause existing credential data to be lost
should only be called with user permission
Returns:
bool: True if reset is successful, False if not
"""
[docs] @abstractmethod
def get_wrapping_key(self)->bytes:
"""Gets the global wrapping key
Returns:
bytes: wrapping key as bytes
"""
[docs] @abstractmethod
def set_wrapping_key(self, wrap_key:bytes)->bool:
"""Sets the global wrapping key to key bytes
Args:
wrap_key (bytes): wrapping key to store
Returns:
bool: True if set, False if not
"""
[docs] @abstractmethod
def delete_field(self, key:str)->bool:
"""Removes the specified key
Args:
key (str): key to remove
Returns:
bool: True if successful, False if not
"""
[docs] @abstractmethod
def get_string(self, key:str)->str:
"""Gets an arbitray string from the data store
This can be used to store additional arbitrary data, for
example, JSON encoded strings
Returns:
str: arbitrary string data or None if not set
"""
[docs] @abstractmethod
def set_string(self, key:str, data:str)->bool:
"""Sets an abitrary string in the data store
This can be used to store additional arbitrary data, for
example, JSON encoded strings
Args:
key (str): field key
data (str): data encoded as a string
Returns:
bool: True if stored, False if not
"""
[docs] @abstractmethod
def has_wrapping_key(self)->bool:
"""Checks whether a wrapping key has been set
Returns:
bool: True if a wrapping key has been set, False if not
"""
[docs] @abstractmethod
def set_uv_value(self, uv_check_value:bytes)->bool:
"""Sets an arbitrary byte value that contains the data to perform
user verification. It could be biometric, a test encryption or some
other data.
Args:
uv_check_value (bytes): user verification check data
Returns:
bool: True if set, False if not
"""
[docs] @abstractmethod
def get_uv_value(self)->bytes:
"""Gets the user verification data
Returns:
bytes: user verification data if set, or None
"""
[docs] def convert_allow_list_to_map(self, allow_list:List[PublicKeyCredentialDescriptor]):
"""Converts an allow list received from the client into a
map for use with filtering credentials. In effect iterates
through credentials in allow list and indexes them by
user id in a map
Args:
allow_list ([PublicKeyCredentialDescriptor]): list of
allowed Public Key Credential Descriptors
Returns:
map : map of allowed credentials indexed by credential ID
"""
allow = {}
for allowed in allow_list:
allow[allowed.get_id()]=allowed.get_type()
return allow
[docs]class DICEAuthenticatorStorageException(Exception):
"""Exception raised when accessing the storage medium
Attributes:
message -- explanation of the error
"""
def __init__(self, message="Storage Exception"):
self.message = message
super().__init__(self.message)


Binding custom behavior on window resize event
mac-window-resizeType: ExpressionExpression to evaluate on window resize
Expression


Icelandic is the official language of Iceland, being spoken by about 97% of the population. English is also widely spoken and understood, mainly becuase of the large number of English-speaking tourists that visit the country but also because of the fact that it is compulsory to learn both English and another Scandanavian langauge (often Danish) in Icelandic schools.
Basic Icelandic Phrases
Below, you can learn how to say a few basic phrases in Icelandic! Try listening to the audio.
Hæ/Halló
Pronounced: Hi/Hah-low
Starting with the very basics, here are your generic greetings; both simply mean 'hello'. You use these the same way you would in the English language. Hæ is more common and it is often said twice in a greeting: Hæ hæ
Hæ
Halló
Já
Pronounced: y-ow
This means 'yes'.
Nei
Pronounced: ney
This means 'no'.
Góðan daginn
Pronounced: go-thah-n die-in
The literal translation here is 'good day' and it is probably the most common greeting in the Icelandic language. Use this to say hello to all the people you meet and it will show them that you are both polite and friendly.
Ég heiti
Pronounced: ye-gh hey-tee
This means 'My name is...'.
Hvar er
Pronounced: kva-r e-r
This means 'Where is...?'.
Klósett
Pronounced: k-low-seht
This simply means bathroom, or toilet.
Hversu mikið kostar þetta
Pronounced: kve-r-su mih-kith coh-stah-r theh-tah
This means 'How much does this cost?' When shopping for food or souvenirs, it will be helpful to be able to ask how much an object costs. They may also use the word 'kall', which is the equivalent of 'bucks' in English.
Þakka þér
Pronounced: thah-kah th-yeh-r
This is a formal way of saying 'thank you'.
Verðu þér góður
Pronounced: veh-r-thu th-yeh-r go-thu-r
This basically means 'you are welcome'.
Bless
Pronounced: bleh-s
This means 'goodbye' or simply 'bye'. This, like the greeting, is often repeated twice: 'Bless bless'.


Schumer: Airlines must let kids sit with their parents
by Associated PressNEW YORK (AP) — Sen. Charles Schumer says airlines lack policies assuring children can sit with their parents, despite 2016 legislation requiring the federal Department of Transportation to enact a universal family friendly seating policy.
Schumer says Sunday that recent complaints by parents to the federal agency reveal that children are sometimes seated rows away from their families, even when parents paid extra fees to ensure their kids sit with them.
Schumer said an investigation by Consumer Reports revealed 136 complaints against airlines for separating parents from children as young as 2 years old.
He sent a letter to Secretary of Transportation Elaine Chao urging her to establish a policy to keep families together when traveling on commercial aircraft.