Published on November 24, 2017 and updated on October 22, 2021.
This post is the third in a 6 part series in which I’ll break down the main topics within statistics for online sample testing. The topics are:
- The importance of understanding statistics for tests with samples;
- Hypotheses;
- Samples and probabilities (this post);
- Histograms and density curves;
- P-value, alpha, beta and power;
- Designing tests and configuring calculators.
Bonus: A/B testing significance calculator.
It is unlikely that experiments performed on digital environments will have a whole population available, at least in a business setting. When it is impossible to study each individual from a population, samples are used instead. A sample is a group extracted from a population. Findings from a studied sample are assumed to be the same for the population from which the sample was taken. How exactly a sample is extracted and how it is possible to know if a sample is, in fact, representative of the population being studied?
Population x sample
A population represents every individual within a group. The population of a country, for instance, is comprised of all people that live in this country. For digital products, a population is comprised of all people that access the product. The sample represents a portion of the population, and it is used to infer information about the whole population.
Samples have quality. A good sample is one that can describe the population from which it was taken. The process of collecting the sample must, then, be done with caution. Even an experiment that was executed correctly and with no random errors for results can end up with wrong results, if the sample is not representative for the population. A good sample must be:
- Significant: big enough to satisfy the experiment under the requirements;
- Representative: population characteristics must be the present in the sample;
- Random: samples must be randomly chosen to avoid the selection bias.
Testing tools will ensure that random samples are selected for the study, but both significance and representativeness must be determined by the researcher.
Populations and samples are groups that share common traits. In order to know how the group is organized along these traits, a number known as central tendency measure is used. Central tendency measures are numbers that explain sets of data. The three most common are the mean (or average), the median and the mode. Tests with online samples use the mean. Explain, or summarize, data using only one number is useful to have an understanding on how the data is organized. When it is not possible to access the whole population, the population mean is unknown. When this is the case, the measure used is the sample mean. The more significant and representative a sample is, the closest the sample mean will be from the population mean.
When statistical studies are made with samples, the mathematical tools that are used to calculate the level of proximity between samples and populations are within the field of inferential statistics.
Descriptive and inferential statistics
The field of statistics is divided between two sets, called descriptive statistics and inferential statistics.
- Descriptive statistics: explain whole sets of data. Summarizing data with averages or explain the distribution of data are operations within the field of descriptive statistics. It is important to note that methods from descriptive statistics do not allow for conclusions that are beyond the set of data being analyzed;
- Inferential statistics: explain populations based on samples. Hypotheses tests are statistical tools within this group.
Inference in statistics is given by probabilities.
Probabilities
Probability is the chance that an event will happen. Probabilities are of two types: independent and conditional.
Independent probability
The independency between probabilities means that the probability of an event to happen is not bound to previous events. Think about a dice with six equal sides. When the dice is rolled and comes to rest, any number between 1 and 6 can show. A second roll can also reveal any number from 1 to 6, same thing for the third roll and so on. The same principle can be applied to a fair coin in a heads or tails game, for instance.
Conditional probability
Probabilities change with past events. One example is a full deck of cards, in which the probability of any card to be randomly taken from the deck is the same. For each card that is removed, the probability of taking any of the remaining cards increases.
The law of big numbers
What is the probability of a given event to occur? The estimate becomes more precise the more attempts (or events, or observations) are registered. This phenomenon is called law of big numbers. Not counting the restraints with sample tests described on the introductory post of this series, the bigger the sample, the bigger the probability of a correlation between the treatment given to a study group and observed behaviors.
In software, tests are based on certain tasks that individuals of a sample are or aren’t able to complete, and the main metric is the percentage of individuals of the sample that are able to complete the task. This percentage is called conversion rate. In statistical terms, this number is represented in its absolute form and it is called proportion (or probability of success, given by P). It is impossible to know the real conversion rate (P) when the size of the population is unknown (and this is the case for digital products). We use techniques from inferential statistics to estimate the proportion P for a given event described in a hypothesis.
Throughout this and the next posts I’ll be using the terms conversion rate, probability of success and proportion as synonyms.
Combined probabilities
Probabilities can also be combined, as long as the probabilistic events are mutually exclusive. What does this mean is that two or more events can happen without influencing on each other. One example on the online world would be “how many visitors have viewed both the category and the product pages?” (assuming that it is possible to get to the product page without passing through the category page and vice versa). If such events aren’t mutually exclusive, it is necessary to subtract the portion of events that collide before combining the probabilities in order to avoid duplicated samples.
In online sample testing, the number being studied is the probability of success as stated in the hypothesis, or the conversion rate. The researcher calculate the average conversion rate for each sample in order to calculate the average conversion rate for all samples, and also a margin of error. The sum and subtraction of margin errors from the average conversion rate of all samples form an interval. This interval is comprised of all probable conversion rates of the samples, and it is called confidence interval. It is likely that each sample have some degree of difference from all others, so an interval of possible conversion rates is estimated to infer the average conversion rate for all population.
Confidence intervals and probabilities of success P will be detailed in a future post.
Further reading
Learn probabilities in depth in the website Statistics and Risk Management, from where the examples with dices and cards were used for this post.
Let’s estimate probabilities!


Select range From: To:


Dashboard
On this page you can:
- See an overview of which scenarios your group are responsible for providing impact estimates for. If we have the wrong scenarios listed, please contact us here.
- Download demographic data which applies to all scenarios
- Download coverage data for each scenario
- Upload impact estimates for each scenario, and review any problems the system has detected in the uploaded data.
- Track progress towards providing impact estimates for all your scenarios
Overall progress
-
HPV, No vaccination (ID: hpv-hpv-novaccination) No dataYou have not uploaded any impact estimate sets.HPV, Routine, without Gavi support (ID: hpv-hpv-routine-nogavi) CompleteYou have uploaded a data set. There are no detected problems.You have uploaded the following impact estimate sets:
Model version Date uploaded Comment Current? PRIME 2016 2017-10-13 Initial upload Yes HPV, Routine, with Gavi support (ID: hpv-hpv-routine-gavi) Problems detectedYou have uploaded a data set. However there are some problems with the data. Please upload a new version of the data set that fixes the following issues:- Missing data for these countries: AFG
- There are negative burden numbers for some outcomes.
You have uploaded the following impact estimate sets:Model version Date uploaded Comment Current? PRIME 2016 2017-10-13 Initial upload No PRIME 2016v2 2017-10-18 Corrected small error in model Yes


You have successfully logged off. We recommend that you close all browser windows at this time.
Sign In
© 2020 Colin Wilson
Terms of Service
Privacy Policy


This Network was created for a Girl Scout Gold Award Project by Emily Simkovich of Troop 57087 in partnership with the Adoptee Rights Campaign.
The Adoptee Rights Campaign is a diverse group of advocates whose vision is full citizenship status for all intercountry adoptees. For more information please visit their website adopteerightscampaign.org.
To join the legal referral network please fill out the form here.
For inquries about the Lawyer Network, please email<EMAIL_ADDRESS>For inquries about the Adoptee Rights Campaign, please email info@adopteerightscampaign.org


I am a computer science graduate student passionate for creative technologies. Interests: parallel computing, distributed system, deep learning.


{% include document-top.html %} {% include main-navigation.html %} {% include left-drawer.html %}
So you want to start using Ink? You've come to the right place.


LDAP Library¶
To facilitate LDAP integration, Kanboard has its own LDAP library. This library can perform common operations.
Client¶
Class: Kanboard\Core\Ldap\Client
To connect to your LDAP server easily, use this method:
use Kanboard\Core\Ldap\Client as LdapClient;
use Kanboard\Core\Ldap\ClientException as LdapException;
try {
$client = LdapClient::connect();
// Get native LDAP resource
$resource = $client->getConnection();
// ...
} catch (LdapException $e) {
// ...
}
LDAP Queries¶
Classes:
Kanboard\Core\Ldap\Query
Kanboard\Core\Ldap\Entries
Kanboard\Core\Ldap\Entry
Example to query the LDAP directory:
$query = new Query($client)
$query->execute('ou=People,dc=kanboard,dc=local', 'uid=my_user', array('cn', 'mail'));
if ($query->hasResult()) {
$entries = $query->getEntries(); // Return an instance of Entries
}
Read one entry:
$firstEntry = $query->getEntries()->getFirstEntry();
$email = $firstEntry->getFirstValue('mail');
$name = $firstEntry->getFirstValue('cn', 'Default Name');
Read multiple entries:
foreach ($query->getEntries()->getAll() as $entry) {
$emails = $entry->getAll('mail'); // Fetch all emails
$dn = $entry->getDn(); // Get LDAP DN of this user
// Check if a value is present for an attribute
if ($entry->hasValue('mail', 'user2@localhost')) {
// ...
}
}
User Helper¶
Class: Kanboard\Core\Ldap\User
Fetch a single user in one line:
// Return an instance of LdapUserProvider
$user = User::getUser($client, 'my_username');
Group Helper¶
Class: Kanboard\Core\Ldap\Group
Fetch groups in one line:
// Define LDAP filter
$filter = '(&(objectClass=group)(sAMAccountName=My group*))';
// Return a list of LdapGroupProvider
$groups = Group::getGroups($client, $filter);


{% extends 'base.html' %} {% block page_specific_css %} {% endblock %} {% block content%}
The analysis has successfully completed. Go to the homepage to download output files
Completed at: {{finish_time}}


About me
I recently earned my PhD in biology with the Agnarsson Lab at the University of Vermont. My dissertation work explored the interplay between long-distance dispersal and vicariance in shaping the evolutionary history and biogeography of spiders. My research is part of an ongoing collaborative project, Caribbean Island Biogeography (CARBIO), which uses the remarkably diverse study system of spiders to better understand how the island archapelligo has become a biodiversity hotspot. Currently, I am the Inbertebrate Collections Manager for the Zadock Thompson Zoological Collections at the University of Vermont Natural History Museum.
When I'm not nerding out about spiders, I'm racing mountain bikes across the Northeast.


--- type: "standard" title: "Husband Plants Huge Garden Of Flowers For His Blind Wife" featimg: "http://i.imgur.com/e1kwGKf.png" description: "Husband Spent 2 Years Planting Flowers For His Blind Wife" origin_url: "http://www.boredpanda.com/husband-plants-flowers-blind-wife-kuroki-japan/" social_media_msg: "True love" ---
The Kurokis are a couple from japan who lived a happy life as dairy farmers on the countryside with their children. They got married in 1956 and have been living on the same dairy farm since then. Mrs. Kuroki diabetes got worst with age to the point that she got completely blind. The blindness had a devatating effect on her and she started struggling with depression. She stopped going outside of her house and refused to socialize with her family.
Mr. Kuroki loved his wife so much and was hurting from seeing her deteriorate day after day. He was constantly thinking of ways to make his wife feel better and get out of her seclusion. One day he realised that if his wife can't see, she can smell and that if he makes the outside smell so good, may be that will entice his wife desire to go out and enjoy the smell. He started growing flowers everywhere around his house. Sure it took him two years to turn the outside into a flower garden but it was worth it, his wife now enjoys going outside and enjoying the good smell of flowers. Not only that, his story now brings people from all around the world to witness the power of unconditional love.
Source: Youtube
Source: Shintomi Machiyakuba
Source: Rkr21Sfmfr
Source: Yoshiyuki Matsumoto
Source: Youtube
Source: Yoshiyuki Matsumoto
Source: Yoshiyuki Matsumoto
Source: Yoshiyuki Matsumoto
Source: Yoshiyuki Matsumoto


ExMinimatch.Matcher
Summary↑
| match_file(file, exminimatcher) |
| match_regex_parts(state) |
| match_regex_parts(regex_parts, file_parts, options) |
| swallow_and_match_next_regex_part(state, fr) |
| match_file(file, exminimatcher) |
| match_regex_parts(state) |
| match_regex_parts(regex_parts, file_parts, options) |
| swallow_and_match_next_regex_part(state, fr) |


We are new to the market but not new to technology. We collaborate with the leading sellers and manufacturers to get you what your heart desires.
We are new to the market but not new to technology. We collaborate with the leading sellers and manufacturers to get you what your heart desires.


Come and join the fitness of wow world to have a fitness level you ever needed in you. Heirloom echo park mlkshk tote bag selvage hot chicken authentic tumeric truffaut hexagon try-hard chambray.
A Fully certified trainer and nutrition expert is here to help with not with just advice but with his proper guidence for your wow fitness
We don't just provide best quality equipments and best coaches but we teach you to maintain your fitness at all levels with minimum efforts of time and money. Coloring book flannel truffaut craft beer drinking vinegar sartorial, disrupt fashion axe normcore meh butcher. Portland 90's scenester vexillologist forage post-ironic asymmetrical, chartreuse disrupt butcher paleo intelligentsia pabst before they sold out four loko. 3 wolf moon brooklyn.
Learn MoreSchlitz single-origin
Feature
Literally you probably haven't heard of them jean shorts.
Schlitz single-origin
Feature
Literally you probably haven't heard of them jean shorts.
Schlitz single-origin
Feature
Literally you probably haven't heard of them jean shorts.


Chair Name:
{{viewingForm.Chair.name}}
Department:
{{viewingForm.Chair.department}}
Co-Chair Name:
{{viewingForm.co_Chair.name}}
Department:
{{viewingForm.co_Chair.department}}
Member Name:
{{viewingForm.member_1.name}}
Department:
{{viewingForm.member_1.department}}
Member Name:
{{viewingForm.member_2.name}}
Department:
{{viewingForm.member_2.department}}
Member Name:
{{viewingForm.member_3.name}}
Department:
{{viewingForm.member_3.department}}
External Member Name:
{{viewingForm.external.name}}
Department:
{{viewingForm.external.department}}


| Path: | website/index.txt |
| Last Update: | Wed Jul 30 21:54:13 -0700 2008 |
h1. rubigen
h1. Ruby Generator Framework
h2. What
A framework to allow Ruby applications to generate file/folder stubs (like the rails command does for Ruby on Rails, and the ‘script/generate’ command within a Rails application during development).
The RubyConf 2007 presentation is now "online":rubyconf2007.confreaks.com/d3t1p1_rubigen.html together with the theme from the A-Team.
h2. Background
RubiGen is originally extracted from Ruby on Rails (specifically the rails_generator from its railties gem).
The rails_generator was hardcoded with Rails-specific dependencies (RAILS_ROOT), Rails generators (‘app’ = Rails application; ‘model’ = Rails model+tests+migration), and generally assumed it was the only generator framework within the Ruby world (it was). So, any RubyGem whose name ended with ‘_generator’ was assumed to be a generator for a Rails application.
But if you are developing a Merb application, then you may want a different set of generators. If you are developing a RubyGem, then you will want a different set of generators.
RubiGen exists to give different development environments their own generator framework.
h2. Installing
RubiGen is only required at development time, and normally isn‘t required at deployment time (unless your application uses it to generate files etc for its users).
On your development machine:

sudo gem install rubigen

h2. Usage
RubiGen will be normally integrated into another RubyGem, such as newgem or merb or camping, rather than be used on its own.
These frameworks might use RubiGen for two reasons:
# To generate an initial stub for developers, e.g. rails generated a stub to write a Rails application. newgem generates a stub to write a RubyGem.

BTW - RubiGen has a builtin application ruby_app which generates a bare-bones Ruby application stub (lib, test, and script folders, plus a Rakefile, and a script/generate script)
# To generate components within their development areas, e.g. Rails had its script/generate script within each Rails application, which hooked back into the rails_generator to lookup and execute generators.
So, there are two steps to integrating RubiGen into your framework:
# Use it to generate an initial stub for the developers of your framework. This would create the folders
(lib/app, test, script, doc, log, etc) and starting files (Rakefile, README.txt, test/test_helper.rb etc). Importantly, it would generate a script/generate file. The script/generate file (example below) will allow developers of your framework to generate components/extensions within the framework.
 RubiGen allows you to restrict which generators are available. For example, within RubyGem development environment (as generated by newgem), the script/generator only shows rubygem-related generators. Merb could restrict script/generator to only show Merb related generators (or perhaps Merb and/or Rails generators)
# Your framework RubyGem (e.g. newgem or merb RubyGems) needs to add rubigen as a
dependency, so that users of your RubyGem can access the generator framework.
h1. Creating generators
There are two types of generators:
# Application Generators - used by developers of your framework to get started.
Generally, you will create one Application Generator for your framework. It generates a base stub (such as the rails stub for new Rails applications) for your framework users.
# Component Generators - used by developers to extend their application.
You may include 1+ built-in generators with your framework. Developers can also write generators for your framework, and like Rails' generator install them in various places and have access to their via RubiGen.
h2. Creating an Application Generator for your Framework
h3. Easy way
"newgem":newgem.rubyforge.org/ (v0.13.0+) can generate an Application Generator for a RubyGem.
# Create new RubyGem: newgem foobar # Create generator: script/generator application_generator foobar # Update tests + generator # Install # Run with: foobar
For more documentation, run script/generator application_generator
h3. DIY
Without RubiGen, to give your users a head start and create a stub for them, you will copiously use mkdir_p and File.open. Your script will either be primitive (only create the bare folders and very few files) or it will be very long and unreadable (ok, perhaps I‘m just talking about the newgem script, which I am dubiously responsible for… :P).
With RubiGen, you can create stubs using powerful, yet simple, syntax. Templates are extracted into a templates folder, and activating the generator from a script requires only a few lines of code.
These are the newgem files related to its Application Generator.
bin/ bin/newgem # Appliction Generator script; Usage: newgem gemname [options] app_generators/ app_generators/newgem/ app_generators/newgem/newgem_generator.rb app_generators/newgem/USAGE app_generators/newgem/templates/ app_generators/newgem/templates/app.rb app_generators/newgem/templates/History.txt app_generators/newgem/templates/... lots and lots of templates
The bin/newgem script is very simple, and looks like:

 require ‘rubygems’ require ‘rubigen‘
if %w(-v —version).include? ARGV.first
require 'newgem/version' puts "#{File.basename($0)} #{Newgem::VERSION::STRING}" exit(0)
end
require ‘rubigen/scripts/generate’ RubiGen::Base.use_application_sources! RubiGen::Scripts::Generate.new.run(ARGV, :generator => ‘newgem’)

You can copy and paste this for your own generator script, and place it in your RubyGem‘s bin folder. Change newgem to your RubyGem‘s name in the script above (and in all the folders listed above too)
NOTE: If you leave newgem there, then it will execute the newgem_generator.rb generator; as the generators are loaded from all RubyGem‘s having /app_generators folders.
So, for your RubyGem, you need to keep the /app_generators folder (as you are creating an Application Generator, not a Component Generator), but change newgem to your gem name in all the subfolders and files. ESPECIALLY newgem_generator.rb -> yourgem_generator.rb, as this is how the generator is discovered (via RubiGen::Base.use_application_sources!).
All the generator work is performed within yourgem_generator.rb. A stub for it will be:

 require ‘rbconfig‘
class YourgemGenerator < RubiGen::Base
DEFAULT_SHEBANG = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name']) default_options :shebang => DEFAULT_SHEBANG, :an_option => 'some_default' attr_reader :app_name, :module_name def initialize(runtime_args, runtime_options = {}) super usage if args.empty? @destination_root = args.shift @app_name = File.basename(File.expand_path(@destination_root)) @module_name = app_name.camelize extract_options end def manifest # Use /usr/bin/env if no special shebang was specified script_options = { :chmod => 0755, :shebang => options[:shebang] == DEFAULT_SHEBANG ? nil : options[:shebang] } windows = (RUBY_PLATFORM =~ /dos|win32|cygwin/i) || (RUBY_PLATFORM =~ /(:?mswin|mingw)/) record do |m| # Root directory and all subdirectories. m.directory '' BASEDIRS.each { |path| m.directory path } # Root m.template_copy_each %w( Rakefile ) m.file_copy_each %w( README.txt ) # Test helper m.template "test_helper.rb", "test/test_helper.rb" # Scripts %w( generate ).each do |file| m.template "script/#{file}", "script/#{file}", script_options m.template "script/win_script.cmd", "script/#{file}.cmd", :assigns => { :filename => file } if windows end end end protected def banner <<-EOS
Create a stub for #{File.basename $0} to get started.
Usage: #{File.basename $0} /path/to/your/app [options]" EOS
end def add_options!(opts) opts.separator '' opts.separator "#{File.basename $0} options:" opts.on("-v", "--version", "Show the #{File.basename($0)} version number and quit.") end # Installation skeleton. Intermediate directories are automatically # created so don't sweat their absence here. BASEDIRS = %w( doc lib log script test tmp )
end

Easy peasy.
h2. Creating a Component Generator for your Framework
You can include Component Generators in RubyGems, and they will be automatially picked up by your framework‘s script/generate script.
h3. Easy way
Use "newgem":newgem.rubyforge.org/, (v0.13.0+), and run:

 script/generate component_generator

and follow the instructions.
h2. Live at RubyConf 2007
RubiGen had the 9am, Sunday timeslot at RubyConf 2007 and was "recorded for your viewing pleasure":rubyconf2007.confreaks.com/d3t1p1_rubigen.html.
h2. Forum
"groups.google.com/group/rubigen":http://groups.google.com/group/rubigen
h2. How to submit patches
Read the "8 steps for fixing other people‘s code":drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/ and for section "8b: Submit patch to Google Groups":drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/#8b-google-groups, use the Google Group above.
The source for this project is available via git. You can "browse and/or fork the source":github.com/drnic/rubigen/tree/master, or to clone the project locally:

git clone git://github.com/drnic/rubigen.git

The original Subversion repository is svn://rubyforge.org/var/svn/rubigen/trunk for anonymous access.
h2. Thanks go to…
"Jeremy Kemper":bitsweat.net/ (bitsweat) who wrote the original "Rails Generator":dev.rubyonrails.org.
h2. License
This code is free to use under the terms of the MIT license.
h2. Contact
Comments are welcome. Send an email to "Dr Nic<EMAIL_ADDRESS>via the "forum":groups.google.com/group/rubigen


Children have a full-time occupation: playing. For them, it’s a happy talent to know how to play. As a child, I remember, I used to play a whole lot of games, some with friends, while some alone in the house, some of them used to be the well-known indoor and outdoor games, while ideas of some others came out of our little imaginative minds. Among all these, a very common game that we often used to play, and I guess you all, especially girls, can relate to it at it’s best, and have played at least once, is the domestic home game, in which we used to act like we are in a different world, yet living a same kind of life with our imaginary families. In this game, we used to make gestures to do any kind of activities, be it cooking, eating, talking over the phone, clicking pictures with camera, writing (also doing gestures on walls like writing on a board), and what not! I remember I also used to make patterns on my wrist like a watch and act as if I’m wearing a real watch. While playing this game I used to wonder how nice it would have been if there actually existed a way in which even without owning any gadgets, like a cellphone, camera or wrist watch, we could just make gestures to actually use them! This question remained in my mind and I thought more and more about what other things could be done if actually such an incredible technology existed. I used to look at the pictures in my books and imagine how interesting it would be if only by looking at the pictures I could see them moving and describing the stories and give knowledge. Or how fun would it be if we could know their name, characteristics and interests just by a glance!
Well these all imaginations, thoughts and questions remained in my mind and I did not know whom to discuss with, who really would be knowing if anything as such practically exists or not. All my doubts and queries found a way and I found that there actually exists a world of technology that I used to imagine, when one fine day in my early days of exploring the Internet, I came across an interesting term, “The Sixth Sense Technology”.
As the name implies, the Sixth Sense Technology alludes to a sense in addition to our five traditional physical senses, i.e., it is about comprehending information more than our available senses. We communicate with the digital world around us using the enormous gadgets available to us. But we can’t directly interact with the digital world since our physical body is not meant for the digital world. The primary goal of the Sixth Sense Technology is to connect the digital and the real world seamlessly and to interact with the digital world in the most direct and efficient way.
History of the Sixth Sense Technology
Idea behind this incredible technology was started in the late 1990’s by Steve Mann (who can be considered as the “Father of the emergence of the Sixth Sense Technology”) at MIT, and further developed after some years by Pranav Mistry, who was then a PhD student at MIT Media Lab. WuW(Wear your World) was the name first proposed by Pranav Mistry, Pattie Maes and Liyan Chang for this technology. With the goal to leverage our knowledge about everyday objects and use them to interact with the digital world, Pranav Mistry started an experiment, with two mouses. He took the 4 rollers off from them and put them in a single line. It had some strings, springs and pulleys and what he ultimately got was a basic gesture-interface device that actually acted like a motionsensing device. The four roller-experiment gave him the idea that he could use the same concept on fingers and that’s what he next moved on to.
What is the Sixth Sense Technology?
Sixth sense is basically a wearable gesture interface that emphasizes the physical world around us with the digital information available and enables us to use our natural hand gestures to interact with that information. This spectacular technology is an integration of many magnificent technologies and is a intuition of the concept of augmented reality. It bridges the gap between the digital and the real world.
Components required for the Sixth Sense Technology
The first archetype or model of the sixth sense technology was bigger in size-big projector mounted on a helmet- and was not comfortable or easy to use for regular working purposes. Therefore, later the scientists came out with a modified neck-worn type, pendant-like device which was much easier and comfortable to use.
The basic components required for the sixth sense technology are:
Camera
This is the digital eye of the system. It captures and recognizes the hand movements and gestures made by the user and the scenes the user is looking at.
Projector
The projector augments the physical object, wall or any other interface. It faces downward and projects the output image on the mirror so that the user can adjust the focus and project on the desired image; it runs on a rechargeable battery.
Mirror
The mirror reverts the projection coming out from the projector. Thus, the projection can be made on any desired object, like the wall. The mirror can be tilted manually to change the location of projection.
Microphone
This is an optional component in the sixth sense technology. It is required when we use a paper as an interface; the microphone when attached with paper, senses the sound signal of the user touching the paper; combining with the tracking information about the user’s fingers to a computing device, creates a touch interface.
Mobile-computing device
This technology uses a mobile-computing device as a processing device in the user’s pocket. The camera, projector and microphone are connected to this computing device either using wires or wirelessly. All the features of this system run on this computing device, which is connected to a network or a wireless connection.
Advantages
1. It has been made open-source.
2. It is cheap to build and use.
3. It is a portable, handy technology.
4. It can be used by anyone and everyone, even by a person with zero knowledge about mouse and keyboard.
5. This technology does not make humans understand the language and knowledge of computers, rather it makes machines and computers to adapt to human needs.
Applications
The sixth sense technology implements huge no. of numerous applications that demonstrate its usefulness and flexibility.
1. Using this technology, a virtual watch can be obtained just by drawing a circle on our wrist with our index finger which would show us the accurate time.
2. This technology can turn a simple piece of paper into a digital display. For e.g., a newspaper can show the live video of a news.
3.. The technology enables users to find millions of books over the internet that matches with the cover of the book the user is holding; if the name of the book is known, the technology may also provide all reviews available on it, including the sound reviews, just with the physical book in hand.
4.Using this technology, we may project a keypad on our palm and use the virtual keypad to make a call, without the use of an actual mobile phone.
5. Just by projecting at our boarding pass, we may find the direction of the flight gate or even check how much our flight has been delayed.
6. The sixth sense technology implements map which enables the user display the map on any physical interface and find his destination; we can use our thumb and index fingers to navigate the map, say, to zoom in or zoom out.
7. To capture an image, we may just make gesture of clicking a picture with our thumb and index fingers, and the image gets captured, which may later be modified, printed, shared or even transferred to our computer.
8. Just by looking at a person, we may even get to see information on him/her displayed on the body.
(Aren’t these unbelievable and incredible??!!)
Current State of the Sixth Sense Technology
The idea that Steve Mann and eventually Pranav Mistry came up with was extremely unique. Especially Pranav Mistry took up this technology to a different level, giving rise to the foundation of an era where computing will actually merge with the physical world, making a profitable innovation. The commercial product of the technology has not been launched yet, but the prototype is already prepared. It’s hardware and software assembly instructions are open-source. If in the near future, this technology can be made available to the mass, then the world would experience a massive success in the field of technology, and a new generation of technology would begin!
The Future of Sixth Sense Technology
In future, this marvelous technology may find numerous useful applications making workflow more intuitive.
1. The technology may be of great help for the disabled people:
• People who cannot speak can make others understand what they want to say with their sign movement’s recognition converted into text.
• For the blind people, the camera may act as an eye, like their fifth sense.
2. The future may see a great amplification in the 3D print media.
3. A better world will come into existence through sixth sense technology with holography.
4.The technology is almost like setting up a digital system in our body and implementing it in our everyday life.
Thus, this technology integrates information to everyday objects, which not only help us get rid of the digital devices, but also fills the gap between the physical and the digital worlds.
And so, by exploring about the Sixth Sense technology, I found answers to all my queries and interests which had grown in my mind during my childhood through a mere game and I inferred that indeed, all the activities I imagined of doing are actually possible with the help of this mesmerizing technology, the “Sixth Sense Technology”.
“It is important that we stay humans, rather than being just machines, sitting in front of other machines.”
- PRANAV MISTRY


{{define "email-bundle"}}
Hello, {{.Profile.FullName}} !
All of these complaints have already been submitted to SFO directly. This email is just for your personal records (or to forward on to OAK or SJC.)
This is a {{if len .Complaints | ge 1}}single report{{else}}list of {{ len .Complaints }} reports{{end}} relating to jets on flight paths for SFO, SJC and OAK. Where possible, the aircraft {{if len .Complaints | ne 1}}were{{else}}was{{end}} identified via flightradar24.com.
My details:
| Caller code : | {{.Profile.CallerCode}} |
| Name : | {{.Profile.FullName}} |
| Address : | {{.Profile.Address}} |
The {{if len .Complaints | ne 1}}{{len .Complaints}} reports{{else}}report{{end}}:
| {{with $v.Timestamp}}{{.Format "Mon, Jan 02, 03:04 PM"}}{{end}} | {{if .AircraftOverhead.BestIdent }}Flight: {{spacify .AircraftOverhead.BestIdent}} {{if .AircraftOverhead.Origin}} [{{.AircraftOverhead.Origin}}-{{.AircraftOverhead.Destination}}] {{end}} {{if .AircraftOverhead.EquipType}} ({{.AircraftOverhead.EquipType}}; speed: {{.AircraftOverhead.Speed}} knots, altitude: {{.AircraftOverhead.Altitude | printf "%.0f"}} ft, distance: {{.Dist2KM | printf "%.1f"}} KM) {{end}} | {{end}}
|
{{if .Description}}Personal notes: {{.Description}} {{end}} {{if ge .Version 2}} {{if .Activity}}"{{.Activity}}" was disturbed. {{end}} {{if ge .Loudness 2}}Volume was "{{if eq .Loudness 1}}loud{{else if eq .Loudness 2}}very loud{{else}}TOO LOUD{{end}}".{{end}} {{if .HeardSpeedbreaks}} Speedbrakes were heard ! {{end}} {{end}} |
Thank you.
{{end}}


| Opcode/Instruction | Op/En | 64/32 bit Mode Support | CPUID Feature Flag | Description |
|---|---|---|---|---|
| EAX = 0DH ENCLS[EAUG] | IR | V/V | SGX2 | This leaf function adds a page to an initialized enclave. |
| Op/En | EAX | RBX | RCX |
| IR | EAUG (In) | Address of a SECINFO (In) | Address of the destination EPC page (In) |
This leaf function zeroes a page of EPC memory, associates the EPC page with an SECS page residing in the EPC, and stores the linear address and security attributes in the EPCM. As part of the association, the security attributes are configured to prevent access to the EPC page until a corresponding invocation of the EACCEPT leaf or EACCEPTCOPY leaf confirms the addition of the new page into the enclave. This instruction can only be executed when current privilege level is 0.
RBX contains the effective address of a PAGEINFO structure while RCX contains the effective address of an EPC page. The table below provides additional information on the memory parameter of the EAUG leaf function.
| PAGEINFO | PAGEINFO.SECS | PAGEINFO.SRCPGE | PAGEINFO.SECINFO | EPCPAGE |
| Read access permitted by Non Enclave | Read/Write access permitted by Enclave | Must be zero | Read access permitted by Non Enclave | Write access permitted by Enclave |
The instruction faults if any of the following:
| The operands are not properly aligned. | Unsupported security attributes are set. |
| Refers to an invalid SECS. | Reference is made to an SECS that is locked by another thread. |
| The EPC page is locked by another thread. | RCX does not contain an effective address of an EPC page. |
| The EPC page is already valid. | The specified enclave offset is outside of the enclave address space. |
| The SECS has been initialized. |
| Leaf | Parameter | Base Concurrency Restrictions | ||
|---|---|---|---|---|
| Access | On Conflict | SGX_CONFLICT VM Exit Qualification | ||
| EAUG | Target [DS:RCX] | Exclusive | #GP | EPC_PAGE_CONFLICT_EXCEPTION |
| SECS [DS:RBX]PAGEINFO.SECS | Shared | #GP |
| Leaf | Parameter | Additional Concurrency Restrictions | |||||
|---|---|---|---|---|---|---|---|
| vs. EACCEPT, EACCEPTCOPY, EMODPE, EMODPR, EMODT | vs. EADD, EEXTEND, EINIT | vs. ETRACK, ETRACKC | |||||
| Access | On Conflict | Access | On Conflict | Access | On Conflict | ||
| EAUG | Target [DS:RCX] | Concurrent | Concurrent | Concurrent | |||
| SECS [DS:RBX]PAGEINFO.SECS | Concurrent | Concurrent | Concurrent |
| Name | Type | Size (bits) | Description |
|---|---|---|---|
| TMP_SECS | Effective Address | 32/64 | Effective address of the SECS destination page. |
| TMP_SECINFO | Effective Address | 32/64 | Effective address of an SECINFO structure which contains security attributes of the page to be added. |
| SCRATCH_SECINFO | SECINFO | 512 | Scratch storage for holding the contents of DS:TMP_SECINFO. |
| TMP_LINADDR | Unsigned Integer | 64 | Holds the linear address to be stored in the EPCM and used to calculate TMP_ENCLAVEOFFSET. |
IF (DS:RBX is not 32Byte Aligned)
THEN #GP(0); FI;
IF (DS:RCX is not 4KByte Aligned)
THEN #GP(0); FI;
IF (DS:RCX does not resolve within an EPC)
THEN #PF(DS:RCX); FI;
TMP_SECS ← DS:RBX.SECS;
TMP_LINADDR ← DS:RBX.LINADDR;
IF ( DS:TMP_SECS is not 4KByte aligned or TMP_LINADDR is not 4KByte aligned )
THEN #GP(0); FI;
IF ( (DS:RBX.SRCPAGE is not 0) or (DS:RBX.SECINFO is not 0) )
THEN #GP(0); FI;
IF (DS:TMP_SECS does not resolve within an EPC)
THEN #PF(DS:TMP_SECS); FI;
(* Check the EPC page for concurrency *)
IF (EPC page in use)
THEN #GP(0); FI;
IF (EPCM(DS:RCX).VALID ≠ 0)
THEN #PF(DS:RCX); FI;
(* Check the SECS for concurrency *)
IF (SECS is not available for EAUG)
THEN #GP(0); FI;
IF (EPCM(DS:TMP_SECS).VALID = 0 or EPCM(DS:TMP_SECS).PT ≠ PT_SECS)
THEN #PF(DS:TMP_SECS); FI;
(* Check if the enclave to which the page will be added is in the Initialized state *)
IF (DS:TMP_SECS is not initialized)
THEN #GP(0); FI;
(* Check the enclave offset is within the enclave linear address space *) IF ( (TMP_LINADDR < DS:TMP_SECS.BASEADDR) or (TMP_LINADDR ≥ DS:TMP_SECS.BASEADDR + DS:TMP_SECS.SIZE) ) THEN #GP(0); FI;
(* Clear the content of EPC page*)
DS:RCX[32767:0] ← 0;
(* Set EPCM security attributes *)
EPCM(DS:RCX).R ← 1;
EPCM(DS:RCX).W ← 1;
EPCM(DS:RCX).X ← 0;
EPCM(DS:RCX).PT ← PT_REG;
EPCM(DS:RCX).ENCLAVEADDRESS ← TMP_LINADDR;
EPCM(DS:RCX).BLOCKED ← 0;
EPCM(DS:RCX).PENDING ← 1;
EPCM(DS:RCX).MODIFIED ← 0;
EPCM(DS:RCX).PR ← 0;
(* associate the EPCPAGE with the SECS by storing the SECS identifier of DS:TMP_SECS *)
Update EPCM(DS:RCX) SECS identifier to reference DS:TMP_SECS identifier;
(* Set EPCM valid fields *)
EPCM(DS:RCX).VALID ← 1;
None
| #GP(0) | If a memory operand effective address is outside the DS segment limit. |
| If a memory operand is not properly aligned. | |
| If a memory operand is locked. | |
| If the enclave is not initialized. | |
| #PF(error | code) If a page fault occurs in accessing memory operands. |
| #GP(0) | If a memory operand is non-canonical form. |
| If a memory operand is not properly aligned. | |
| If a memory operand is locked. | |
| If the enclave is not initialized. | |
| #PF(error | code) If a page fault occurs in accessing memory operands. |


Finding another member in your Meetup group used to be unnecessarily difficult for organizers and other members alike. This tool also helps organizers manage their members, and lets other members of the group more easily find each other.
This only made it to mobile web, but it will be coming to the native platforms in the near future


'br}
'br}
{\
ispell-wrapper - smart wrapper for ispell
ispell-wrapper [--emacs=name] [--language=regexp] [--dry-run] [ispell options] file
Options (all long only options): --emacs=name Set the language to use by emacs dict name --language=regexp Set the language to use by name --dry-run Only show what would have done
ispell-wrapper is a wrapper script for ispell intended to be used in a Debian system in conjunction with the infrastructure introduced by the dictionaries-common package. Option --dry-run will show the string to be run without doing anything else.
It automatically sets the -d, -w, and -T options to ispell as a function of the chosen language. Of course, this only works for dictionary packages that comply with the above mentioned Policy.
Here is how the language is defined (in order of priority):
By matching the emacs dict name given in --emacs option to the name of one of the emacs dicts names provided by installed languages in the system. This match must be exact (although is case insensitive). Note that this will override any value given in the --language option.
By matching the regexp given in option --language to the list of installed languages in the system.
By matching the regexp stored in the environment variable s-1ISPELLDEFAULTs0 to the list of installed languages in the system.
By using the value stored in the user-specific file ~/.ispell-default (use select-default-iwrap|(1) to set it).
By using the value stored in the site-wide file /etc/dictionaries-common/ispell-default (use select-default-ispell|(8) as superuser to set it).
Note: regexp matches are case-insensitive and the s-1ISO-8859-1s0 special characters are transformed into their s-1ASCIIs0 equivalents. German ess-zet is equivalent to the character *(L"s*(R" and the ae ligature to the character *(L"e*(R".
Let us say that the following dictionaries are installed in the system (as appearing in the Debconf question at installation time):
castellano (Spanish TeX mode) castellano8 (Spanish 8 bit) portugu[^e]s (European Portuguese) portugu[^e]s brasileiro (Brazilian Portuguese)
Choosing the regexp (either in the --language option or in the environment variable s-1ISPELLDEFAULTs0) to be *(L"span*(R" will yield an error, since two languages will match (*(L"castellano*(R" and *(L"castellano8*(R"). However, if the regexp is *(L"span.*8*(R", the language *(L"castellano8 (Spanish 8 bit)*(R" will be chosen.
Regexp that matches the name of the default language to use, if no --language option is given.
Contains the name of the language to use, if no --language option is given or if the s-1ISPELLDEFAULTs0 environment variable is not set. This is a user-specific choice.
/etc/dictionaries-common/ispell-default 4
Name of the language to use when everything above is not set. This is a system-wide setting.
select-default-ispell|(8), select-default-iwrap|(1)
Rafael Laboissiere


The restaurant believes malware was used to collect payment card data including names and credit or debit numbers.
A flaw in T-Mobile's website allowing anyone to access customer data highlights the need for internal audits and authentication.


Select a div to move the grey box too.


The Hispaniolan solenodon (Solenodon paradoxus), also known as the Dominican solenodon, or agouta, is a solenodon found only on Hispaniola, the island shared by Haiti and the Dominican Republic. It was first described by Brandt in 1833. A similar but smaller species, Marcano's solenodon (S. marcanoi), once lived on the island, but became extinct after European colonization. All solenodon species belong to order Soricomorpha and family Solenodontidae.
The Hispaniolan solenodon looks much like an oversized shrew. It weighs 0.6–1.0 kg (1.3–2.2 lb). Head-and-body length is 28–33 cm (11–13 in) and the tail is about 25 cm. It has brownish-red fur on most of its body, with a paler underside. The tail, legs, snout, and eartips are hairless. The forelegs are noticeably more developed than the hind legs, but all have strong claws useful for digging.
The head is very big in relation to its body, with a long rostrum and tiny eyes and ears partially hidden by the body fur. A unique feature is the os proboscis, a bone on the tip of the rostrum that supports the snout cartilage. The dental formula for the species is 3/3, 1/1, 3/3, 3/3 = 40. The second lower incisor has a narrow groove (Solenodon derives from the Greek for "grooved tooth"), through which flows a venomous saliva secreted by the submaxillary gland, making the solenodon one of only a handful of venomous mammals.


Walrus
Walrus is a free (open source) Object-Oriented templating engine written in Ruby. Plain text templates are compiled down to Ruby code; final output is produced by executing ("filling") the compiled templates.
Standard object-oriented patterns can be used to maximize re-use and minimize repetition, and custom behavior such as targeting multiple output formats from a single source template can be added using custom Ruby methods.
A walrus
command line tool is included
to make compiling and filling templates easy.
Walrus was inspired by the Cheetah template engine written in Python.
System requirements
Walrus currently only supports Ruby 1.8, although Ruby 1.9
compatibility work is underway. JRuby is not yet officially
supported, but some operations (notably batch compilation of
large numbers of files using
jruby -S walrus compile ...
) have been successfully
tested.
Installation
$ sudo gem install walrus
Donations
Walrus is free, open source software released under the BSD license. If you find it useful and would like to support further development you can make a donation via PayPal to<EMAIL_ADDRESS>Source code
The Git source code repository can be explored in a browser using the web interface.
Further reading
Walrus was originally written an 2007 and as it was my first non-trivial project in Ruby I made a number of blog posts during development:
- Test-Driven Development
- Writing a parser generator in Ruby
- Progress notes
- Abstract Syntax Trees
- Putting the 'packrat' into PEG: adding memoizing to my Ruby parser generator
- Updated packrat performance numbers
- Parser generator update
- Another performance update: parity
- Here documents
- Goodbye parity, hello superiority
- Payoff time


This is a step by step slide show how to analyze RNA-sequencing date. Most images are taken from my p53 senessence project (for more information, please refer to the project page by clicking the tab on the top right corner). The first image of the slide is from this article from phys.org.


Home
Blog
Events
Event Request
Add yourself as Author
Add as author for Community Blog
Prasanth is budding FSA started contribution with Localization
FSA Contribution recognition
Lets Learn about Mozilla Products on Womens Day
IOT meetup series coimbatore
Makilan is Mechanical Engineering student with passion to take web at Remote Places
Introducing MozillaTN social Media Team
Karthickeyan is calm community builder
Adam is Free Software Activist and prefers Quality more than Quantity
PRIVACY CAMPAIGN @ SASTRA HOSTEL
Awesome Many FSA Got Badges


"""rbf - Radial basis functions for interpolation/smoothing scattered Nd data.
Written by John Travers<EMAIL_ADDRESS>February 2007
Based closely on Matlab code by Alex Chirokov
Additional, large, improvements by Robert Hetland
Some additional alterations by Travis Oliphant
Permission to use, modify, and distribute this software is given under the
terms of the SciPy (BSD style) license. See LICENSE.txt that came with
this distribution for specifics.
NO WARRANTY IS EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
Copyright (c) 2006-2007, Robert Hetland<EMAIL_ADDRESS>Copyright (c) 2007, John Travers<EMAIL_ADDRESS>Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of Robert Hetland nor the names of any
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
 IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
"""
from __future__ import division, print_function, absolute_import
import sys
import numpy as np
from scipy import linalg
from scipy._lib.six import callable, get_method_function, get_function_code
from scipy.special import xlogy
__all__ = ['Rbf']
[docs]class Rbf(object):
"""
Rbf(*args)
A class for radial basis function approximation/interpolation of
n-dimensional scattered data.
Parameters
----------
*args : arrays
x, y, z, ..., d, where x, y, z, ... are the coordinates of the nodes
and d is the array of values at the nodes
function : str or callable, optional
The radial basis function, based on the radius, r, given by the norm
(default is Euclidean distance); the default is 'multiquadric'::
'multiquadric': sqrt((r/self.epsilon)**2 + 1)
'inverse': 1.0/sqrt((r/self.epsilon)**2 + 1)
'gaussian': exp(-(r/self.epsilon)**2)
'linear': r
'cubic': r**3
'quintic': r**5
'thin_plate': r**2 * log(r)
If callable, then it must take 2 arguments (self, r). The epsilon
parameter will be available as self.epsilon. Other keyword
arguments passed in will be available as well.
epsilon : float, optional
Adjustable constant for gaussian or multiquadrics functions
- defaults to approximate average distance between nodes (which is
a good start).
smooth : float, optional
Values greater than zero increase the smoothness of the
approximation. 0 is for interpolation (default), the function will
always go through the nodal points in this case.
norm : callable, optional
A function that returns the 'distance' between two points, with
inputs as arrays of positions (x, y, z, ...), and an output as an
array of distance. E.g, the default::
def euclidean_norm(x1, x2):
return sqrt( ((x1 - x2)**2).sum(axis=0) )
which is called with ``x1 = x1[ndims, newaxis, :]`` and
``x2 = x2[ndims, : ,newaxis]`` such that the result is a matrix of the
distances from each point in ``x1`` to each point in ``x2``.
Examples
--------
>>> from scipy.interpolate import Rbf
>>> x, y, z, d = np.random.rand(4, 50)
>>> rbfi = Rbf(x, y, z, d) # radial basis function interpolator instance
>>> xi = yi = zi = np.linspace(0, 1, 20)
>>> di = rbfi(xi, yi, zi) # interpolated values
>>> di.shape
(20,)
"""
def _euclidean_norm(self, x1, x2):
return np.sqrt(((x1 - x2)**2).sum(axis=0))
def _h_multiquadric(self, r):
return np.sqrt((1.0/self.epsilon*r)**2 + 1)
def _h_inverse_multiquadric(self, r):
return 1.0/np.sqrt((1.0/self.epsilon*r)**2 + 1)
def _h_gaussian(self, r):
return np.exp(-(1.0/self.epsilon*r)**2)
def _h_linear(self, r):
return r
def _h_cubic(self, r):
return r**3
def _h_quintic(self, r):
return r**5
def _h_thin_plate(self, r):
return xlogy(r**2, r)
# Setup self._function and do smoke test on initial r
def _init_function(self, r):
if isinstance(self.function, str):
self.function = self.function.lower()
_mapped = {'inverse': 'inverse_multiquadric',
'inverse multiquadric': 'inverse_multiquadric',
'thin-plate': 'thin_plate'}
if self.function in _mapped:
self.function = _mapped[self.function]
func_name = "_h_" + self.function
if hasattr(self, func_name):
self._function = getattr(self, func_name)
else:
functionlist = [x[3:] for x in dir(self) if x.startswith('_h_')]
raise ValueError("function must be a callable or one of " +
", ".join(functionlist))
self._function = getattr(self, "_h_"+self.function)
elif callable(self.function):
allow_one = False
if hasattr(self.function, 'func_code') or \
hasattr(self.function, '__code__'):
val = self.function
allow_one = True
elif hasattr(self.function, "im_func"):
val = get_method_function(self.function)
elif hasattr(self.function, "__call__"):
val = get_method_function(self.function.__call__)
else:
raise ValueError("Cannot determine number of arguments to function")
argcount = get_function_code(val).co_argcount
if allow_one and argcount == 1:
self._function = self.function
elif argcount == 2:
if sys.version_info[0] >= 3:
self._function = self.function.__get__(self, Rbf)
else:
import new
self._function = new.instancemethod(self.function, self,
Rbf)
else:
raise ValueError("Function argument must take 1 or 2 arguments.")
a0 = self._function(r)
if a0.shape != r.shape:
raise ValueError("Callable must take array and return array of the same shape")
return a0
def __init__(self, *args, **kwargs):
self.xi = np.asarray([np.asarray(a, dtype=np.float_).flatten()
for a in args[:-1]])
self.N = self.xi.shape[-1]
self.di = np.asarray(args[-1]).flatten()
if not all([x.size == self.di.size for x in self.xi]):
raise ValueError("All arrays must be equal length.")
self.norm = kwargs.pop('norm', self._euclidean_norm)
self.epsilon = kwargs.pop('epsilon', None)
if self.epsilon is None:
# default epsilon is the "the average distance between nodes" based
# on a bounding hypercube
dim = self.xi.shape[0]
ximax = np.amax(self.xi, axis=1)
ximin = np.amin(self.xi, axis=1)
edges = ximax-ximin
edges = edges[np.nonzero(edges)]
self.epsilon = np.power(np.prod(edges)/self.N, 1.0/edges.size)
self.smooth = kwargs.pop('smooth', 0.0)
self.function = kwargs.pop('function', 'multiquadric')
# attach anything left in kwargs to self
# for use by any user-callable function or
# to save on the object returned.
for item, value in kwargs.items():
setattr(self, item, value)
self.nodes = linalg.solve(self.A, self.di)
@property
def A(self):
# this only exists for backwards compatibility: self.A was available
# and, at least technically, public.
r = self._call_norm(self.xi, self.xi)
return self._init_function(r) - np.eye(self.N)*self.smooth
def _call_norm(self, x1, x2):
if len(x1.shape) == 1:
x1 = x1[np.newaxis, :]
if len(x2.shape) == 1:
x2 = x2[np.newaxis, :]
x1 = x1[..., :, np.newaxis]
x2 = x2[..., np.newaxis, :]
return self.norm(x1, x2)
def __call__(self, *args):
args = [np.asarray(x) for x in args]
if not all([x.shape == y.shape for x in args for y in args]):
raise ValueError("Array lengths must be equal")
shp = args[0].shape
xa = np.asarray([a.flatten() for a in args], dtype=np.float_)
r = self._call_norm(xa, self.xi)
return np.dot(self._function(r), self.nodes).reshape(shp)


We are the editors and design team of Background Hum Newsletter. It is the official newsletter of Department of Electrical Enginnering, IIT Bombay. Background Hum was founded in 2005 and you can visit the old website here. This website is the first ever publicly given full-fledged website for our Newsletter. Do read our blogs and issues.
We are the editors and design team of Background Hum Newsletter. It is the official newsletter of Department of Electrical Enginnering, IIT Bombay. Background Hum was founded in 2005 and you can visit the old website here. This website is the first ever publicly given full-fledged website for our Newsletter. Do read our blogs and issues.