Release History
2.2.2 / 2011-08-13 Charlie Savage
- ++API CHANGE+++
Reader#relax_ng_validate now takes a RelaxNG object. This is what the documentation has always said it takes, but it previously took a string. In addition, it now returns true or false instead of 0 or -1.
Reader#schema_validate now takes a Schema object. This is what the documentation has always said it takes, but it previously took a string. In addition, it now returns true or false instead of 0 or -1.
Fixes GitHub issue 30.
- Added Parser::Context#close and HTMLParser::Context#close methods that allow the underlying io stream (file, string, etc) to be closed. Once a parser is done parsing its data, it now calls one of these methods. This means that if you parse thousands of files at the same time, without running Ruby’s garbage colllector, you won’t get a too many files open error. Fixes GitHub issue 29.
- Fixed bug where Node#inner_xml caused an error when it had no child nodes. Fixes GitHub issues 31
- Don’t require ‘rake’ in the gemspec to avoid annoying Bunlder bugs
2.2.1 / 2011-08-13 Charlie Savage
- Packaging fix - include the custom .def file in the gem.
2.2.0 / 2011-08-09 Charlie Savage
- Update encoding support for Ruby 1.9 so that libxml-ruby returns strings encoded in UTF-8. This change was required since libxml internally stores strings in UTF-8. The exceptions to this rule are the to_s methods which return UTF-8 by default but can return other encodings if requested.
2.1.2 / 2011-08-03 Charlie Savage
- Fix segmentation fault that could occur when an XPathContext was marked before it was fully initialized (Charlie Savage).
- Add mark method to document to mark all nodes currently being accessed by ruby. This make Ruby Enterprise Edition happy (Charlie Savage).
2.1.1 / 2011-07-31 Charlie Savage
- Switch to using def files to control library exports (Charlie Savage).
2.1.0 / 2011-07-31 Charlie Savage
- Ruby 1.9.3 compatability (Charlie Savage).
- Added XPath expression <-> Ruby value conversion methods (Jens Wille).
- Extracted rxml_xpath_to_value from rxml_xpath_context_find (Jens Wille).
- Adapted rxml_xpath_from_value from Gregoire Lejeune’s ruby-xslt library, see github.com/glejeune/ruby-xslt (Jens Wille).
- Allow calling find on nodes returned from Reader (Charlie Savage).
- Change document handling in XPath::Context to address segmentation fault on Ruby Enterprise Edition (Charlie Savage).
- Update gemspec file to work directly with bundler thereby allowing git repository to be used as gem (Charlie Savage).
- Support gem buld (Charlie Savage).
- Simplify memory management of attributes namespaces to fix segmentation faults that occurred when using Ruby 1.9.3 (Charlie Savage).
2.0.8 / 2011-06-23 Charlie Savage
- Add in 2 new HTML Parser constants - NODEFDTD and NOIMPLIED.
- Fix compile issue on Ruby 1.9.3
2.0.6 / 2011-05-23 Charlie Savage
- Fix segfault that sometimes occurred when looking up encodings on 1.9. In some cases the Ruby encoding infrastructure was not properly initialized (nkriege).
2.0.5 / 2011-05-05 Charlie Savage
- Document#validate_dtd would sometimes cause segmentation faults due to an improperly initialized data structure (Charlie Savage)
2.0.4 / 2011-05-02 Charlie Savage
- Fix compile issues on platforms using older versions of libxml2. The problem as using a C14N constants that was added to libxml2 in July 2009 (Charlie Savage).
2.0.3 / 2011-05-01 Charlie Savage
- The biggest change in this release is supporting the use of libxml-ruby in native background Ruby threads. Previously, the use of libxml-ruby in background threads in Ruby 1.9.x and higher would often cause segmentation faults. This has now been fixed (Charlie Savage).
- Update Reader#expand so that returned node correctly remembers its encoding in Ruby 1.9.x (zerebubuth).
- Add check to verify a node has not been deleted. This can happen when a ruby variable holds a reference to a child node that gets freed when its parent gets freed. Previously when this happened a segmentation fault would occur, now an exception is raised (Charlie Savage, fixes RubyForge 26839.
- Do not unlink nodes before internal validations have run - avoids segmentation faults caused by freeing a node twice (Charlie Savage).
- Add support for Document#canonicalization (Victor Lin).
- Fix memory leak in Reader#lookup_namespace (Charlie Savage).
- Fix memory leak in Reader#[] (Nathan Kriege).
- Fix usage of @io instance variable (Jeffrey Taylor)
- Removed old sax error handling code that has been fixed in newer versions of libxml (Charlie Savage).
- Code cleanup - remove unused variables and commented out code (Charlie Savage)
- Minor text changes and documentation fixes (Charlie Savage).
- Fix documentation error (fixes RubyForge 26888).
- Update documentation for Document#validation* methods (fixes RubyForge 24833).
- Update documentation and test (fixes Ruby Forge Issue 28770).
- Updated documentation in README (Anurag Priyam):
- rake doc does not work; use rake rdoc.
- gem mislav-hanna does not exist; use hanna.
- rake rdoc ‘depends’ on hanna; no need of RDOCOPTS
- Point to the github issue tracker instead of Ruby Forge
- Point to the github (gh-pages) site for docs
- Add tc_error to test suite (Charlie Savage).
- Add sax test (Stanislav O.Pogrebnyak).
2.0.2 / 2011-04-17 Charlie Savage
- Added binaries for windows (Charlie Savage).
- Update Ruby 1.9 encoding handling to support libxml versions older than version 2.6.26 which was released on June 6, 2006 (Charlie Savage).
- Add publish_with_docs rake task - combines publishing the website and docs (Anurag Priyam).
- Correctly copy the documentation directory (Anurag Priyam)
- Use relative link for rdoc so the links are correct on both rubyforge and github (Anurag Priyam).
- Update Rakefile to use Hanna RDco template (Charlie Savage).
- Update dates on license file (Charlie Savage).
- Add api to allow setting of attribute namespaces. Fixes issue 10 (Charlie Savage).
- Remove old hack to call the on_error method. This hack isn’t needed anymore since a better workaround was put in place in the parser context. Fixes This fixes issue 12 (Charlie Savage).
- Remove references to passing blocks to validation functions. The blocks are no longer called since the bindings use libxml’s structured error handling. See issue 6 (Charlie Savage).
- Fix up comment in Document and Node. See issue 8 (Charlie Savage).
- Update website text (Charlie Savage).
2.0.0 / 2011-04-16 Charlie Savage
- Ruby 1.9.2 support. The biggest addition is encoding support. Strings returned by the libxml bindings are now set to the encoding of the underlying xml document (Charlie Savage).
- Rubinius compatability. Removed unnecessary use of RHASH_TBL (Aman Gupta)
- Added .gemspec file (Dudley Flanders).
- Updated Windows checks to take into account mingw32 (Yaohan Chen).
- Fix memory leak in Reader#Expand (Szymon Nowak).
- Fix memory leaks in Reader#read_string, Reader#read_inner_xml and Reader#read_outer_xml (Sean Geoghegan).
- Node#space_preserve= was backwards (Dudley Flanders)
- Fixed typo in readme, added rdoc extension (Loren Sands-Ramshaw).
- Switched to Rake Compiler (Charlie Savage).
- Use xmlMalloc() memory for ctxt->sax structure. Sometimes the ctxt->sax pointer may not be zeroed in rxml_sax_parser_parse(), for example when exception is raised in one of callbacks. This lets xmlFreeParserCtxt() clean this up (Alexey I. Froloff).
- Added a rake task to publish the website to github. Moved the jekyll website to web directory (Anurag Priyam).
- Modernize project metadata and layout (7rans)
1.1.3 / 2009-03-18 Charlie Savage
- Improve performance 10 to 20% by turning on libxml2’s dictionary feature that allows parsers to reuse previously parsed strings.
- Fix XML::Node#remove! to work correctly with libxml’s dictionary feature.
- Correctly set up parser context options.
- Simplify DOM modification code (Node#next=, Node#prev=, Node#sibling=) and update documentation.
- Deprecated Node#add_child and Node#child=, use Node#<< instead
- Fix documentation for Node#<<
- Added Document#import to enable moving nodes from one document to another document.
1.1.2 / 2009-03-12 Charlie Savage
- Added XML::Node#inner_xml helper method.
- Fix segmentation that could occur when calling the mark function on a previously freed node.
1.1.1 / 2009-03-10 Charlie Savage
- Fix - Only include extra html parser context methods for versions of libxml older than 2.6.27.
1.1.0 / 2009-03-09 Charlie Savage
- Fix bug caused by the mark function being called on partially initialized attributes.
- Revert back to libxml2’s internal memory manager.
1.0.0 / 2009-03-05 Charlie Savage
- OS X (Charlie Savage). Update bindings to support the default installed version of libxml2 (2.6.16) on OS X 10.5 and the latest version available via MacPorts.
0.9.9 / 2009-03-05 Charlie Savage
- Ruby 1.9.1 support (Charlie Savage). libxml-ruby now compiles and runs on either 1.8.6 and 1.9.1. With 1.8.6 all tests should pass while on 1.9.1 all but for encoding tests pass. The port to Ruby 1.9.1 revealed two memory allocation bugs (one with dtds, one with nodes) which are now fixed.
- Better OS X support (Joe Khoobyar). The default version of libxml2 on OS X
10.5 is fairly old, resulting in this link error:
NSLinkModule() error dyld: Symbol not found: _htmlNewParserCtxt
This can be fixed by using MacPorts to get a newer version of libxml2. To make use of MacPorts, the build script has been updated to use xml2-config. This can be fine-tuned using the new —with-xml2-config / —without-xml2-config options to extconf.rb (default is —without-xml2-config to match existing behavior).
- Greatly reduced memory usage (Joe Khoobyar). See rubyforge.org/pipermail/libxml-devel/2009-February/001375.html.
- Add Document#xhtml? and documentnode_type methods (Joe Khoobyar)
- Add XPath::Object#last (Joe Khoobyar)
- Provide finer control over CDATA nodes on a parser by parser basis (Joe Khoobyar).
- Bug fix - Namespaces were incorrectly merged with attributes in the new sax2 handler (Charlie Savage).
- Bug fix - Support iterating over nodes and attributes even with blocks that call remove! (Charlie Savage)
- Bug fix - If reader.node is NULL, return nil instead of crashing (Charlie Savage)
- Bug fix - Dtd’s owned by documents were freed twice in some circumstances (Joe Khoobyar).
- Bug fix - Fix output escaping on attributes nodes (Joe Khoobyar).
- Bug fix - Make sure IO objects are not garbage collected when used as parser sources (Charlie Savage).
0.9.8 / 2009-1-24 Charlie Savage
- Refactored XML::Parser, XML::HTMLParser, XML::SaxParser and XML::Reader to have consistent APIs. All the parsers now take a context object in their constructors, allowing fine grained control over the parsers for advanced use cases. These API changes are backwards compatible except for XML::Reader, which now takes an optional hash table as a second parameter in its various constructors versus an optional boolean value.
- Updated all APIs to use the encoding constants defined in XML::Encoding versus string values. This API change is not backwards compatible.
- Added support for attribute declarations in DTD’s via the new XML::AttrDecl class (Len Lattanzi)
- Support libxml’s content escaping capabilities for text nodes by wrapping libxml’s “xmlStringText” and “xmlStringTextNoenc” (Joe Khoobyar).
- Updated XML::Reader#read API to return true if a node was read, false if
node was not read and raises an exception on an error. Previously read
returned 1 if a node was read, 0 if a node was not read and -1 for an
error. This change is not backwards compatible, but provides a more natural
interface for Ruby by allowing code like this:
while reader.read
# do stuff
end
- Changed XML::Error exception objects to return copies of nodes that cause parse errors instead of the original node. This prevents segmentation faults when the error is reraised.
- Added XML::Reader#node method.
- Fixed compile errors on OS X which uses an older version of libxml.
- Fixed memory leak when performing XPath searches.
- Fixed rdocs.
- Don’t override libxml’s default settings for entity substitution and loading external DTDs. This may break some code - you may need to add in a call to XML.default_substitute_entities = true or XML.default_load_external_dtd = true.
0.9.7 / 2008-12-08 Charlie Savage
- Added SAX2 support. SAX handlers now define two new callbacks, on_start_element_ns and on_end_element_ns methods. These new callbacks support namespaces, making them superior to the older callbacks on_start_element and on_end_element methods. The old callbacks are still supported, but may be deprecated in the future depending on community feedback.
- Added SAX support for libxml’s structured error handling. That menas sax handlers now define a new callback, on_error, which takes one parameter, an instance of XML::Error. The older on_parser_error, on_parser_warning and on_parser_fatal_error callbacks are no longer suported so you must port your code. Note that the older callbacks took one string parameter, instead of an XML::Error object.
- Experimental work-around for libxml error handling bug - see mail.gnome.org/archives/xml/2008-December/msg00014.html for more information.
- Fix compilation bugs on Solaris.
- Fix Rdoc compilation bug.
0.9.6 / 2008-12-08 Charlie Savage
- Refactored namespace handling. The existing, and inconsistent, namespace methods defined on XML::Node have been deprecated. They have been replaced by a the new XML::Namespaces class. Use this class to inspect a node’s namespace, its default namespace, its namespace definitions and which namespaces are in scope. It can be accessed via the the XML::Node#namespaces method.
- Rationalized XML::Document#save, XML::Document#to_s and XML::Node#to_s to take an optional hash table of parameters that control how output is generated. Supported parameters include setting indentation on or off, the indentation level and the output encoding. This is an API change and may break existing calls to XML::Document#save. However, the previous API was broken - setting the encoding resulted in an error so its unlikely anyone is using it.
- Rationalized XML::Document#debug, XML::Node#debug, XML::XPath::XPathObject#Debug.
- Deprecated a number of duplicate dump* and debug_* methods in XML::Document and XML::Node.
- Additional Ruby 1.9.1 compatability fixes.
- Cleaned up header file guards.
0.9.5 / 2008-11-29 Charlie Savage
- Ruby 1.9.1 preview release compatability (Felipe Contreras)
- Update Node#remove! to return the removed node and to set its document to nil. This allows the node to be either moved to another document, another part of the same document or to be freed on the next garbage collection once its references have gone out of scope.
- Fix bug where XPathExpression#compile mistakenly overwrote RegExp#compile.
- Update Node to use standard ruby allocators and initializers.
- Update HTML parser to be more forgiving of invalid documents.
- Update include paths for Darwin Ports on OS X.
- Updated C code base to use BSD/Allman style
0.9.4 / 2008-11-24 Charlie Savage
- Update HTML parser so that it can read files, strings and io streams.
- Update HTML parser to support user specified encodings.
- Additional C code cleanup.
0.9.3 / 2008-11-22 Charlie Savage
- Fixed segmentation fault caused by documents being freed before xpath results that referenced the document (take 2).
- Allowed sax parser to use io stream
- Combined encoding and input classes
- Cleaned up C code - removed remaining legacy structures, added static to most methods, changed C namespace from ruby_xml to rxml
0.9.2 / 2008-11-19 Charlie Savage
- Add support for compiled XPath expressions (donated by Pavel Valodzka)
- Fixes for compiling on OS X 10.5.4 and 10.5.5
0.9.1 / 2008-11-18 Charlie Savage
- Expose LibXML’s encoding support via a new Encoding object.
- Revamp error handling to be much easier to use. Errors are now wrapped by the new XML::Error class and are thrown as exceptions when it is appropriate.
- Fixed segmentation fault caused by documents being freed before xpath results that referenced the document.
- Add Node#register_default_namespace to simplify default namespace handling.
- Significantly improve documentation
- A number of bug fixes and patches.
0.9.0 / 2008-11-18 Charlie Savage
- Version 0.9.0 was removed due to packaging errors.
0.8.3 / 2008-07-21 Charlie Savage
- Missed several files in last release
0.8.2 / 2008-07-21 Charlie Savage
- To use LibXML you can either require ‘xml’ or require ‘libxml’. The differences is that require ‘xml’ mixes the LibXML module into the global namespace, thereby allowing you to write code such as document = XML::Document.new. Note that this is different from 0.8.0 and 0.8.1 and may require updating your code.
- Support RelaxNG validation (thanks to Morus Walter)
- Support passing IO objects to XmlReaders (thanks to Tom Hughes)
- Fix segmentation fault caused by adding an attribute to a CDATA node
- Moved node checking functions from C to Ruby
- Improved Windows support - libxml-ruby should now work out of the box.
- Improved Windows support - turned on libxml’s zlib and iconv support.
0.8.1 / 2008-07-09 Charlie Savage
- Reimplmented Node#each_attr for backwards compatability
- Moved node type test to Ruby.
0.8.0 / 2008-07-09 Charlie Savage
- Fixed bug in returning attributes from XPath results
- Fixed DOM traversal methods
- Changed Node#children to return an array of nodes
- Fixed bug in returning attributes from XPath results
- Refactored XPath support, providing more user hooks in the XPath::Context class
- Added Node#properties for backwards compatibility
- Updated setup.rb
- Added more tests
- Updated rdocs and README file
- Moved libxml into LibXML namespace
0.7.0 / 2008-07-09 Charlie Savage
- Added new attributes class to provide a more natural way of working with attributes
- Fixed XML::Attr to better support namespaces
- Added documentation on how to use namespaces with XPath
- Removed allocation of extraneous structures used to wrap nodes, namespaces and attributes
- Cleaned up tests and added new test suite
- Updated rdocs and README file
- Cleaned out most of the bug list
0.6.0 / 2008-07-01 Charlie Savage
- Fixed memory allocation errors in Windows. On Windows, it is essential that the same library that allocates memory must free it. Thus ALLOC calls must be matched to ruby_xfree calls, which they were not. In addition, in one case Ruby was allocating memory to be freed by libxml. On Windows, that’s a segmentation fault. On Linux it might fly, but still seems like a bad idea.
- Fixed segmentation fault in xml reader expand (same xml tree freed twice)
- Applied a number of patches from Tom Bagby, including fixes for xpath segmentation faults and fixes for various memory leaks
- Cleaned up a number of compiler warnings
- Renamed libxml_so.so to libxml_ruby.so (same for xslt). That wasn’t actually my original intention, but um, it kind of sort of happened. It should not be noticeable from an end-user perspective.
- Added rake files for building with MingW
- Added rake files for packing gems. Note that I did this outside the existing rake tasks because I didn’t see how they were actually building the gems.
- Cleaned up the tests and added a few more based on bug reports from the Tracker and mailing list.
- Cleaned out the patch queue and went through about 1/2 the bug list
2007-11-16 “Dan Janowski”
- Merged Dan’s MEM2 branch to trunk.
0.5.3 /
2007-11-16 “Dan Janowski”
- Merged Dan’s MEM2 branch to trunk.
0.5.2 / 2007-10-10
2007-10-10 “Dan Janowski”
- (Dan, fill in the major points of the changes you made up to here -thanks)
2007-01-14 “Laurent Sansonetti”
- Added some preliminary RDoc comments for XML::Reader.
2006-12-05 “Laurent Sansonetti”
- Added XML::Reader, a set of bindings to the xmlTextReader API.
<IP_ADDRESS> / 2006-12-02
2006-04-15 “Ross Bamform”
- Implemented SAX parser callback handling.
2006-04-12 “Ross Bamford”
- Integrated and tested community patches.
- Defined XML::Node (hash) equality in terms of XML representation.
2006-04-12 “Tim Yamin”
- Fixed XML::Node#content inoperable bug (plasmaroo) [patch]
- Fixed memory leak in same
2006-04-12 “Mark Van Holstyn”
- Added XML::Node::Set#first (mvette13) [patch]
- Added XML::Node::Set#empty?
- Fixed XML::Node::Set#to_a
- Added XML::Node#find_first
- Added XML::Node#remove!
2006-03-27 “Ross Bamford”
- Integrated contributed XML::Parser.register_error_handler patch (rosco)
2006-02-27 “Ross Bamford”
- Fixed all multiple symbol definitions for -fno-common.
- Removed OSX -fno-common workaround.
0.3.6 / 2006-02-23
2006-02-21 “Ross Bamford”
- Patched extconf.rb with OSX -fno-common workaround
- Added gem and packaging support to Rakefile
- Moved version update to Rakefile
- Removed legacy project utility scripts
2005-02-19 “Ross Bamford”
- Fixed doublefree bug in ruby_xml_attr.
- Fixed small leak in parser
2005-12-18 “Ross Bamford”
- Updated for GCC 4.0 (community patches)
- Fixed default validation bug
- Refactored project, removed outdated files, cleaned up tests.
- Added RDoc documentation across .c files.
- Fixed up a few strings.
2004-04-04 “Mangler Jurgen”
- ruby_xml_node.cz: fixed ruby_xml_node_property_set. The ill-behaviour was, that there was added a second attribute of the same name, when you were setting the value of an already existing attribute.
2004-03-17 “Lukas Svoboda”
- ruby_xml_node.c: ruby_xml_node_to_s now returns XML subtree dump.
2004-02-27 “Martin Povolny”
- ruby_xml_node.c: added XML::Node.copy, this makes possible building of xml documents from nodes taken from other xml documents without making ruby SIGSEGV (see tests/copy_bug.rb).
2004-02-26 “Martin Povolny”
- ruby_xml_dtd.c, ruby_xml_dtd.h, ruby_xml_schema.c, ruby_xml_schema.h: more work on validation, now you can actually validate document using dtd or xml schema, also solved warning and error propagation (see tests/{dtd|schema}-test.rb).
2003-12-30 “Martin Povolny”
- ruby_xml_dtd.c, ruby_xml_dtd.h, ruby_xml_schema.c, ruby_xml_schema.h: prelimitary support for dtd and schema validation
2003-09-15 “Martin Povolny”
- ruby_xml_input_cbg.c, libxml.c: added class InputCallbacks to make possible registering custom input callbacks handlers (xmlRegisterInputCallbacks) written in ruby
2003-08-01 “Martin Povolny”
- ruby_xml_document.c: corrected argument handling in ruby_xml_document_find
- ruby_xml_node.c: corrected argument handling in ruby_xml_node_find


National Statistics
Statistics on post-compulsory education, training, qualifications and spending.
Ref: V01/2012 PDF , 750KB , 38 pages
If you use assistive technology (such as a screen reader) and need a version of this document in a more accessible format, please email<EMAIL_ADDRESS>. Please tell us what format you need. It will help us if you say what assistive technology you use.
PDF , 122KB , 4 pages
If you use assistive technology (such as a screen reader) and need a version of this document in a more accessible format, please email<EMAIL_ADDRESS>. Please tell us what format you need. It will help us if you say what assistive technology you use.
MS Excel Spreadsheet , 162KB
If you use assistive technology (such as a screen reader) and need a version of this document in a more accessible format, please email<EMAIL_ADDRESS>. Please tell us what format you need. It will help us if you say what assistive technology you use.
MS Excel Spreadsheet , 166KB
If you use assistive technology (such as a screen reader) and need a version of this document in a more accessible format, please email<EMAIL_ADDRESS>. Please tell us what format you need. It will help us if you say what assistive technology you use.
MS Excel Spreadsheet , 109KB
If you use assistive technology (such as a screen reader) and need a version of this document in a more accessible format, please email<EMAIL_ADDRESS>. Please tell us what format you need. It will help us if you say what assistive technology you use.
MS Excel Spreadsheet , 148KB
If you use assistive technology (such as a screen reader) and need a version of this document in a more accessible format, please email<EMAIL_ADDRESS>. Please tell us what format you need. It will help us if you say what assistive technology you use.
MS Excel Spreadsheet , 141KB
If you use assistive technology (such as a screen reader) and need a version of this document in a more accessible format, please email<EMAIL_ADDRESS>. Please tell us what format you need. It will help us if you say what assistive technology you use.
Plain text , 1.37KB
If you use assistive technology (such as a screen reader) and need a version of this document in a more accessible format, please email<EMAIL_ADDRESS>. Please tell us what format you need. It will help us if you say what assistive technology you use.
Reference Id: V01/2012
Publication type: Volume
Region: UK
Release date: 07 November 2012
Coverage status: Final
Publication status: Published
This is the 16th edition of education and training statistics for the United Kingdom. It provides statistics relating to education in the UK and includes chapters relating to schools, post-compulsory education and qualifications, and an annex containing figures on education expenditure. The 2011 edition was published on 8 December 2011.
Martin Hill
020 7340 7933
Published: 7 November 2012


Nicholas Springer, Wu-chang Feng, "Thunder CTF: Learning Cloud Security on a Dime", Cyber Security Symposium 2020, April 2020. pdf | slides | talk.
Thunder CTF allows players to practice attacking vulnerable cloud projects on Google Cloud Platform (GCP). In each level, players are tasked with exploiting a cloud deployment to find a "secret" integer stored within it. Key to the CTF is a progressive set of hints that can be used by players when they are stuck so that levels can be solved by players of all levels from novices to experts.
Thunder CTF deploys level infrastructure on demand to a player's Google Cloud Platform project. Players new to Google Cloud can get a free $300 credit here. Thunder CTF is very cheap to run, with its resource consumption fitting almost entirely into GCP's free tier. To save cloud credits, we recommend deploying levels only while you are playing and destroying them as soon as levels are completed.
Thunder CTF was built to be extensible, and we encourage players to make their own levels. For more information on how to create a level, visit the Level Development Guide and the Thunder CTF framework documentation.
For more information about Thunder CTF, visit its website.
Least Privilege CTF (slides) is an extension of Thunder CTF. Least Privilege levels have been desgined to help understand Google Cloud Platform's IAM roles and permissions. Related GCP documentaion can be found here. Least Privilege levels do not have "secret". Instead, at each level you should get a "Congratulations" message
First, create a new google cloud project and enable billing for it. The deployment should ideally be done on a new to ensure that playing the levels won't affect your existing or future work on GCP. Players new to Google Cloud can get a free $300 credit here.
Second, the CTF is played through Cloud Shell which is accessible in the GCP console by clicking on the Cloud Shell icon. Open Cloud Shell and run the following commands to set up the CTF:
# Optional: Can skip if cloud shell is started from the project you want to use gcloud config set project [PROJECT-ID]
virtualenv -v env-tctf source env-tctf/bin/activate git clone https://github.com/NicholasSpringer/thunder-ctf.git cd thunder-ctf pip3 install -r requirements.txt gcloud services enable cloudresourcemanager.googleapis.com python3 thunder.py activate_project $GOOGLE_CLOUD_PROJECT
A full list of commands can be found by running:
python3 thunder.py help
You are now ready to play. Create each level individually.
# PrimitiveRole-Project python3 thunder.py create leastprivilege/pr # PredefinedRole-Storage python3 thunder.py create leastprivilege/pd1 # PredefinedRole-Compute python3 thunder.py create leastprivilege/pd2 # PredefinedRole-Logging python3 thunder.py create leastprivilege/pd3 # PredefinedRole-Datastore python3 thunder.py create leastprivilege/pd4 # PredefinedRole-Vision python3 thunder.py create leastprivilege/pd5 # CustomRole-Project python3 thunder.py create leastprivilege/ct1 # CustomRole-Storage python3 thunder.py create leastprivilege/ct2 # CustomRole-Compute python3 thunder.py create leastprivilege/ct3 # CustomRole-Logging python3 thunder.py create leastprivilege/ct4
Or, create all levels with command below.
python3 thunder.py create leastprivilege/roles
Once the deployment is successful, the Cloud Shell will display either a single function entrypoint or a list of function entrypoints. You can also locate this information in either start/LEVEL_ABBR.txt (e.g. pr.txt) or start/roles.txt. To access further guidance on each level, simply click on its respective link. It is important to note that if the level requires the creation of a custom role, you must create the role using the precise ID specified in the level instruction.

Your feedback is very important to us, since it will help developers optimize user experiences and extend level designs.


Composition: EDTA Zinc, EDTA Ferric Sodium, EDTA Manganese, EDTA Copper, Sodium Selenate, Sodium Benzonate, MTS, TCS, Bronopal
Benifits:
- Provides enough mineral strength in the pond water
- Accelerate the growth of fish and shrimp
- Improves hatchability and survivality
- Increase immunity against various diseases
- Prevents and controls loose shell disease
- Helps the initiation of molting process
- Prevents the body/muscle cramps of the animals
- Increase plankton growth
Composition:Didecyl Dimethyl Ammonium Chloride (DDAC), Ethyl Alcohol -5% (w/v)
Benifits:
- Korean patented disinfectant
- Accelerate the growth of fish, shrimp, chicken and cow
- Increase immunity against various diseases
- Prevents the body/muscle cramps of the animals
Benifits:
- Biochemical product that removes harmful gases
- Increase dissolved oxygen in water
- Decrease mortality rate of fish and shrimp
Composition:Sodium Per-carbonate: 13.5%
Benifits:
- Stop mortality fast
- Ensures sufficient oxygen supply to the fish and shrimp


Méthodo-Stat
Tutor
Sign in to start your session
Remember Me
Sign In
{{test}}
Welcome, {{ currentUser.name }}
You're admin.
You're teacher
- OR -
Sign in using Facebook
Sign in using Google+
I forgot my password
Register a new membership


SongWeave
Search for a song:
Melody
Search for a song:
Harmony
Search for a song:
Beat
Generate Song


RIBA Clore Learning Centre / Hayhurst and Co.
- Curated by Paula Pintos
- about 17 hours
Sustainability · United Kingdom
- version="1.0" encoding="UTF-8"? Architects: Hayhurst and Co.
- AreaArea of this architecture projectArea: 320.0 m2
- version="1.0" encoding="UTF-8"?YearCompletion year of this architecture project Year: 2019
- version="1.0" encoding="UTF-8"?PhotographsPhotographs: Kilian O’Sullivan
- Lead Architects Jonathan Nicholls
- Design Team Nick Hayhurst, Jonathan Nicholls, Claire Taggart, Holly Crosbie, Alex Boyce
- Clients The Royal Institute of British Architects
- Contractor Coniston
- Approved Inspector London Building Control
- Engineer Price and Myers
- CDM Co-Ordinator Goddard Consulting
- Consultants Richard Griffiths, Heritage Consultant, Jack Wates, Satu Streatfield, Max Fordham
More Specs Less Specs
Text description provided by the architects. The Clore Learning Centre at the RIBA is a destination for the public to engage with architecture as part of a creative learning programme. It includes a dedicated studio, study room, terrace and interactive display area on the fourth floor of the RIBA’s Grade II* listed headquarters at the 66 Portland Place in central London. The new spaces are an inspirational setting for hands-on, creative for a range of audiences, from children and families to long-life learners.
Hayhurst & Co’s design invites visitors to explore their ‘sense of space’ and develop an understanding of the architecture that surrounds us every day. Conceived as a series of simple, delightful and adaptable interventions that enable an inter-active learning experience, the spaces promote an understanding of architecture through active learning: observing, testing, making and sharing.
The design for the new spaces is playful, thought-provoking and unique. Through the detailed reference of Grey Wornum’s vision for the original RIBA building, the Clore Learning Centre will encourage debate about the perception of architecture and its influence on light, acoustics, materials, sustainability and the public realm.
Sustainability is central to the design and materiality of the Clore Learning Centre at the RIBA. Alongside bamboo (a fast growing and sustainable alternative to timber), drawer fronts, display cabinets and box stools are made from recycled yoghurt pots, giving a new life to an otherwise single-use plastic waste product. Some lids and labels are still visible in the material.
The Clore Learning Centre at the RIBA incorpoates a series of measures that at once address sustainability and learning. Energy efficient LED light fittings are used throughout and can be tuned to mimic different conditions: such as bright natural daylighting during the day to aid alertness, concentration and creativity, or warmer and dimmer lighting that can be more conducive to group creative thinking. A mechanical ventilation system ensures a constant supply of fresh air, and avoids a build up of CO2 from occupants’ breath that can reduce concentration, decision-making abilities and memory.
Hayhurst and Co. were selected as the architect for the project in September 2017 following a two-stage design competition led by the RIBA Competitions Office. The design was been developed with the input from Price and Myers, Max Fordham and Jack Wates lighting design.
The Clore Learning Centre at the RIBA is run and managed by the RIBA Learning Team, and is made possible by a generous grant from the Clore Duffield Foundation.


Uploader for micro:bit v0.6
Tired of drag and dropping .hex files to your BBC micro:bit? Use the uploader to automate it!
Freely available on Windows.
{% extends "_layouts/default.html" %} {% set title = "Microsoft Uploader for BBC micro:bit" %} {% set description = "Microsoft Uploader for BBC micro:bit" %} {% block body %}
Tired of drag and dropping .hex files to your BBC micro:bit? Use the uploader to automate it!
Freely available on Windows.
The uploader monitors your Downloads folder looking for any .hex
file being download.
When it detects a new .hex file, the uploader tries to copy it to any connected BBC micro:bit (it copies it to the MICROBIT
drive).
That's it!
Microsoft.Uploader.exe
file to your desktop.Microsoft.Uploader.exe
file before working on your BBC micro:bit


User Story
- As a Casual user, Mathew wants to have an awesome experience by visiting Albuquerque Murals.
Use Case
Mathew is a random young person which appreciates mural arts.
He is looking for his next destination.
After, viewing some awesome murals pictures from Albuquerque, Mathew decides the next destination to be
Albuquerque.
precondition: Mathew started to do plans for the city-break to Albuquerque.
post-condition: Mathew had and awesome trip based on the information from ABQMurals. He is happy the results based
on interaction from this website and plans to check for latter for updates.
Interaction Flow
- He is looking for an website in Google Chrome about murals in Albuquerque.
- He found ABQMurals website and clicks to view all murals in Albuquerque. He is pleased with the quality of
the content and makes a list of wanted to view in person.
- Then he clicks for the routes prepared with the best arts and with average time to walk.
- He makes his visit to ABQ and is using the routes from ABQMurals.
- After, visit he is coming back to website to log in with an account.
- And marks with "like" for the murals he enjoyed the most.
- He is pleased with the trip that it was well structured and offered him a quick selection of routes with
the best murals.


White to play 25
pips White=167 Black=160
(CorrectAnswer= 0/0, ErrorScore= 0)
1. 13/11 13/8 eq: -0.141 46.69% (G:13.78% B:0.66%) 53.31% (G:16.37% B:0.91%) 2. 13/8 6/4 eq: -0.166 (-0.025) 46.40% (G:12.73% B:0.61%) 53.60% (G:16.50% B:0.98%) 3. 24/22 13/8 eq: -0.170 (-0.029) 46.20% (G:12.15% B:0.56%) 53.80% (G:16.15% B:0.61%) 4. 13/6 eq: -0.245 (-0.104) 44.15% (G:11.98% B:0.51%) 55.85% (G:16.64% B:0.88%) 5. 13/11 8/3 eq: -0.272 (-0.130) 44.11% (G:12.21% B:0.53%) 55.89% (G:18.35% B:1.34%)


Welcome to Bethany's Pie Shop
From pecan to plum, our pies are are made in with the warmth and tradition of home. Take a moment to browse our pies and see which of our delectable desserts are soon to arrive on your doorstep.
From pecan to plum, our pies are are made in with the warmth and tradition of home. Take a moment to browse our pies and see which of our delectable desserts are soon to arrive on your doorstep.


Any Emergency
Call:108
Our Ambulance will be ready always to save Life.
For a better health and good body maintanence,Maintain the diet correctly and consume the prescribed medicines at regular intervals for the prescribed days strictly for better results.Do not take Medicines Without the advice of doctors.If there is any complications/difficulties report to the doctor immediately.It would become serious Condition if left carelessly and it may become very difficult for us to solve the problem.
Timings:
Mode of Payment - Cash/Debit Cards
Developed By: Tina


{% extends "/base.html" %} {% block content%} Thank you! Let us know what we are missing. Loading… Explore Thank You! {% endblock content %}
Thank You!


*** User 2017-05-03 15:11:04.577 ***
15:11:04.577 [info] Disabling blocking sync...
*** User 2017-05-03 15:11:04.580 ***
15:11:04.580 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-1@antoine-PC'
*** User 2017-05-03 15:11:05.920 ***
15:11:05.920 [info] Enabling membership...
*** User 2017-05-03 15:11:05.921 ***
15:11:05.921 [info] Disabling blocking sync...
*** User 2017-05-03 15:11:05.924 ***
15:11:05.924 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-2@antoine-PC'
*** User 2017-05-03 15:11:07.266 ***
15:11:07.266 [info] Enabling membership...
*** User 2017-05-03 15:11:07.267 ***
15:11:07.267 [info] Disabling blocking sync...
*** User 2017-05-03 15:11:07.270 ***
15:11:07.270 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-3@antoine-PC'
*** User 2017-05-03 15:11:07.434 ***
Joining node: 'node-3@antoine-PC' to 'runner@antoine-PC' at port 48716
*** User 2017-05-03 15:11:07.434 ***
Joining issued: 'node-3@antoine-PC' to 'runner@antoine-PC' at port 48716
*** User 2017-05-03 15:11:07.434 ***
Joining node: 'node-2@antoine-PC' to 'runner@antoine-PC' at port 49394
*** User 2017-05-03 15:11:07.435 ***
Joining issued: 'node-2@antoine-PC' to 'runner@antoine-PC' at port 49394
*** User 2017-05-03 15:11:07.435 ***
Joining node: 'node-1@antoine-PC' to 'runner@antoine-PC' at port 44600
*** User 2017-05-03 15:11:07.435 ***
Joining issued: 'node-1@antoine-PC' to 'runner@antoine-PC' at port 44600
*** User 2017-05-03 15:11:07.496 ***
Waiting for join to complete with manager: partisan_default_peer_service_manager
*** User 2017-05-03 15:11:07.496 ***
Finished.
*** CT 2017-05-03 15:11:07.496 *** COVER INFO
Adding nodes to cover test: ['runner@antoine-PC']
*** CT 2017-05-03 15:11:07.501 *** COVER INFO
Successfully added nodes to cover test: []
*** User 2017-05-03 15:11:07.920 ***
Case finished: product_test
*** User 2017-05-03 15:11:14.943 ***
15:11:14.942 [info] Application lasp exited with reason: stopped
*** User 2017-05-03 15:11:14.944 ***
15:11:14.943 [info] Application partisan exited with reason: stopped
=== Ended at 2017-05-03 15:11:14
=== successfully completed test case
=== Returned value: ok
Test run history
| Top level test index


A human **person** is a type of entity used throughout the RunOrg API
for many purposes, the most important being:
- Message and email recipients are always people. All sending APIs
expect either individuals or [groups](/groups.htm) of people
as their parameters.
- Everyone who logs in, using any method, is bound to a person.
- Access restrictions are based on the [person who performs the
action](/auth.htm).
# Class `Person`
The class [`RunOrg.Person`](/people/person.htm) contains basic
information about a person, just enough to be able to display their
identity : a human-readable name, a small picture and (if available)
their gender.
This class is used when retrieving lists of people (because it uses
less bandwidth than fetching the entire profile) and in situations
where obtaining a person's data is not the main purpose of the request
(for example, when fetching a list of messages, basic information
is provided about each author as a matter of convenience).
# Person information
The type [``](/people/person.htm) contains basic information
about a person, just enough to be able to display their identity : a
human-readable name, a small picture and (if available) their gender.
This type is returned when retrieving lists of people (because it uses
less bandwidth than fetching the entire profile) and in situations
where obtaining a person's data is not the main purpose of the request
(for example, when fetching a list of messages, basic information
is provided about each author as a matter of convenience).
# Class "Person.Profile"
The class [`RunOrg.Person.Profile`](/people/profile.htm) contains full
information about a person.
# Complete profile
The type [``](/people/profile.htm) contains full
information about a person.


A demonstration of what can be accomplished through CSS-based design. Select any style sheet from the list to load it into this page.
Download the example html file and css file


My Cruddy Tic-Tac-Toe
Let's Play!
Please enter player names below:
Play!
Player 1 vs Player 2!
Player 1 goes first :)
Save Game
Clear Board
Scoreboard
Saved Games
Delete
Clear All Data


In real life, a car is an object.
A car has properties like weight and color, and methods like start and stop:
| Properties | Methods |
|---|---|
|
car.name = Fiat car.model = 500 car.weight = 850kg car.color = white |
car.start() car.drive() car.brake() car.stop() |
All cars have the same properties, but the property values differ from car to car.
All cars have the same methods, but the methods are performed at different times.
You have already learned that JavaScript variables are containers for data values.
This code assigns a simple value (Fiat) to a variable named car:
Objects are variables too. But objects can contain many values.
This code assigns many values (Fiat, 500, white) to a variable named car:
The values are written as name:value pairs (name and value separated by a colon).
| JavaScript objects are containers for named values. |
The name:values pairs (in JavaScript objects) are called properties.
| Property | Property Value |
|---|---|
| firstName | John |
| lastName | Doe |
| age | 50 |
| eyeColor | blue |
Methods are actions that can be performed on objects.
Methods are stored in properties as function definitions.
| Property | Property Value |
|---|---|
| firstName | John |
| lastName | Doe |
| age | 50 |
| eyeColor | blue |
| fullName | function() {return this.firstName + " " + this.lastName;} |
| JavaScript objects are containers for named values (called properties) and methods. |
You define (and create) a JavaScript object with an object literal:
Spaces and line breaks are not important. An object definition can span multiple lines:
You can access object properties in two ways:
or
You access an object method with the following syntax:
If you access the fullName property, without (), it will return the function definition:
When a JavaScript variable is declared with the keyword "new", the variable is created as an object:
Avoid String, Number, and Boolean objects. They complicate your code and slow down execution speed.
| You will learn more about objects later in this tutorial. |


Key Conservation
Home
Meet the Team
Register
Log In
Justin Hammett - Project Lead
David York
Francois Chery
Christina Giddens
Austin Healy
Danielle Baxter
Gerardo Cazares


Located at the southern end of Great Abaco Island. This is new development and provides a useful harbour.
Position 26°09'53"N, 77° 10'33"W (harbour entrance)
This sheltered harbour provides slips, fuel, provisions and other services. It is part of a new village being built here.
Last updated April 2015.


| Package | flare.util |
| Class | public class Maths |
Math
class.
| Method | Defined by | ||
|---|---|---|---|
|
Maths()
Constructor, throws an error if called, as this is an abstract class.
| Maths | ||
|
adjLog(x:Number, b:Number):Number
[static]
Computes a zero-symmetric logarithm, with adjustment to values
between zero and the logarithm base.
| Maths | ||
|
adjLogInterp(f:Number, min:Number, max:Number, b:Number):Number
[static]
Computes a logarithmic interpolation between two values.
| Maths | ||
|
clampValue(v:Number, min:Number, max:Number):Number
[static]
Restrict a numeric value from ranging beyond a minimum and maximum.
| Maths | ||
|
invAdjLogInterp(x:Number, min:Number, max:Number, b:Number):Number
[static]
Computes an inverse logarithmic interpolation, returning an
interpolation fraction.
| Maths | ||
|
invLinearInterp(x:Number, min:Number, max:Number):Number
[static]
Computes an inverse linear interpolation, returning an interpolation
fraction.
| Maths | ||
|
invLogInterp(x:Number, min:Number, max:Number, b:Number):Number
[static]
Computes an inverse logarithmic interpolation, returning an
interpolation fraction.
| Maths | ||
|
invQuantileInterp(x:Number, quantiles:Array):Number
[static]
Computes an inverse quantile scale interpolation, returning an
interpolation fraction.
| Maths | ||
|
invRootInterp(x:Number, min:Number, max:Number, p:Number):Number
[static]
Computes an inverse Nth-root interpolation, returning an
interpolation fraction.
| Maths | ||
|
invSqrtInterp(x:Number, min:Number, max:Number):Number
[static]
Computes an inverse square root interpolation, returning an
interpolation fraction.
| Maths | ||
|
linearInterp(f:Number, min:Number, max:Number):Number
[static]
Computes a linear interpolation between two values.
| Maths | ||
|
log(x:Number, base:Number):Number
[static]
Returns the logarithm with a given base value.
| Maths | ||
|
logCeil(x:Number, base:Number):Number
[static]
Rounds an input value up according to its logarithm.
| Maths | ||
|
logFloor(x:Number, base:Number):Number
[static]
Rounds an input value down according to its logarithm.
| Maths | ||
|
logInterp(f:Number, min:Number, max:Number, b:Number):Number
[static]
Computes a logarithmic interpolation between two values.
| Maths | ||
|
noise(x:Number, y:Number = 0, z:Number = 0):Number
[static]
Computes Perlin noise for a given (x, y, z) point.
| Maths | ||
|
quantile(n:uint, values:Array, sort:Boolean):Array
[static]
Computes the n-quantile boundaries for a set of values.
| Maths | ||
|
quantileInterp(f:Number, quantiles:Array):Number
[static]
Computes an interpolated value in a quantile scale.
| Maths | ||
|
rootInterp(f:Number, min:Number, max:Number, p:Number):Number
[static]
Computes an Nth-root interpolation between two values.
| Maths | ||
|
sqrtInterp(f:Number, min:Number, max:Number):Number
[static]
Computes a square root interpolation between two values.
| Maths | ||
|
symLog(x:Number, b:Number):Number
[static]
Computes a zero-symmetric logarithm.
| Maths | ||
|
symRoot(x:Number, p:Number):Number
[static]
Computes a zero-symmetric Nth root.
| Maths | ||
|
symSqrt(x:Number):Number
[static]
Computes a zero-symmetric square root.
| Maths |
| Maths | () | constructor |
public function Maths()
Constructor, throws an error if called, as this is an abstract class.
| adjLog | () | method |
public static function adjLog(x:Number, b:Number):Number
Computes a zero-symmetric logarithm, with adjustment to values between zero and the logarithm base. This adjustment introduces distortion for values less than the base number, but enables simultaneous plotting of log-transformed data involving both positive and negative numbers.
Parametersx:Number — the number for which to compute the logarithm
|
|
b:Number — the base of the logarithm
|
Number — the adjusted, symmetric log value.
|
| adjLogInterp | () | method |
public static function adjLogInterp(f:Number, min:Number, max:Number, b:Number):Number
Computes a logarithmic interpolation between two values. Uses an
adjusted zero-symmetric logarithm calculation (see adjLog
).
f:Number — the interpolation fraction (typically between 0 and 1)
|
|
min:Number — the minimum value (corresponds to f==0)
|
|
max:Number — the maximum value (corresponds to f==1)
|
|
b:Number — the base of the logarithm
|
Number — the interpolated value
|
| clampValue | () | method |
public static function clampValue(v:Number, min:Number, max:Number):Number
Restrict a numeric value from ranging beyond a minimum and maximum.
Parametersv:Number — Is the numeric value to restrict.
|
|
min:Number — Is the minimum acceptable value.
|
|
max:Number — Is the minimum acceptable value.
|
Number — Returns v, min, or max.
|
| invAdjLogInterp | () | method |
public static function invAdjLogInterp(x:Number, min:Number, max:Number, b:Number):Number
Computes an inverse logarithmic interpolation, returning an interpolation fraction. Uses an adjusted zero-symmetric logarithm. Returns 0.5 if the min and max values are the same.
Parametersx:Number — the interpolated value
|
|
min:Number — the minimum value (corresponds to f==0)
|
|
max:Number — the maximum value (corresponds to f==1)
|
|
b:Number — the base of the logarithm
|
Number — the inferred interpolation fraction
|
| invLinearInterp | () | method |
public static function invLinearInterp(x:Number, min:Number, max:Number):Number
Computes an inverse linear interpolation, returning an interpolation fraction. Returns 0.5 if the min and max values are the same.
Parametersx:Number — the interpolated value
|
|
min:Number — the minimum value (corresponds to f==0)
|
|
max:Number — the maximum value (corresponds to f==1)
|
Number — the inferred interpolation fraction
|
| invLogInterp | () | method |
public static function invLogInterp(x:Number, min:Number, max:Number, b:Number):Number
Computes an inverse logarithmic interpolation, returning an interpolation fraction. Uses a zero-symmetric logarithm. Returns 0.5 if the min and max values are the same.
Parametersx:Number — the interpolated value
|
|
min:Number — the minimum value (corresponds to f==0)
|
|
max:Number — the maximum value (corresponds to f==1)
|
|
b:Number — the base of the logarithm
|
Number — the inferred interpolation fraction
|
| invQuantileInterp | () | method |
public static function invQuantileInterp(x:Number, quantiles:Array):Number
Computes an inverse quantile scale interpolation, returning an interpolation fraction.
Parametersx:Number — the interpolated value
|
|
quantiles:Array — an array of quantile boundaries
|
Number — the inferred interpolation fraction
|
| invRootInterp | () | method |
public static function invRootInterp(x:Number, min:Number, max:Number, p:Number):Number
Computes an inverse Nth-root interpolation, returning an interpolation fraction. Uses a zero-symmetric root. Returns 0.5 if the min and max values are the same.
Parametersx:Number — the interpolated value
|
|
min:Number — the minimum value (corresponds to f==0)
|
|
max:Number — the maximum value (corresponds to f==1)
|
|
p:Number — the root value (2 for square root, 3 for cubic root, etc)
|
Number — the inferred interpolation fraction
|
| invSqrtInterp | () | method |
public static function invSqrtInterp(x:Number, min:Number, max:Number):Number
Computes an inverse square root interpolation, returning an interpolation fraction. Uses a zero-symmetric square root. Returns 0.5 if the min and max values are the same.
Parametersx:Number — the interpolated value
|
|
min:Number — the minimum value (corresponds to f==0)
|
|
max:Number — the maximum value (corresponds to f==1)
|
Number — the inferred interpolation fraction
|
| linearInterp | () | method |
public static function linearInterp(f:Number, min:Number, max:Number):Number
Computes a linear interpolation between two values.
Parametersf:Number — the interpolation fraction (typically between 0 and 1)
|
|
min:Number — the minimum value (corresponds to f==0)
|
|
max:Number — the maximum value (corresponds to f==1)
|
Number — the interpolated value
|
| log | () | method |
public static function log(x:Number, base:Number):Number
Returns the logarithm with a given base value.
Parametersx:Number — the number for which to compute the logarithm
|
|
base:Number — the base of the logarithm
|
Number — the logarithm value
|
| logCeil | () | method |
public static function logCeil(x:Number, base:Number):Number
Rounds an input value up according to its logarithm. The method
takes the ceiling of the logarithm of the value and then uses the
resulting value as an exponent for the base value. For example:
trace(Maths.logCeil(13,10)); // prints "100"
trace(Maths.logCeil(113,10)); // prints "1000"
x:Number — the number for which to compute the logarithm ceiling
|
|
base:Number — the base of the logarithm
|
Number — the rounded-by-logarithm value
|
| logFloor | () | method |
public static function logFloor(x:Number, base:Number):Number
Rounds an input value down according to its logarithm. The method
takes the floor of the logarithm of the value and then uses the
resulting value as an exponent for the base value. For example:
trace(Maths.logFloor(13,10)); // prints "10"
trace(Maths.logFloor(113,10)); // prints "100"
x:Number — the number for which to compute the logarithm floor
|
|
base:Number — the base of the logarithm
|
Number — the rounded-by-logarithm value
|
| logInterp | () | method |
public static function logInterp(f:Number, min:Number, max:Number, b:Number):Number
Computes a logarithmic interpolation between two values. Uses a
zero-symmetric logarithm calculation (see symLog
).
f:Number — the interpolation fraction (typically between 0 and 1)
|
|
min:Number — the minimum value (corresponds to f==0)
|
|
max:Number — the maximum value (corresponds to f==1)
|
|
b:Number — the base of the logarithm
|
Number — the interpolated value
|
| noise | () | method |
public static function noise(x:Number, y:Number = 0, z:Number = 0):Number
Computes Perlin noise for a given (x, y, z) point.
Parametersx:Number — the x parameter
|
|
y:Number (default = 0 ) — the y parameter (default 0)
|
|
z:Number (default = 0 ) — the z parameter (default 0)
|
Number — Perlin noise for the input co-ordinates
|
| quantile | () | method |
public static function quantile(n:uint, values:Array, sort:Boolean):Array
Computes the n-quantile boundaries for a set of values.
Parametersn:uint — the number of quantiles
|
|
values:Array — the values to break into quantiles
|
|
sort:Boolean — indicates if the values array needs to be sorted. If
true, the array will be sorted prior to determining quantile
boundaries. If false, the array must be in ascending sort order.
|
Array — an n-length array of quantile boundaries
|
| quantileInterp | () | method |
public static function quantileInterp(f:Number, quantiles:Array):Number
Computes an interpolated value in a quantile scale.
Parametersf:Number — the interpolation fraction (typically between 0 and 1)
|
|
quantiles:Array — an array of quantile boundaries
|
Number — the interpolated value
|
| rootInterp | () | method |
public static function rootInterp(f:Number, min:Number, max:Number, p:Number):Number
Computes an Nth-root interpolation between two values. Uses a
zero-symmetric root calculation (see symRoot
).
f:Number — the interpolation fraction (typically between 0 and 1)
|
|
min:Number — the minimum value (corresponds to f==0)
|
|
max:Number — the maximum value (corresponds to f==1)
|
|
p:Number — the root value (2 for square root, 3 for cubic root, etc)
|
Number — the interpolated value
|
| sqrtInterp | () | method |
public static function sqrtInterp(f:Number, min:Number, max:Number):Number
Computes a square root interpolation between two values. Uses a
zero-symmetric root calculation (see symSqrt
).
f:Number — the interpolation fraction (typically between 0 and 1)
|
|
min:Number — the minimum value (corresponds to f==0)
|
|
max:Number — the maximum value (corresponds to f==1)
|
Number — the interpolated value
|
| symLog | () | method |
public static function symLog(x:Number, b:Number):Number
Computes a zero-symmetric logarithm. Computes the logarithm of the absolute value of the input, and determines the sign of the output according to the sign of the input value.
Parametersx:Number — the number for which to compute the logarithm
|
|
b:Number — the base of the logarithm
|
Number — the symmetric log value.
|
| symRoot | () | method |
public static function symRoot(x:Number, p:Number):Number
Computes a zero-symmetric Nth root. Computes the root of the absolute value of the input, and determines the sign of the output according to the sign of the input value.
Parametersx:Number — the number for which to compute the square root
|
|
p:Number — the root value (2 for square root, 3 for cubic root, etc)
|
Number — the symmetric Nth root value.
|
| symSqrt | () | method |
public static function symSqrt(x:Number):Number
Computes a zero-symmetric square root. Computes the square root of the absolute value of the input, and determines the sign of the output according to the sign of the input value.
Parametersx:Number — the number for which to compute the square root
|
Number — the symmetric square root value.
|


--- title: Contact nav: contact permalink: /thanks/ layout: default ---
Your message was received and I'll get back to you shortly.


Added new modules to help with react and to move them into smaller chunks. Webpack and babel
would be adding version numbers here and a little what we did with it.
Webpack bundles all of our third party dependecies
for eg react with react.


This is a paragrah.
This is another paragraph.
This is the third paragrah.
This is the forth paragraph.


If God asked me
I had to choose one thing
Only one
Today
And I'd be able to do that every day
For now until always,
My answer,
Is my choice.
My answer,
Is my joy.
What God gave me?
What's my eternity?
Not an old stone
Heavy
Fixed
Waiting
Ignoring, fearing time.
No
I search for
I fight for
The rare diamonds
Smiles
Songs
Photos
Words
All of which
In the face of each moment
I'd like to see
To hear
To lick
Until the end of the world.

The tongue, the taste
Just as the wind
They might change
And that's the sweat
The difficulty
The joy of
Against darkness, tornados,
Walk around
With our diamond hearts
Fighting, carving
Crafting, building
Forever wants
Forever blisses
Every day, every time.


Functions
The following functions are available globally.
-
Undocumented
-
Undocumented
-
Undocumented
-
Undocumented
-
Undocumented
-
Undocumented
-
Undocumented
-
Undocumented
-
Undocumented
-
Undocumented
-
Undocumented
-
Undocumented
-
Undocumented
-
Undocumented
-
Undocumented
-
Undocumented
-
Undocumented
-
Undocumented


Hi,
I have purchased some CTs from Continental Control Systems. Here's a link to the product page: www.ccontrolsys.com/w/ACT_Series_Split-Core_Current_Transformers
They come with a built in burden resistor, and put out 3.33v at the max rated current. Here is a list of the burden resistor values: http://www.ccontrolsys.com/w/ACT-0750_Internal_Burden_Resistance
Working backwards, I think these have CTs have 400 turns.
My question is, do I need to change the burden resistor, or will the 3.33v output of these be fine to use? If i work through the calculations, I end up with burden values exactly half of what is listed in the link above. So to come up with the correct burden value, I should simply add the same value resistor on the PCB in paralell with the CT to halve it's resistance.
Please let me know if i'm wrong.
edit: On second thoughts, I don't think I need to lower the burden resistance. If someone can confirm that would be much appreciated.
Edit - fixed link - BT
Re: Burden for ACT-0750 CT and Arduino Due (3.3v)
You probably do need to add an external burden in parallel to lower the output voltage. Your 3.33 V output gives you 9.419 V peak-peak output. That will overload your input.
Re: Burden for ACT-0750 CT and Arduino Due (3.3v)
Thanks for your reply Robert. I am using the Arduino Due so it has a 3.3v input.I'm a little confused as to why the peak to peak output is 9.419V and not 4.709V. I might be missing something here!So say for each of those burden values, I should aim to reduce the total burden resistance to a third of the built in resistor, is that correct?edit: looks like I read the website wrong. its actually 0.333V at max current. They also have 1v models, which would probably be much more appropriate, I think. Can you confirm this?
Re: Burden for ACT-0750 CT and Arduino Due (3.3v)
I take it that you want the large aperture because you are not in the UK?
Yes, the 1 V output is more suitable for the 3.3 V input range. (1 V rms = 1.414 V pk = 2.828 V pk-pk, always assuming you have a pure sine wave).
3.3 V input, by the time you've allowed for voltage and input tolerances, is nearer 3.2 V peak-peak available input range.


Quoting producer and director Kim Ji Ok, Korean pop culture website Allkpop reported that the singer-actress had previously asked why women had to hide their sanitary pads.
Kim said Sulli had spoken about making a clear plastic pouch so women could carry their products without having to hide them.
In January during the airing of Naver V Live’s Jinri Store, Sulli had met representatives from feminine product brand Chungdam Girl.
During the discussions, Sulli said women needed to use good products during menstruation. “The difference is huge. Many women need to know this.”
“I use cotton (reusable) feminine products but you have to constantly wash it so that’s uncomfortable,” she had said then.
Fans were left heartbroken over the latest report about their idol, who was found dead on October 14 at her home.
One fan wrote Sulli had a caring heart and cared for her fans while another wrote why Korean culture dictates that pads be hidden.
“It’s a natural process,” wrote the fan.
Sulli, or her real name Choi Jin-ri, first gained attention as a child actress, playing the young Princess Seonhwa of Silla in the SBS drama Ballad of Seodong before her debut with K-pop girl group in f(x) in 2009.
She took a year-long hiatus in 2014 and chose to leave the group to pursue an acting career, appearing in various dramas and films with her most recent appearance being in the popular TV drama Hotel del Luna.
Earlier this year she released the single Goblin, surprising fans who thought she had retired from music.
*If you are lonely, distressed or having negative thoughts, Befrienders offers free and confidential support 24 hours a day. Contact Befrienders KL at 03-79568145 or 04-281 5161/1108 in Penang, or 05-547 7933/7955 in Ipoh or email sam@befrienders.org.my


provides utility classes.
- {@link org.afplib.AfpBuilder} for constructing structured fields.
- {@link org.afplib.CodepageHelper} for translating GCGID into JAVA codepages.
- {@link org.afplib.Data} some helper functions to convert data types.
- {@link org.afplib.ResourceKey} can be used to reference AFP resources.


“What $550?”  “Direct. Barcelona to JFK, round trip.” His voice was covered in static through the mobile.
“That’s incredible. Truly increíble, man. Did you know a ticket from Amsterdam to Barcelona would cost me just as much?” I didn’t believe it when I was looking for a ticket to go meet up with him, and it still didn’t make any sense, even two days later.
“I know, right? That’s a €50 ticket. It’s extortion!”
“Well, it’d be extortion if there was a rhyme or reason to it. The fact that Jeff flew to Madrid on $200 and you can fly to JFK for 500 while I’m paying $1600 to go to Brasilia is just plain chaos. Who prices these things?”
“Well, use your head. You and your friends fly internationally every week — what’s a typical transatlantic ticket going for these days?” He asked. A reasonable question on the surface, pointed as it was.
“Granted, they placed me in business class last week,” I said, remembering the over-rated and definitely over-priced €1500 1A seat I had on that 747. Anyone who says it’s unnecessary but worth it is selling something. “But for me, it varies on any given week from €300 to €900. I’m starting to suspect they have a big wheel-of-fortune prop in a hangar somewhere and every day the airlines take turns placing an iguana on it and spinning it until the thing lands on a number that doesn’t hurt their bottom line.”
“I see,” he said, his voice carrying a sound of concern. One thing is sure — coming up with a reliable number is not as straightforward as it should be.
Air travel has become far, far too complicated. We all know this, of course, and we all love to bitch and wail about our own anecdotes of terrifying and sometimes weird horror. We make a lot of noise about the cramped seats, the shitty food, what they did to us at airport security and so on… experiences that are valid, sure, but small. These are the obvious infringements against our comfort, our timeliness and our privacy and the tales carry with them great weight when told to a friend, or bored co-worker. But look around any discussion board on the internet. Listen over the long term. These are not unique. These stories are common place; boring almost. Change is not effected based on boring statistics, no matter how real or rational they are.
It’s the encroachment into the space lacking common sense that we should be watching. The steps in that direction carry the real danger of the industry, but more importantly, they carry the juicy sweetness that any story needs to properly captivate the public for long enough to make a difference.
And I warn you in advance: if healthcare, a deeply important issue that is central to the self-preservation of the economy, every corporation which employs people and just about every living person — and all of the dying ones — is struggling to keep that attention, I wouldn’t give much hope to anything less ridiculous than Scrubs…
But that’s negativity and we don’t need that. Not here, where we’re about to make a point. Which is important if you’re going to be a writer, or at least if you’re going to be a journalist. Which is, for the record, and definately for the moment, out of my hands.
“Amsterdam to Nice is €30 for the weekend,” he told me over the static. I could tell he was sitting in front of a computer, randomly looking up flights.
“Which weekend?” I asked. I thought it was important.
“…doesn’t matter,” he said, “You’d have to leave in two hours. But if you go next weekend…” he trailed off, probably waiting for the search to finished running.
“…next weekend…it’s…€320.”
“That’s more than ten times the price!” I yelled at him, though I’m certain he could do the math. “Are you kidding me? In NO OTHER INDUSTRY are prices this elastic. Why do we, as consumers, put up with this?”
There was silence on his end of the phone.
“Are you still there, man?” I proded.
“Yeah, yeah,” he came back, sort of stumbling. “But are you sure that’s the right economic term? I don’t think that means what you think it does.” I could tell he was smiling. “I thought an elastic commodity was something where the demand is reduced by an increase in price.” Some of it was still struggling to get off his face.
“Don’t get all Adam Smith on me, you nervous ape,” I started. “I said the prices are elastic, not the commodity. Damnit, I’m a writer, not an economist. I’m being descriptive, econometrics be damned. Don’t be a douchebag.”
“Really.” He’s an enigma, especially over the phone. “But, yeah, you’re right.  I asked him. “If other inelastic things such as beer, or advil — depending on who you are — fluctuated in price by a factor of ten every week, what would we do? Not nothing, right?
He thought about it for a second. “Is that even the right example?” He asked. Seriously, this time, I could tell. “Really,” he emphasized.
I gave him the benefit of the doubt. “I’m not sure. Maybe not. But what’s the score here, you know?” I pushed it. “What’s this lead to?”
He thought about it, and I could tell I was getting some of my frustration through to him. I continued. “Take, for example, reservations,” I said, leaning into my thought. “The other day I booked a train ticket from Boston to New York. I booked it online, everything done without so much as a conscious human knowing about my purchase but me.”
“…and the CIA,” he said.
“You rotten bastard,” I scowled at him. “You know those pigs monitor international calls coming into the US. You keep mentioning the CIA every time I call you and I’ll be lucky to be allowed back in the country instead of shipped off to some unknown forest in Eastern Europe or Siberia.”
“Get a grip, man. You sound like those paranoid delusionals on FOX News when you talk like that. Besides, they’ll keep you out of the country for much less than that.”
“True enough, eh?” I said, knowing full well that I’ve got other things to worry about. “Anyway, so I had this ticket I’d booked online, and I realized a couple hours later that I’d have to catch a train sooner than that. Like, in the next two hours.”
“So?” He asked.
“So…can you imagine if it’d been a plane ticket? Can you imagine the possibility of changing a reservation like that? Airline reservations are treated like they were more fragile than babies with osteoperosis. You can barely talk about it, and even if you can, you’ll have problems that strike the kind of bureaucracy only found in the real estate industry and hospital adminstration.
“First the new reservation would have to fall under the same category of ticket class. You knew that there are varying kinds of price classes even within First Class and Business, right?”
“Yeah, there’s like, two or three, I think.”
“Well, I’m not sure how many kinds there are for Economy, but they use most of the letters of the alphabet. So the chances are already grim.”
“Yeah,” he said, following my logic.
“Then you’d better hope that the ticket you purchased was flexible, where changes are allowed for a $100 or $200 fee. If not, and most ‘affordable’ ones aren’t, then you can’t change it at all. Sometimes it’s cheaper and less of a headache to just buy another ticket.”
“Are you saying they do this on purpose?” He asked over the mobile line.
“Do I have to?” I exclaimed, throwing my hands into the air and forgetting that one of them held my phone. Or was holding my phone that is, until it flew out of my hands and across the pavement as I walked from my car.
Fuck, I thought, and walked over to fetch it. I bent down to pick it up and my messenger bag slipped off my back onto my side.
  Hello? Hey, are you there? Did the call drop?’
“Yes, I’m here,” I said, annoyed that I had to fix my shirt that was now all crumpled onto one side.
 He asked.
“Nevermind,” I told him.  Watch what you say on international calls, damnit. You know better than that.”
“Whatever, get back to your point,” he said, “…you were going somewhere interesting with that.”
“The point, Shane, is that the system makes no sense at all in its current form and yet we foster the status quo without even thinking about it. It’s like health care.”
“Like health care?” he snided. “No. Don’t start giving me another long-winded schpiel about your most recent political moment of insight. Airlines are nothing like healthcare. They have planes.”
That made me smile.
“Hey,” he said, “you know where the problem with healthcare begins?
I humored him. “Where, Shane?”
“Sick people.”
“Jesus, man…” I started to say, but he exhaled loudly and continued his thought.
“…a_irlines are like health care — _what the hell does that mean?”
“Yeah. It’s not a system that exists to do what it should be doing. It exists because that’s how it’s grown. That’s what men — mostly rich, white, powerful men — have wanted it to be. Ripped and patched, sabotaged and staged, the legislation and regulation that defines it is constantly open to make room for more profits for — well, somebody.  Because it doesn’t matter that the business is going in the tank…CEO’s never lose money.”
“Huh,” he said, and thought for a second. “Then I’ll tell you what I’m NOT.”
“What?” I humoured him. “A CEO? In the right business? Is the liquor store clerkship not paying huge dividends and bonuses this year?”
“…going to get my knee surgery paid for.” There was no mirth in his voice; he sounded serious. “The insurance my parents had bought when I came back to the United States after losing my job in the Netherlands says it was an old sports injury and therefore a pre-existing condition. Fifteen thousand dollars.” I didn’t know what to say.
The line was quiet for a second. One of us swallowed.
“Wait, are you serious?” I asked him.
“Yeah.” He said.
“Really?” I asked him.
“Really.”


The chess rating application can't do anything since your browser is not allowing JavaScript code to run. Is it disabled in your browser settings?


If you want to send an email, please email us at<EMAIL_ADDRESS>Contact us for business inquiry on business@domain.com


Panther ODM Calculator
Working version
Documentation
Exercises
Builds
Equipment
Initial fuel
kg
Number of missiles
0
1
2
3
4
5
6
7
8
Number of dumb bombs
0
1
2
3
4
5
6
Recon pod
Intelli bomb
External fuel tanks
Status
Aircraft leg
Aircraft altitude
ft
All up weight
kg
Remaining fuel
kg
Fuel used last leg
kg
Perform a ...
Cruise
Climb
Dive
Drop bomb(coming soon)
Refuel(coming soon)
Loading aircraft ...
Cruise
Speed
kts
Distance
nm
Climb
Climb altitude
ft
Dive
Dive altitude
ft


A little about Pat's Cookies.
Hello cookie lovers! My name is Pat and we are the Chinhooks family. I come from a family of fishers from a small town on a very small island off of a very small country in the southern part of the world. I am the baker, the cookie magic maker. People go nuts for our cookies so my partner Peter is the store's security. My son Parker is my baking assistant, he too has the magic cookie touch and my daughter Penelope is the cookie and merch designer.
If you love Salmon and have a deep appreciation for scaley beauties or identify salmon as your spirit animal than you are at the right place. Salmon cookies have been in our family for many generations and we are proud to say we make the best fishy cookies around! See something you like on our main page? Click the button below to place your order today!


The following datasets are based on the openAPI specification and are free for use. They allow developers and researchers to work on projects about the OAS. The following links lead to the datasets themself, my master thesis about the creation of the dataset and the research on web service discovery, the data is used for.
You need to serialize the datasets files with Pythons pickle function
There are two datasets:
There are three different labels:


--- layout: archive title: Zulip Chat Archive permalink: /stream/113488-general/topic/dec_trivial.20fails.20with.20instances.20using.20.60rw.60.html ---
Observe the following two decidable
instances, one of which uses a rewrite, and fails on most inputs, and one which avoids using the rewrite, and works just fine.
inductive T : ℕ → Prop | t : Π {L : ℕ}, T L def good : decidable_pred T | L := decidable.is_true T.t lemma T_iff (L : ℕ) : T L ↔ true := ⟨λ h, trivial, λ h, T.t⟩ def bad : decidable_pred T | L := by { rw T_iff, apply_instance, } section good local attribute [instance] good example : T 0 := dec_trivial end good section bad local attribute [instance] bad example : T 0 := dec_trivial -- FAILS end bad
I suspect that this, rather than any timeout issues, is actually the root cause of most of the failures I see in trying to use dec_trivial
.
Can someone explain what is going on?
(Obviously this is a minimised example; I hit this problem "in the wild", with a decidability instance where it was more painful to avoid using rewrite.)
If you print them, you get
def good._main : @decidable_pred nat T := λ (a : nat), id_rhs (decidable (T a)) (@decidable.is_true (T a) (@T.t a))
vs
def bad._main : @decidable_pred nat T := λ (a : nat), id_rhs (decidable (T a)) (@eq.mpr (decidable (T a)) (decidable true) (@id (@eq Type (decidable (T a)) (decidable true)) (@eq.rec Prop (T a) (λ (_a : Prop), @eq Type (decidable (T a)) (decidable _a)) (@eq.refl Type (decidable (T a))) true (@propext (T a) true (T_iff a)))) decidable.true)
The first one gives an is_true
of the right type, along with a proof.
The second one proves that what we are deciding is the same as just deciding true, and then just says "true".
Of course, both actually decide the question...
The underlying problem is that
example : @ite _ (good 0) _ true false := trivial
but
example : @ite _ (bad 0) _ true false := trivial
doesn't. I don't know if that's really any simpler, since an ite
is just a rec
on decidable
.
Interestingly, if I replace the ite
with its definition in either of those lines, both fail.
It turns out this problem is the underlying cause of decidable
instances for combinatorial games not working.
I could fix the decidable
instances for the integer-valued games, but domineering seems to intrinsically involve non-definitional equations in the construction of short
instances, so dec_trivial
is still broken there.
It's to do with the fact that the proof of equality uses propext
, and isn't a definitional equality, so the eq.rec
application can't be iota reduced because the resulting expression won't type check.
the moral of the story is to always use decidable_of_iff
instead of rw
to prove decidable instances. (It doesn't matter how you prove the iff)
@Mario Carneiro, I think it's worse than that. I've been investigating the decidability instances in the combinatorial games PR. By carefully avoiding rw
I can now prove (0 : pgame) < 1 := dec_trivial
, but dec_trivial
still fails on everything involving domineering.
The other problem I think you will run into with surreals and games is the use of well founded recursion
You may be able to make it compute, but everything in the proof of well foundedness needs to be able to reduce, i.e. it can't be marked theorem
even if it's a proof
ooh, I never knew that defining something propositional using def
was any different from defining it using theorem
!
You rewrote in a proof of short
? This is a bad idea and there is even a comment that says as much
You mean the unfold domineering {single_pass:=tt}
?
yes
It's not clear to me why short
is not a proposition
at the very least you should prove it's a subsingleton
I need to get the fintype
s back out of it at various points, I think.
And if I make it a Prop
I can't eliminate anymore.
is it preserved by equivalence?
Yes
oh ...
not obviously
sorry, no, it's not preserved under equivalence, I think!
You can just add infinitely many irrelevant options
Oh but I see you have relabelling
for this
and possibly restriction
too
so you may be able to prove restriction x y -> short y -> short x
wait no, restriction
does a different thing on the left and right
restriction says that things are better for Left, and worse for Right
(err, maybe other way round)
I proved short
is a subsingleton.
Why is it that you're interested in whether short
is preserved by equivalence?
I think it really doesn't descend to the quotient; you could define short
on the quotient by asking that there exists a pgame
representative that is short
.
@Mario Carneiro, do you have any advice on diagnosing non-computable problems in dec_trivial
? I don't even know how to track down "the proof that is blocking reduction" in any example. (That is, all I know how to do is read everything that might be involved and look for bad smells.)
You can use #reduce
to find out what you got that isn't of_true ...
or of_false ...
In the literature they call this "canonicity", and lean doesn't have it because of axioms and irreducible proofs
irreducible proofs aren't usually a problem because of proof irrelevance, but subsingleton eliminators like acc
use a proof as their major premise, so we have to be able to reduce that proof to a constructor
In fact whnf
is sufficient, in case #reduce
times out
What is it that I should be passing to whnf
?
run_cmd tactic.whnf `(domineering.L ≤ 1) >>= tactic.trace
I'm missing a ...?
the proof of decidable (domineering.L ≤ 1)
So
run_cmd tactic.whnf `(by apply_instance : decidable (domineering.L ≤ 1)) >>= tactic.trace
?
yes, I think that should work
does it?
Yes
If it is successful, you will get a term that starts with decidable.of_true
. Otherwise, you should look for the "active" part of the term; that's the head of the term unless it's a recursor, in which case you should look at the active part of the major premise, and recurse until you find something that's not a recursor
In this case we have a recursor, decidable.rec
, applied to fintype.decidable_forall_fintype
in the major premise (at the end)
so the question is, why isn't that reducing? You may need to turn on pp.implicit
pp.implicit
and pp.max_steps
gives me: (message too long, truncated at 262144 characters)
I guess that's what the command line is for.
I weep for lean
Mario, you mean is_true
and is_false
in your comment up there right?
yes, I always forget the names
Hmm, the full output with pp.implicit
is now at https://gist.github.com/semorrison/56f6f878a3d60d8aaee93184146fff08
but I can't find the "active part" anymore.
Unfortunately there are now 6 different appearances of fintype.decidable_forall_fintype
counting brackets tells me it's now at line 7590. :-)
This is the worst __most fun__ thing ever
The way I would analyze this is by manipulating the expr from lean, i.e. get the 6th subterm of the decidable.rec application, and print it
Even without knowing the arguments to fintype.decidable_forall_fintype
, it's strange to me that this would be the active term, because it's a definition. It should have unfolded
Curiously, the output has exactly four instances of eq.mpr
. I think I know how to get rid of them.
The very last thing printed is an underscore, though, suggesting that it may be stuck on a proof
Hmm, got rid of the eq.mpr
s, but that didn't help. Now trying pp.proofs
...
Interestingly, shrinking the domineering board to a single cell causes it to reduce to is_true
.
Last updated: Apr 24 2020 at 19:02 UTC


As always, our community of contributors is hard at work authoring innovative and important contributions to open source projects on and off the Steem blockchain. This week, we’ve chosen to showcase an interesting tutorial series, a new app for publishing to the blockchain and other contributions from various categories that were deemed worthy of an especially high reward.
Staff Picks
Creating RPC Server on Web Browser - part 2: Listen to browser Tab activity on the server side by @drsensor [tutorials]
This post is an addition to an ongoing tutorial series by @drsensor for his project on Creating an RPC server on node.js. In this second part, @drsensor highlights how to allow listening to browser tab activity, sending said activity as beacon data and utilizing it between 2 layers of abstraction, as well as creating webhooks using both koa-router and koa-body.
The tutorial is quite extensive, well written and well-documented in terms of process, screenshots and illustrations. Limitations are also properly highlighted towards the end. The tutorial provides a clear path towards the progress of the series.
Total payout: 96.78 STU Number of votes: 85
Beem: Unable to get replies to an account via discussions.Replies_by_last_update by @stmdev [bug-hunting]
Beem is an unofficial easy-to-use Python wrapper (library) for Steem developed by @holger80, with a great set of advantages like thorough unit tests, more complete implementation, Steemconnect integration etc. It is very popular and many developers use it in their projects. @stmdev found that one of the methods, discussions.Replies_by_last_update()
, could not be used to get list of last replies from a given author. Specifically, it provided false information. This was due to using start_author
instead of start_parent_author
in the rpc call. He wrote an excellent report with demo scripts to prove his bug.
His fix was merged https://github.com/holgern/beem/pull/53
Total payout: 42.30 STU Number of votes: 52
Steeditor development update: communities, new core, and new editor by @jakipatryk [development]
Image source
Steeditor is an amazing Steem post editor by @jakipatryk, with all the advanced options you could ever need! Setting beneficiaries or custom JSON metadata has never been easier, and it even includes the templates for Utopian contributions as well - if you aren’t using it already then you should definitely check it out!
Total payout: 179.64 STU Number of votes: 184
Steem White Paper Translation #2 (appr. 1542 words) by @laylahsophia [translations]
Image source
A translation staff pick contributed by @laylahsophia, translating a portion of Steem White Paper.
This German translator has done excellent work in her translation. She translated a high volume of 1,542 words, beyond our expectations from a translation contribution. Even with such a high volume of words, she proved her excellent skill in translating difficult texts with high accuracy.
Total payout: 123.66 STU Number of votes: 46
FreeCAD - Greek Translation (Part 4 - approximately 1240 words) by @lordneroo [translations]
Image source
FreeCAD is a customizable parametric 3D CAD modeler aimed at real life product design and mechanical engineering. Due to its accessibility to Python programming, it offers a wider range of use cases on the architecture and general engineering fields.
When talking about CAD modelers it’s inevitable to think in expensive proprietary software as the AutoDesk suite. However, there are viable and ever evolving open source alternatives, which are by far lead by FreeCAD. A cornerstone of open source usage is the capacity to spread it widely across potential users in a way that can satisfy their needs completely. Therefore constant and highly accurate internationalization efforts such as @lordneroo’s are invaluable for the FOSS community. His translation was done with strict accuracy standards based on engineering-oriented vocabulary.
Total payout: 3.00 STU (Not voted by Utopian yet) Number of votes: 48
New logo to the app BIGDIALER by @ggabogarcia [graphics]
Big Dialer is a very helpful app for people with visual or mental disabilities. @ggabogarcia created a very nice symbol for them. It’s a nice play on the symbols for heart, B and phone. Perfect discovery, construction and presentation make this work stand out.
Total payout: 102.428 STU Number of votes: 177
SteemApp 2.0 here we go - iOS Released to the App Store by @yuriks2000 [blog]
One of our VIPO club members, @yuriks2000, announced a new update for SteemApp-iOS, an application for writing Steem posts on iOS mobile devices. Thanks to critical changes in UI and functionality, it’s now possible to browse the feed on a smooth interface. If you wish to give it a try, you can find the app in the AppStore.
Considering the proper usage of sections and supportive visuals for each feature in the update, including GIFs, it’s obvious that the post does the presentation part well. It’s a good example of a blog post about project updates.
Total payout: 183.33 STU Number of votes: 66
Utopian.io Post Statistics
The staff picked contributions are only a small (but exceptional) example of the mass of contributions reviewed and rewarded by Utopian.io.
- Overall, the last week saw a total of 216 posts, with 135 of them rewarded through an upvote by @utopian-io.
- In total, Utopian.io distributed an approximate of 7810.95 STU to contributors.
- The highest payout seen on any Utopian.io contribution this week was 433.388 STU, with a total of 314 votes received from the community.
- The contribution that attracted the most engagement was DBlog.io - Decentralized Blogging Platform - Frontend and Backend improvement, with no less than 14 comments in its comment threads.
- The average vote given by Utopian.io was worth 57.86 STU.
Category Statistics
|Category|Reviewed|Rewarded|Total rewards|Top contributor| |:-|:-|:-|-:|:-| |video-tutorials|5|5|209.48 STU|@official-hord| |ideas|11|2|43.52 STU|@tykee| |blog|8|7|243.35 STU|@to-the-sun| |bug-hunting|23|12|277.19 STU|@stmdev| |analysis|6|4|288.52 STU|@abh12345| |graphics|36|24|1527.91 STU|@zuur| |development|34|22|1875.56 STU|@luschn| |translations|65|44|2750.71 STU|@samhamou| |tutorials|16|9|472.26 STU|@onepice| |social|3|2|41.86 STU|@siersod| |copywriting|1|1|62.87 STU|@harry-heightz|
First Time Contributing in Utopian.io?
Learn how to contribute on our website
Utopian Witness
This page is synchronized from the post: Weekly Top of Utopian.io: July 19 - 25


Source code for messageScheduler
# Copyright 2014 Modelling, Simulation and Design Lab (MSDL) at
# McGill University and the University of Antwerp (http://msdl.cs.mcgill.ca/)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""
Scheduler for external input messages
"""
from heapq import heappop, heappush, heapify
from pypdevs.logger import *
[docs]class MessageScheduler(object):
"""
An efficient implementation of a message scheduler for the inputQueue,
it supports very fast invalidations (O(1)) and fast retrievals of first
element (O(log(n) in average case)
"""
[docs] def __init__(self):
"""
Constructor.
"""
# List of processed messages
self.processed = []
# Heap of the to be processed messages
self.heap = []
# All invalidated messages, simply adding a message's UUID will invalidate
# the message. The counter that it keeps is for multiple invalidations
self.invalids = set()
def __getstate__(self):
"""
For pickling
"""
retdict = {}
unpicklable = frozenset(["instancemethod", "lock", "_Event"])
for i in dir(self):
if getattr(self, i).__class__.__name__ in unpicklable:
# unpicklable, so don't copy it
continue
elif str(i).startswith("__"):
continue
else:
retdict[str(i)] = getattr(self, i)
return retdict
[docs] def insert(self, extraction, model_list):
"""
Insert several messages that were created elsewhere and merge them in.
:param extraction: the output of the extract method on the other message scheduler
:param model_list: models that are inserted and for which extraction happened
"""
msgs, invalids = extraction
# A simple update suffices, as these messages have a unique ID
self.invalids |= invalids
for msg in msgs:
moddata = {}
for entry in msg.content:
inport = model_list[entry[0]].ports[entry[1]]
moddata[inport] = msg.content[entry]
# Overwrite the original message
msg.content = moddata
self.schedule(msg)
[docs] def schedule(self, msg):
"""
Schedule a message for processing
:param msg: the message to schedule
"""
try:
self.invalids.remove(msg.uuid)
except KeyError:
heappush(self.heap, msg)
[docs] def massUnschedule(self, uuids):
"""
Unschedule several messages, this way it will no longer be processed.
:param uuids: iterable of UUIDs that need to be removed
"""
self.invalids = self.invalids.union(uuids)
[docs] def readFirst(self):
"""
Returns the first (valid) message. Not necessarily O(1), as it could be
the case that a lot of invalid messages are still to be deleted.
"""
self.cleanFirst()
return self.heap[0]
[docs] def removeFirst(self):
"""
Notify that the first (valid) message is processed.
:returns: msg -- the next first message that is valid
"""
self.cleanFirst()
self.processed.append(heappop(self.heap))
[docs] def purgeFirst(self):
"""
Notify that the first (valid) message must be removed
:returns: msg -- the next first message that is valid
"""
self.cleanFirst()
heappop(self.heap)
[docs] def cleanFirst(self):
"""
Clean all invalid messages at the front of the list. Method MUST be called
before any accesses should happen to the first element, otherwise this
first element might be a message that was just invalidated
"""
try:
while 1:
self.invalids.remove(self.heap[0].uuid)
# If it got removed, it means that the message was indeed invalidated, so we can simply pop it
heappop(self.heap)
except (KeyError, IndexError):
# Seems that the UUID was not invalidated, so we are done
# OR
# Reached the end of the heap and all were invalid
pass
[docs] def revert(self, time):
"""
Revert the inputqueue to the specified time, will also clean up the list of processed elements
:param time: time to which revertion should happen
"""
try:
i = 0
while self.processed[i].timestamp < time:
i += 1
for msg in self.processed[i:]:
# All processed messages were valid, so no need for the more expensive check
# Should an invalidation for a processed message have just arrived, it will
# be processed AFTER this revertion, thus using the normal unschedule() function
heappush(self.heap, msg)
self.processed = self.processed[:i]
except IndexError:
# All elements are smaller
pass
[docs] def cleanup(self, time):
"""
Clean up the processed list, also removes all invalid elements
:param time: time up to which cleanups are allowed to happen
"""
# We can be absolutely certain that ONLY elements from the processed list should be deleted
self.processed = [i for i in self.processed if i.timestamp >= time]
# Clean up the dictionary too, as otherwise it will start to contain a massive amount of entries, consuming both memory and increasing the amortized worst case


--- start: 2015-08-05 13:00 edition: 5 participate: " http://www.eventbrite.com/e/geeknight-hyderabad-5th-edition-tickets-17828618879" subheader: "Internet of Things
Does open hardware, drones, 3D printer, home automation, excite you? Do you want to learn and see how it is done?
" subnote: talk : agenda: - time: "6:30 p.m" title: "Session on Internet of Things" subtitle: "


How do I select my interface language?
On running the program, you can choose the interface language. There are two languages available in the current version (Greek, English) but it will be soon extended to cover more languages.
- English (Welcome!)
- Greek (Καλως ήλθατε!)
Select the desired language from the popup menu. LvS reloads in the selected language interface.