ILA BHARATHAM was born for making the nation a better place to live in, by extending our support to the needy from different horizons. Our emphasis is to assist the needs of the children in a right way, helping them to flourish in their talents. We value the operational freedom which stems from being a non-profitable trust which is independent of any religious or political affiliation and which does not discriminate on the basis of race, gender, ethnicity, age, religion or politics.
Though started by a bunch of youngsters, we believe that Every journey starts with a first step, trying to make a change in the nation and an impact only when we are supported and encouraged by the people around us with the skill that they profess so as to educate the children, by giving out their valuable time to express their love.We are also in need of your support ,time, money, skills and so on as we all know "Unity Is Strength" always so as to fulfill our mission.
To unite the younger generation for a noble cause and to increase the awareness among people, encourage them to provide a helping hand and the imbalance in todays rapidly changing world needs to be put back into equilibrium.
Ilabharatam was born not just out of curiosity but out off concern to help the under priviledged people in the society.Its emphasis is to ensure that every child gets a proper life with good benefits. It strives for the welfare of the differently abled children and nurtures them in all possible ways so as to make them independent.


stk.ga.fitness module¶
Module for defining fitness functions.
How fitness values are calculated.¶
The basic outline of the fitness calculation procedure for a single molecule is as follows,
# 1. Start with a MacroMolecule instance.
mol = Polymer([monomer1, monomer2], SomeTopology())
# This new instance has had no fitness functions applied to it
# and therefore its "fitness" and "unscaled_fitness" attributes
# are empty.
mol.fitness # None
mol.unscaled_fitness # {}
# 2. Apply a fitness function to the MacroMolecule.
mol.unscaled_fitness['random_fitness'] = random_fitness(mol)
# This adds the unscaled fitness value into the "unscaled_fitness"
# attribute, but does not change the "fitness" attribute.
mol.fitness # None
mol.unscaled_fitness # {'random_fitness': 34}
# 3.Copy the value from "unscaled_fitness" into "fitness".
mol.fitness = deepcopy(mol.unscaled_fitness['random_fitness'])
mol.fitness # 34
mol.unscaled_fitness # {'random_fitness': 34}
# 4. Apply any number of normalization functions to the fitness
# value. Normalization functions can be skipped altogether.
# Normalization functions act on a population of MacroMolecules,
# i.e. they normalize the fitness values across the population. So
# first step is to put the molecule into a population.
pop = GAPopulation(mol)
# Apply the normalization function.
norm_func(pop)
mol.fitness # 12
mol.unscaled_fitness # {'random_fitness': 34}
# Multiple normalization functions may be applied.
norm_func2(pop)
mol.fitness # 200
mol.unscaled_fitness # {'random_fitness': 34}
When running the GA, this process is much simplified,
# Start with a population of molecules, representing a GA
# generation.
pop = GAPopulation(mol1, mol2, mol3)
mol1.fitness # None
mol1.unscaled_fitness # {}
mol2.fitness # None
mol2.unscaled_fitness # {}
mol3.fitness # None
mol3.unscaled_fitness # {}
# Calculate the unscaled fitness values of all molecules.
pop.calculate_member_fitness()
mol1.fitness # None
mol1.unscaled_fitness # {'random_fitness': 12}
mol2.fitness # None
mol2.unscaled_fitness # {'random_fitness': 34}
mol3.fitness # None
mol3.unscaled_fitness # {'random_fitness': 22}
# Apply the normalization functions.
pop.normalize_fitness_values()
mol1.fitness # 3
mol1.unscaled_fitness # {'random_fitness': 12}
mol2.fitness # 1
mol2.unscaled_fitness # {'random_fitness': 34}
mol3.fitness # 2
mol3.unscaled_fitness # {'random_fitness': 22}
The method GAPopulation.normalize_fitness_values()
automatically
copies the fitness value from MacroMolecule.unscaled_fitness
into MacroMolecule.fitness
before applying any normalization
functions. A fitness function is only applied once per molecule,
because the result depends only on the molecule. However, normalization
functions are re-applied every generation. This is because for some
normalization functions, the returned value for a molecule may also
depend on the other molecules in the population. At each generation,
a fresh copy of the value from MacroMolecule.unscaled_fitness
is made into MacroMolecule.fitness
. This means that the
normalization functions always start from the unscaled fitness value.
Extending stk: Adding fitness functions.¶
To add a new fitness function simply write it as a function in this
module. It will need to take the MacroMolecule
instance as
its first argument and this argument should be called macro_mol. The
purpose of this is to help users identify which arguments are handled
automatically by stk
and which they need to define in the input
file. The convention is that if the fitness function takes an argument
called macro_mol, they do not have to specify that argument in the
input file.
A fitness function must return the value which represents the fitness of the molecule macro_mol. If a fitness function is meant to be paired with a normalization function it can return any value or object it likes. Just as long as the normalization functions know how to deal with it and convert it to a number.
def random_fitness(macro_mol):
return abs(np.random.normal(50, 20))
Obviously, this is a just toy example but all the key components of fitness functions are there. More complex fitness functions can take an arbitrary number arguments, and will likely use molecular properties to calculate a fitness value. Here is a fitness function which rewards molecules for having a desired size.
def size(macro_mol, desired_size):
return abs(macro_mol.max_diameter() - desired_size)
A fitness function may be complex and may not fit neatly into a single
function. For example, the cage_target()
needs to call
_generate_complexes()
in order to sample various conformations
before outputting a fitness value. This is fine. Define helper
functions such as _generate_complexes()
within this module but
make sure they are private. This means that names of helper functions
begin with a leading underscore.
A note on plotting.¶
As mentioned before, some fitness functions may be complex and as a
result manipulate all sorts of data. Typically, in order to measure the
progress of a GA, the fitness values in the population are tracked
across generations. However, let’s say that some hypothetical fitness
function also calculates the energies of molecules. It may be quite
interesting plot the evolution of energies across generations too, even
if the energy is not directly reflect in the final fitness value. If
this is the case, the fitness function may assign to the
MacroMolecule.progress_params
attribute of macro_mol,
def example_func(macro_mol):
mol_energy = macro_mol.energy.some_energy_func()
macro_mol.progress_params['example_func'] = [mol_energy]
...
Now a plot showing the change in mol_energy
across generations will
be made too, along with the plot showing the changes in fitness.
What if two things are needed to be kept track of? Simple,
def example_func(macro_mol):
mol_energy = macro_mol.energy.some_energy_func()
mol_radius = macro_mol.max_diamater() / 2
macro_mol.progress_params['example_func'] = [mol_energy,
mol_radius]
...
Great, now a separate progress plot mol_energy
and mol_radius
will be made.
How will the y-axes be labelled in each plot? The decorator
_param_labels()
exists for this.
Let’s create a basic outline of a some fitness function:
@_param_labels('Molecule Energy / J mol-1', 'Mol Radius / m-9')
def some_fitness_fn(macro_mol, some_param):
...
calculate_stuff()
...
macro_mol.progress_params['some_fitness_fn'] = [mol_energy,
mol_radius]
...
return fitness_value
If this function is used in the GA, a progress plot will be made for
each variable placed in MacroMolecule.progress_params
and
they will have their y-axes labelled 'Molecule Energy / J mol-1'
and 'Molecule Radius / m-9'
, respectively.
-
class
stk.ga.fitness.
_FitnessFunc
(func)¶ Bases:
object
A decorator for fitness functions.
This decorator is applied to all fitness functions automatically in
_calc_fitness()
. It should not be applied explicitly when defining the functions.The decorator prevents fitness functions from raising if they fail (necessary for
multiprocessing
compatibility), prevents them from being run twice on the same molecule and stores the value returned by them inMacroMolecule.unscaled_fitness
.
-
stk.ga.fitness.
_c60_rotations
(macro_mol, c60, n5fold, n2fold)¶ Rotates C60 about its axes of symmetry while placed in macro_mol.
Parameters: - macro_mol (
MacroMolecule
) – The cage which should have C60 placed inside it. - c60 (
StructUnit
) – A StructUnit instance of C60. - n5fold (
int
) – The number of rotations along the 5-fold axis of symmetry. - n2fold (
int
) – The number of rotations along the 2-fold axis of symmetry per rotation along the 5-fold axis.
Yields: rdkit.Chem.rdchem.Mol
– Anrdkit
instance holding the cage / C60 complex.- macro_mol (
-
stk.ga.fitness.
_cage_target
(func_name, macro_mol, target, efunc, ofunc, rotation_func, dihedral_SMARTS, target_dihedral)¶ A general fitness function for calculating fitness of complexes.
This function should be wrapped by other fitness functions which define their own rotation function. For example
cage_c60()
andcage_target()
.The function returns a fitness vector consisting of:
- binding energy
- cavity of cage in complex
- asymmetry of cage in complex
- strain of cage in complex
- cavity of cage by itself
- asymmetry of cage by itself
- strain of cage by itself
- strain in select dihedral angles of the cage by itself
Parameters: - func_name (
str
) – The name of the external fitness function calling this one. Used for the key inprogress_params
. - macro_mol (
Cage
) – The cage which is to have its fitness calculated. - target (
StructUnit
) – A molecule to be placed inside the cage cavity. - efunc (
FunctionData
) – AFunctionData
object representing the energy function used to calculate energies. - ofunc (
FunctionData
) – AFunctionData
object representing the optimization function to be run on the generated complexes. - rotation_func (
FunctionData
) – AFunctionData
object representing the rotation function to be used. - dihedral_SMARTS (
str
, optional) – The SMARTS code for the dihedral of interest. - target_dihedral (
float
, optional) – The target value for the dihedral angle.
Returns: The numpy array holding the fitness vector.
Return type: numpy.ndarray
Raises: ValueError
– If the calculation of a fitness parameter fails.
-
stk.ga.fitness.
_calc_fitness
(func_data, population, processes)¶ Calculates the fitness values of all members of a population.
Parameters: - func_data (
FunctionData
,function
) –A
FunctionData
instance representing the chosen fitness function and any additional parameters it may require.Alternatively, it can be a function which takes 1 argument: the molecule whose fitness is to be calculated.
- population (
GAPopulation
) – The population whose members must have their fitness calculated. - processes (
int
) – The number of parallel processes to create.
Returns: None
Return type: NoneType
- func_data (
-
stk.ga.fitness.
_calc_fitness_serial
(func_data, population)¶ Calculates the fitness values of all members of a population.
Parameters: - func_data (
FunctionData
,function
) –A
FunctionData
instance representing the chosen fitness function and any additional parameters it may require.Alternatively, it can be a function which takes 1 argument: the molecule whose fitness is to be calculated.
- population (
GAPopulation
) – The population whose members must have their fitness calculated.
Returns: None
Return type: NoneType
- func_data (
-
stk.ga.fitness.
_generate_complexes
(macro_mol, target, number=1)¶ Yields
rdkit
molecules of cage / target complexes.If multiple complexes are returned, they will be different via a random rotation accross the x, y and z axes.
Parameters: - macro_mol (
Cage
) – The cage used to form the complex. - target (
StructUnit
) – The target used to form the complex. - number (
int
, optional) – The number of complexes to be returned.
Yields: rdkit.Chem.rdchem.Mol
– Anrdkit
instance holding the cage / target complex.- macro_mol (
-
stk.ga.fitness.
_make_cage_target_folder
()¶ Creates a folder to store molecules made by
_cage_target()
.The function creates a folder called
cage_target
. Inside will be any complexes formed by the_cage_target()
. The folder will be placed in the current working directory, or if the GA is running, 1 above the current working dirctory. This prevents the generated molecules from being cleaned up by the GA when it’s finished.Returns: The path of the cage_target
folder.Return type: str
-
stk.ga.fitness.
_param_labels
(*labels)¶ Adds the
param_labels
attribute to a fitness function.The point of this decorator is described in A note on plotting..
Parameters: *labels ( str
) – This function takes an arbitrary number of strings. The strings are the y-axis labels for each graph made per variable inMacroMolecule.progress_params
. The order of strings must correspond to the order of variables placed intoMacroMolecule.progress_params
.Returns: The decorated function, with the attribute param_labels
added.param_labels
holds the strings provided in *labels.Return type: function
Examples
@_param_labels('ONE', 'TWO', 'THREE') def some_func(...): return 1 some_func.param_labels # ['ONE', 'TWO', 'THREE']
-
stk.ga.fitness.
building_block_atoms
(macro_mol)¶ Returns the number of atoms in the molecule.
Parameters: macro_mol ( MacroMolecule
) – The molecule having its fitness calculated.Returns: The number of atoms in macro_mol. Return type: int
-
stk.ga.fitness.
cage
(macro_mol, pseudoformation_params={'func': FunctionData('rdkit', forcefield='mmff')}, dihedral_SMARTS='', target_dihedral=180)¶ Returns the fitness vector of a cage.
The fitness vector consists of the following properties in the listed order
- cavity - the diameter of the cage pore.
- window - the diameter of the largest cage window.
- asymmetry - the sum of the size differences of all the windows in macro_mol.
- eng_per_bond - The formation energy of macro_mol per bond made.
- prec_strain - The mean rmsd between the free building block and those in the macromolecule.
- dihedral_strain - The % relative difference between the average dihedral angle within the molecule and a target value. The user must provide the SMARTS for the dihedral and the target value.
Parameters: - macro_mol (
Cage
) – The cage whose fitness is to be calculated. - dihedral_SMARTS (
str
, optional) – The SMARTS code for the dihedral of interest. - target_dihedral (
float
, optional) – The target value for the dihedral angle. - pseudoformation_params (dict, optional) – This fitness function calculates the formation energy using
Energy.pseudoformation()
. This parameter defines the arguments passed to this method via a dictionary. The name of the argument is the key and the value of the argument is the value.
Returns: The numpy array holding the fitness vector.
Return type: numpy.ndarray
Raises: ValueError
– If the calculation of a fitness parameter fails.
-
stk.ga.fitness.
cage_c60
(macro_mol, c60, efunc, ofunc, n5fold, n2fold, dihedral_SMARTS='', target_dihedral=180)¶ Calculates the fitness vector of a cage / C60 complex.
The difference between this function and
cage_target()
is that the rotations are specifically aimed at sampling C60 entirely and systematically. Rather than the random sampling used by the other function.The function returns a fitness vector consisting of:
- binding energy
- cavity of cage in complex
- asymmetry of cage in complex
- strain of cage in complex
- cavity of cage by itself
- asymmetry of cage by itself
- strain of cage by itself
- strain in select dihedral angles of the cage by itself
Parameters: - macro_mol (
Cage
) – The cage which is to have its fitness calculated. - c60 (
StructUnit
) – A C60 molecule to be placed inside the cage cavity. - efunc (
FunctionData
) – AFunctionData
object representing the energy function used to calculate energies. - ofunc (
FunctionData
) – AFunctionData
object representing the optimization function to be run on the generated complexes. - n5fold (
int
) – The number of rotations along the 5-fold axis of symmetry. - n2fold (
int
) – The number of rotations along the 2 fold axis of symmetry per rotation along the 5-fold axis. - dihedral_SMARTS (
str
, optional) – The SMARTS code for the dihedral of interest. - target_dihedral (
float
, optional) – The target value for the dihedral angle.
Returns: The numpy array holding the fitness vector.
Return type: numpy.ndarray
Raises: ValueError
– If the calculation of a fitness parameter fails.
-
stk.ga.fitness.
cage_target
(macro_mol, target, efunc, ofunc, dihedral_SMARTS='', target_value=180, rotations=0)¶ Returns the fitness vector of a cage / target complex.
The target is randomly rotated inside the cage’s cavity and the most stable conformation found is used.
The function returns a fitness vector consisting of:
- binding energy
- cavity of cage in complex
- asymmetry of cage in complex
- strain of cage in complex
- cavity of cage by itself
- asymmetry of cage by itself
- strain of cage by itself
- strain in select dihedral angles of the cage by itself
Notes
This function modifies macro_mol. It places the calculated fitness parameters into
progress_params
.Parameters: - macro_mol (
Cage
) – The cage which is to have its fitness calculated. - target (
StructUnit
) – A molecule to be placed inside the cage cavity. - efunc (
FunctionData
) – AFunctionData
object representing the energy function used to calculate energies. - ofunc (
FunctionData
) – AFunctionData
object representing the optimization function to be run on the generated complexes. - dihedral_SMARTS (
str
, optional) – The SMARTS code for the dihedral of interest. - target_value (
float
, optional) – A number representing the target value for the dihedral angle. - rotations (
int
, optional) – The number of times the target should be randomly rotated within the cage cavity in order to find the most stable conformation.
Returns: The numpy array holding the fitness vector.
Return type: numpy.ndarray
Raises: ValueError
– If the calculation of a fitness parameter fails.
-
stk.ga.fitness.
partial_raiser
(macro_mol)¶ Calculates fitness or raises at random.
Parameters: macro_mol ( MacroMolecule
) – The molecule having its fitness calculated.Returns: The result of applying random_fitness_vector()
to macro_mol.Return type: numpy.ndarray
Raises: Exception
– Raised at random.
-
stk.ga.fitness.
raiser
(macro_mol, param1, param2=2)¶ Doens’t calculate a fitness value, raises an error instead.
This function is used for tests to ensure that when fitness functions raise errors, they are handeled correctly.
Parameters: - macro_mol (
MacroMolecule
) – The molecule having its fitness calculated. - param1 (
object
) – Dummy parameter, does nothing. - param2 (
object
, optional) – Dummy keyword parameter, does nothing.
Returns: None – This function does not return. It only raises.
Return type: NoneType
Raises: Exception
– An exception is always raised.- macro_mol (
-
stk.ga.fitness.
random_fitness
(macro_mol)¶ Returns a random fitness value.
Parameters: macro_mol ( MacroMolecule
) – The molecule for which a fitness value is to be calculated.Returns: A random postive number. Return type: float
-
stk.ga.fitness.
random_fitness_vector
(macro_mol)¶ Returns a 4 element array of random numbers.
Notes
This function places the array into
progress_params
of macro_mol.Parameters: macro_mol ( MacroMolecule
) – The molecule for which a fitness value is to be calculated.Returns: An array holding the 4 random numbers. Return type: numpy.ndarray


About Us
The Rice University Computer Science Club is an organization dedicated to providing Rice students with an informational and social network of individuals interested in computer science. We provide professional resources, including resume review sessions, interview preparation, and weekly lunch talks by Rice faculty and industry insiders. We also foster community among computer science students by way of club-hosted study breaks, random outings, and social lunches.
Our club faculty advisor is {{ faculty_sponsor.name }}.
Sounds Interesting?
First things first: sign up for our club mailing list. We use it to announce club events, job opportunities, and other computer science-related happenings.
While you're here, be sure to check out our weekly Lunch and Learn Series schedule and other events we have coming up.
Finally, if you have any suggestions for cool things for the club to do (whether for career development or just something fun), then please contact us!


Toggle Menu
Neural Networks
Keras Demos (Use chrome for optimal experience)
Convolutional Networks tutorial
Learn Neural Networks
Darknet
Python Libraries - Tools
NumPy (pip install numpy)
Pandas (pip install pandas)
matplotlib (pip install matplotlib)
Seaborn (pip install seaborn)
scikit-learn (pip install -U sklearn)
Jupyterlab (pip install -U jupyterlab)
Orange data mining (pip install pyqt5 PyQtWebEngine orange3)
Tensorflow
Tensorflow
Tensorflow Playground
Awesome Tensorflow
Github jupyter notebooks
Python Data Science Handbook
Hands-on Machine Learning with tensorflow
Machine Learning
Neurohive
Towards Data Science
KDnuggets
Varius Python libraries for machine learning
OpenAI
OpenML
DataElixir
DatascienceWeekly
Google AI
Online tools
Google Colaboratory
kaggle
Data to download
Academic Torrentsy
Google Dataset Search
Quantumstat Datasets
Awesome Public Datasets
ImageNet


24 Feb 1955
Steven Paul was born in San Francisco, the son of Abdulfattah Jandali and Joanne Schieble. He is quickly adopted by Paul and Clara Jobs
Steven Paul was born in San Francisco, the son of Abdulfattah Jandali and Joanne Schieble. He is quickly adopted by Paul and Clara Jobs
The Jobs family moves from San Francisco to Mountain View, a suburban town in Santa Clara county, more famous under the name Silicon Valley
13-year-old Steve Jobs calls up Bill Hewlett and gets a summer job at the HP factory
Steve Jobs meets Steve Wozniak, 5 years older, through a mutual friend. Woz and Steve share a love of electronics, Bob Dylan, and pranks
Phone Phreaks
Steve and Woz build and illegally sell 'blue boxes' that allow to make phone calls for free
Steve spends the fall semester at Reed College, Oregon, then drops out. He will stay on campus and attend the classes that interest him for a while, then move to a hippie commune
Steve gets his first job at video game maker Atari, and later makes a trip to India to 'seek enlightenment' with his college friend Dan Kottke
Woz and Steve show the early Apple I board at the Homebrew Computer Club
Apple Computer Inc. is incorporated by Steve Jobs, Steve Wozniak and Ron Wayne
Steve and Woz start assembling Apple I computers in the Jobses' garage, and sell them to computer hobbyists, including 50 for the Byte Shop
Steve Jobs and Woz show off the Apple I at the Personal Computing Festival in Atlantic City, with help from Dan Kottke
Former Intel executive turned business angel Mike Markkula invests in Apple and hires former colleague Mike Scott as CEO. Woz is forced to leave HP to join Apple full time
West Coast Computer Faire
Apple makes a huge sensation at the West Coast Computer Faire with a prototype Apple II
The Apple II becomes the first mass-market personal computer, with impressive sales around the US. Apple becomes a symbol of the personal computing revolution. At the company, work starts on the Apple III and the Lisa, while Jef Raskin begins writing The Book of Macintosh.
Steve's ex-girlfriend Chris-Ann Brennan gives birth to their daughter Lisa. Steve refuses to acknowledge he is the father
Sales of Apple II skyrocket after pioneer spreadsheet software Visicalc is introduced
Steve Jobs is shown the first working graphical user interface at Xerox PARC
Jef Raskin's Macintosh project is green-lighted. Lisa evolves into a GUI-computer, in part because of Steve Jobs' demands
Apple launches the Apple III, which will prove a disastrous flop
Apple goes public, increasing Steve Jobs' net worth from dozens of millions of dollars to over $200 million
Jef Raskin is forced out of his Macintosh project as Steve Jobs takes over
Black Wednesday: 50 Apple employees laid off by CEO Mike Scott without notice. The board asks him to leave shortly afterwards. Mike Markkula becomes interim CEO
IBM launches the IBM PC, the biggest threat to Apple's future yet
Rise to Fame
A portrait of Steve Jobs ends up on the cover of Time Magazine, under the title 'Striking it Rich'. Steve trusts Time correspondent Michael Moritz to follow him on the Mac team for months, hoping to become Man of the Year
Time instead makes The Computer 'machine of the year' and publishes a hatchet job on Steve Jobs, who becomes furious and suspicious of journalists for the rest of his life
Launch of the Lisa computer. The Lisa team later merges with the Mac team under Steve Jobs's leadership
PepsiCo CEO John Sculley becomes Apple's CEO after having been wooed by Steve Jobs for several months
"Hello, I am Macintosh"
Macintosh is launched in great fanfare at Apple's annual shareholder meeting
Steve Jobs celebrates his 30th birthday with Ella Fitzgerald as guest singer for the night
Palace coup: Apple's board sides with John Sculley and strips Steve off all executive duties
Alan Kay first introduces the Pixar team to Steve Jobs
Steve Jobs resigns from Apple and starts NeXT with five other refugees from Apple.  A couple months later, Steve discovers his biological mother Joanne and his sister, novelist Mona Simpson. They will become very close
Jobs buys the computer division of George Lucas' ILM for $10 million and incorporates it as Pixar
Pixar unveils John Lasseter's short film Luxo Jr. at SIGGRAPH. It is praised by the expert audience as one of the first computer-animated work of art
Ross Perot invests $20 million in NeXT, based on a $125 million valuation. The startup has still to release a product
NeXT and IBM form a partnership to have NeXT's system run on IBM machines
NeXT Cube Introduction
Steve Jobs introduces the NeXT Cube in San Francisco to great critical acclaim, pitching it as a workstation for higher education
Pixar launches its new computer graphics workstation, the Pixar Image Computer II, and starts working on the RenderMan computer animation software
At SIGGRAPH, Pixar releases its new short Tin Toy. It will end up winning 1988's Academy Award for Best Animated Short Film
NeXT partners with retailer Businessland to sell to corporate America in addition to higher ed
Steve Jobs is named 'Entrepreneur of the decade' by Inc. magazine
Steve shuts down all of Pixar's hardware operations
Canon invests $100 million in NeXT, now valued at $600 million
Steve introduces the cheaper NeXTstation in San Francisco, to boost the modest sales of NeXT hardware
Steve Jobs fires almost half of Pixar's staff and takes back all of the employees' stock in an effort to cut costs, as the company is still in the red 5 years after its launch
Wedding
Steve marries Laurene Powell in Yosemite under the blessing of Steve's old zen guru Kobin Chino. Laurene is already pregnant
Pixar signs a deal with Disney to make a computer-animated feature film
Laurene gives birth to Steve's second child and only son, Reed Paul Jobs
NeXT licenses its operating system, NeXTSTEP, to run on x86 machines
NeXT fires 300 employees as it discontinues all its hardware operations and becomes NeXT Software Inc. This is the nadir of Steve's career
NeXT COO Peter Van Cuylenburg betrays Steve Jobs by trying to have the company bought by its giant competitor Sun. Sun CEO Scott McNealy warns Steve Jobs instead
Steve's father, Paul Jobs, dies
Jeffrey Katzenberg puts a halt to the development of Toy Story because of creative disagreements
Pixar resumes work on Toy Story
Steve starts focusing less on NeXT and more on Pixar before Toy Story is released. He becomes President & CEO of Pixar Animation Studios
Laurene gives birth to Erin Siena Jobs, her second child with Steve
Pixar IPO
One week after Toy Story is out, Pixar goes public. Steve Jobs's worth rises to $1.5 billion, more than it ever was during his first tenure at Apple
Steve's biological sister Mona Simpson publishes her third novel, A Regular Guy, whose main character Tom Owens is largely based on her brother
Steve Jobs negotiaties a breakthrough deal between Pixar and Disney with its CEO Michael Eisner. The deal includes landmark rights for a studio, such as equal billing
Apple, which was desperately looking for a modern operating system to buy, eventually buys NeXT for $400 million. Steve Jobs is named "informal adviser" to Apple CEO Gil Amelio
Gil Amelio is ousted by the Apple Board of directors after a disastrous quarter. Steve Jobs is named interim CEO in his place and installs his NeXT executive team at the top of Apple
Steve Jobs introduces Apple's new board of directors and a truce with Microsoft at Macworld Boston
Apple starts its Think Different campaign to restore its damaged brand image. The new slogan will quickly enter popular culture and define the company for the next five years
At Macworld San Francisco, Steve Jobs announces that Apple is profitable again, thanks to sales of the new Power Macintosh computers
Eve Jobs, Laurene and Steve's youngest daughter, is born
Say hello to iMac
Steve Jobs introduces Apple's revolutionary iMac at the Flint Center auditorium in Cupertino, 14 years after he had introduced the Macintosh at that same place
Steve Jobs introduces the new Power Mac G3 and the color iMacs at Macworld San Francisco
Pirates of Silicon Valley, a TV movie starring Noah Wyle as young Steve Jobs, airs
The original iBook is unveiled at Macworld New York with the tagline iMac to go. Steve Jobs invites Noah Wyle on stage to impersonate him again
Introduction of the iMac DVs and of iMovie, the first of Apple's first Digital Hub app
Steve Jobs becomes Apple CEO
At Macworld San Francisco, Steve Jobs drops the 'interim' in his title and officially becomes Apple's CEO. He also demoes Mac OS X's revolutionary Aqua interface to a bewildered audience
The Power Mac G4 Cube is unveiled at Macworld NY. It will be discontinued one year later because of disappointing sales
Steve Jobs unveils Apple's Digital Hub Strategy at Macworld: the Mac is to become the center of consumers' emerging digital lifestyles
After four years of hard work, Mac OS X 10.0, the new incarnation of NeXTstep, ships
Apple opens its first Retail Stores in Tysons Corner, Virginia and Glendale, California
A Thousand Songs. In Your Pocket
After an 8-month crash development program, Steve Jobs unveils iPod at a small media event on the company's campus. He has no idea how it will tranform Apple
Steve unveils the iMac G4 and the fourth iApp, iPhoto, at Macworld San Francisco
Apple starts its popular 'Switch' campaign with ads picturing PC users that switched to the Mac
Steve Jobs introduces the first Windows-compatible iPods at Macworld NY
Apple opens the revolutionary online iTunes Music Store in the US, after negotiating landmark deals with all major music labels
Opening day of Finding Nemo, Pixar's first Best Animated Feature Academy Award winner
Following increasing tension with Michael Eisner, Steve Jobs announces that Pixar is seeking a new distributor to replace Disney after its contract expires
Steve Jobs unveils the Power Mac G5, the world's fastest computer, at WWDC
The iPod Revolution
"The day hell froze over": Steve Jobs introduces iTunes for Windows and further demonstrates Apple's growing lead over its competitors in the digital music business
Steve Jobs is diagnosed with pancreatic cancer, but stubbornly refuses any modern medical treatment for months. He tries alternative diets instead
Steve unveils the iPod mini and the iLife suite at Macworld. The iPod mini will soon become the world's best-selling MP3 player and truly establish Apple as a consumer electronics powerhouse
Steve Jobs finally has his pancreatic tumor removed by surgery
At Macworld San Francisco, Steve Jobs unveils Apple's productivity suite iWork, the new Mac mini, and the iPod shuffle, the cheapest iPod ever at $49
Steve turns 50 years old
Mac OS X 10.4 Tiger is released. A stable, fast release, it is immensely popular and marks the end of the four-year transition from the old Mac OS to UNIX-based Mac OS X
At WWDC 2005, Steve Jobs announces that Apple is going to switch away from Motorola's and IBM's PowerPC architectures, and use Intel processors in its future Macs instead. This move will further help the growing adoption of the Mac
Stay Hungry, Stay Foolish
Steve Jobs makes a memorable commencement speech at Stanford University. History will remember its closing remarks, Steve's advice to the young students: 'Stay hungry, stay foolish', a quote from the last page of the Whole Earth Catalogue from his youth
Steve introduces the Motorola ROCKR, an iTunes-compatible cell phone, and the iPod nano
Steve Jobs invites Disney's new CEO Bob Iger on stage at an Apple Music Event where he also introduces the new iPod videos and the iTunes movie store
Steve Jobs unveils the first two Intel Macs at Macworld, the iMac and the new MacBook Pro
Disney buys Pixar
The Walt Disney Company acquires Pixar for $7.4 billion. Pixar's largest shareholder Steve Jobs joins the Disney board while Ed Catmull becomes president of the Walt Disney Animation Studios, and John Lasseter its chief creative officer. Just before the announcement, Jobs secretly told Disney CEO Bob Iger that his cancer had returned
Apple releases its first living-room product, the iPod hi-fi, discontinued a year and a half later
Steve Jobs announces Apple's intention to erect a second campus in Cupertino
Apple starts its famous 'Mac vs PC' campaign, a series of TV commercials featuring Justin Long as Mac and John Hodgman as PC. The campaign will last for three years and mark popular culture
Apple completes the transition of its entire product line to the Intel platform with the new Mac Pro
Welcome to iPhone
In his most memorable keynote presentation ever, at Macworld 2007, Steve Jobs introduces iPhone and its revolutionary touch-screen interface. He also introduces Apple TV and announces the company's name change from Apple Computer Inc. to Apple Inc. to better reflect its new nature
The SEC files charges against Apple's Nancy Heinen and Fred Anderson for options backdating
iPhone is released in the US, the same day as Pixar's 8th feature film, Ratatouille
Steve Jobs is inducted in the California Hall of Fame by Gov. Schwartzenegger
At Macworld 2008, Steve Jobs introduces MacBook Air, with the tagline 'the world's thinnest notebook'. Three years later, it will come to redefine all of Apple's notebook product line
The App Revolution
Apple announces it will open the iPhone platform to outside developers with the App Store. VC fund KPCB starts iFund to invest in the new mobile app economy that they (rightly) believe will sprout from it
The press starts speculating about Steve Jobs's health as he appears very thin to unveil the iPhone 3G with an entry price of $199 on stage at WWDC
The SEC clears Steve Jobs of any responsibilities in the options backdating scandal
Apple starts its popular 'There's an app for that' campaign to illustrate the growing popularity of the App Store and the thousands of iPhone apps it offers
Steve Jobs announces he will not speak at Macworld 2009 because of his health, and takes a six-month medical leave of absence
Steve receives a liver transplant at the Methodist University Hospital in Memphis, Tennessee. He was weeks away from dying when he got the surgery
Google CEO Eric Schmidt leaves Apple's board because of conflicting interests due to Android
Apple releases Mac OS X 10.6 Snow Leopard, stripped off any code from the original Mac OS
Back at Apple, Steve Jobs makes the first public appearance after his transplant to introduce new iPods at the 'It's Only Rock'N'Roll' event
iPad Introduction
After months of wild rumors, Steve Jobs unveils iPad, 'the biggest thing Apple's ever done'. The tablet runs the same operating system as iPhone
One month after the release of the new iPhone 4, Steve Jobs holds a press conference to address the smartphone's supposed reception issues, the so-called 'Antennagate'
Jobs surprises the world by announcing his new medical leave of absence, without any end date
Despite his medical leave, Steve Jobs takes the stage to unveil the new iPad 2
The Last Keynote
At his last keynote at WWDC 2011, a freil Steve Jobs unveils Apple's cloud offering, iCloud, the foundation for the next decade of Apple products
Steve Jobs appears at the Cupertino City Council to unveil Apple's plans for its new 'Spaceship' campus. This is his last public appearance
Steve Jobs resigns as CEO of Apple, with the words 'I have always said if there ever came a day when I could no longer meet my duties and expectations as Apple's CEO, I would be the first to let you know. Unfortunately, that day has come.' Tim Cook becomes Apple CEO
Steve Jobs dies at home, surrounded by his family
A private service is held at Stanford University's Memorial Church in memory of Steve Jobs, attended by many of his friends, former colleagues and industry peers
After two years of work, and forty interviews with Steve Jobs, Walter Isaacson publishes his authorized biography of the Apple and Pixar co-founder, simply named Steve Jobs
See more information at Wikipedia


Will you add list of ship types that can equip each item?
Here it is. it's accurately computed with game data, except several special cases.
Some rarity stars are wrong?
Nope, these are taken from game data, and I didn't specify each one so it can't possibly be wrong. Rarities must have changed between the time they made the icons and the present.
Why the names of types are in Japanese? What do those numbers mean?
Some of them are from original game master data, some of them might be still untranslated or undefined.
The 5 numbers are also type identities of game data, stand for: category type, card type, equip type, icon type, aircraft image type. The names are the first 3 types in reversed order.
Why can not find stats of interception and anti-bomber from Interceptor Fighter?
They are reusing names of existed stats in oginal game master data, which
hit accuracy represents the
Anti-Bomber power,
evasion represents the
Interception power.
What do those unfamiliar icons mean?
- Combat radius of LBAS.
- Bauxite cost on LBAS deployment, = Base cost x Squadron slot size.
- Indicates if this dive bomber is able to target land-installation.
- Indicates if this aircraft is able to resist Anti-Air fire.


genetic using population Information data southern Molecular flavipes mtDNA Supporting used .–. species Central DNA Figure distributional phylogeographic Table cluster range Evolution, divergence time {border-style Northern number Appalachian Bayesian history px;} sequence #ffffff;} ABC Ecology, S.). distribution scenarios structure Reticulitermes analyses hypotheses model size variation Southern climate (Figure (Supporting North distributions estimated hypothesis shift spatial Pleistocene areas climatic diversity habitat populations rate values United based best‐fit changes environmental nDNA nucleotide occurrence performed shifts study (i.e., Genetic States analysis expansion geographic role COII Garrick, LGM change colonization considered eastern evidence glacial‐interglacial historical locations mean new past refugia scenario sites variables (see ./j.-X...x COI Section Step assessed diverged environment evolutionary flavipes, region subterranean suitable termites Biology Biology, Indeed, LIG SDMs central data. estimate factors following likely locus million mutation patterns px; simulated stability {font-family —Step America America, Appalachians BEAST Carstens, DS: Drummond, Ecology Knowles, Mountains Nei, S.), Science Smith, Statistical University additional alternative complex dispersal effective error font-size high ice identified included inferred major mitochondrial molecular montane probability southeastern successive tests tree variation. vicariance years (a) (b) ./j.-...x ./j.ympev... BAPS Bioinformatics, Bond, Coast European Evolutionary Genetics, However, National Phylogenetics Proceedings Society cluster, clusters compared computation conditions consequences data, determine different differentiation double; forest groups growth haplotypes inferences influence influenced kya; large long‐term models multiple order references refugial second segregating sequences showed significant software structuring taxa temperate testing threshold v... work −.* Academy American Anderson, Department Distribution Distributional Furthermore, Hedin, Hyseni, Jones, Liu, Phylogeography Posterior Principal Quaternary Reviews, Sciences Vargo, White, Wood, approximate bold border-color border-width broad collected colony competing contained differences edge effects empirical examined explained fluctuations glacial identify observed obtained original parameters phylogeography plausible posterior priors rates red regions relatively repeatedly sampled set sets solid; spatial‐genetic systems this, tier tier, type unglaciated versus {font-style {font-weight (C) (Hewitt, (e.g., (one‐sample), ./pnas. ./s--- Accordingly, America. BMC Based Beaumont, Biogeography, CI: Estoup, Evidence Garrick Given Glacial Gulf Ho, J.‐M. LGM, Manos, Marek, Maximum McLachlan, Mountains, Newell, Phylogeographic Population Press. S.) SDMs, Similarly, Species Tajima, Thuiller, U.S. USA Weisrock, accounted addition approach areas. available average better bioclimatic biodiversity calculated choice close coalescent conservation contemporary contraction courier; demographic distances distinct drivers em; events expansions file. fine‐scale founder framework function generate generating geographically indicate inference key kya kya), lowest methods neutrality northern northward occurred package pairwise particularly period phylogenetic population, populations, portion present, process provided pt;} refer refugium represent revealed run salamander salamanders sampling secondary selection sheet signatures single site space statistics stepping‐stone studies study, subsequent subsequently support surrounding termite test therein). topographically understanding value variance −.#


Game Development and Morehttp://unseenstudios.com/community/
http://unseenstudios.com/community/viewtopic.php?f=32&t=892


Fast-paced, thrilling, full of uncertainty, hearthstone provides players lots of fun and relax. You can play it on PC, laptop, tablet, and even smartphone. Have fun wherever you go!
Learning the ruleIn every game, players would have 30 health points and 30 cards in your deck. Once a player's health points reach 0 point, the player loses the game. The 30 cards could be minions, spells, and weapons. Choose the best cards to make a powerful deck! And GOOD LUCK, You need it , really!
Continue


I'm focused on getting great people into government and keeping them there. Whether you're looking to start a career in public service or ascend into the Senior Executive Service, I can help you navigate the process and prepare for success.
Whether it's your first time thinking about federal employment, you’ve been trying to get "in" for years, or you're a current fed looking for the next rung in your career ladder. We’ll talk about your goals, assess your qualifications, find the right type of federal job for you, and create a plan to get you there.
Writing a federal resume is a unique process, and without a strong federal-style resume you won't get in the door. Based on your career path and what kinds of jobs you’re interested in, I will help you create an outstanding federal resume that will help get you the interview.
If you’re considering applying to SES jobs, having trouble getting interviews, or just want to take your application package from good to great, I will help you prepare a strong resume and ECQ package. While some companies offer generic "ECQ writing" for thousands of dollars, I work with you to help you write your own authentic ECQs.
Navigating USAJobs can be confusing and complex. I’ll explain how USAJobs works and help you understand the different types of positions, application methods, and job requirements you see listed there. We’ll also talk about your background and experience to make sure you’re applying for the right jobs.
Interested but not sure what to do next? Let’s talk! I’ll give you a complimentary overview of my services, answer your questions, and tailor a package that's right for you.
Connect on:
Jennifer Munz is a federal human resources expert and manager with a decade of experience helping public-sector and non-profit organizations recruit, train, and retain top talent.
Jennifer specializes in senior executive positions. She has worked in human resources for ten years, eight in the federal government, leading teams working on staffing, classification, performance management, political employment, and executive development. She has a unique perspective, having worked in large and small agencies with diverse missions and workforce profiles.
She holds a Bachelor of Arts degree in Political Science from Auburn University and a Master’s Degree in Organizational Management from the George Washington University.
Jennifer understands what kind of talent federal agencies are looking for, and how to position yourself to be the strongest possible candidate. Let her help you.
Let’s talk! I look forward to hearing from you.


Providence exchange Gateway Station
The Providence train station is a building that has a connective association with the surrounding dense kinetic movements carried throughout; this being the movement of trains, cars, and human beings. The goal of this project was to create an architecture that would express this dense movements, with the word “density” itself being the driver of the design.
Using folding as a method for spatial generation, this architecture dynamically follows the density of the movements by the visitors through out the site, finally opening up to Providence model space in the middle. This central space conveys a very mysterious impression revealing city views and programatic interior spaces. Simultaneously, the simple language of the folded form enables a tight connection between interior and exterior.
The structural integrity of the folds become more than a method of making, it became a driver of form and concept.


6.810 Engineering Interactive Technologies (fall 2021)
Lab 4: Sensing Input from a Touch Slider
You already built the circuit and wrote the code for the touch buttons on your music card. In this lab, you will build the circuit and write the code for the slider, which can then be used to control the volume of the music that is being played.
Steps:
- Build Slider Circuit
- Extend Microcontroller Code to Read Slider Segments
- Measure Min and Max Signal Thresholds
- Determine Which Slider Segments are Touched
- Determine Slider Value When One Slider Segment is Touched
- Determine Slider Value When Two Slider Segments are Touched
- Write Slider Value to Serial Port
- Add Slider to Card
- Connect Physical Music Card to Processing
Deliverables
At the end of the lab, upload to your student google drive:
- a photo of your slider circuit connected to the printed slider and the ESP microcontroller
- the Arduino code you wrote for Serial Communication of the slider value (.ino file format)
- the Processing code (.pde) of the music card application with the slider
- a short video (.mov or .mp4, max. 1 minute, 20MB or less) showing how you use the printed slider to adjust the volume
Help us Improve Class Materials for Lab4:
Please let us know if you had any trouble with the circuit or programming or if anything was confusing in the write up.
You can add your comments here.
Before you start
Join Slack Channels for 'Lab4' and your table number, e.g. 'Table3': Similar to last lab, please join the lab's slack channel and the channel with the table number you are sitting at.
(1) Build Slider Circuit
The first step is to build the circuit for the slider. Remember that the slider is just a bunch of touch buttons placed right next to each other. Thus, the circuit for each slider segment is the same as for a touch button.
One Sender Pin, Different Receiver Pins: When you wire up your slider segments, remember they can all use the same sender pin
but need a different receiver pin
. Refer to Lab 2 if you don't remember how this works.
Use 'TOUCH' Pins for Receiving: Remember to use the pins with TOUCHX
labels for better signal quality but do not use the one labeled pin0 (TOUCH1) as receiver (you can still use it as sender). Below is the ESP pin out
for your reference.
(2) Extend Microcontroller Code to Read Slider Segments
Read Slider Segment Signal Values: Once finished with the wiring, extend your Arduino code
to also read each slider segment's touch signal.
Plot each Signal Value to the Serial Plotter: Next, serial print the received touch signals
for each slider segment and look at them in the Serial plotter. To visualize only the slider touch signals in the serial plotter, you have to format the serial output in the same way as you did in lab 2:
sliderValue1, sliderValue2, sliderValue3, sliderValue4, sliderValue5 \\end of line
Below you can see the serial plotter output for individually touching each of the five slider segments one after another.
(3) Measure Min and Max Signal Thresholds
Discrete vs. Continuous Touch Detection: For the touch buttons
, we were merely interested if the button is touched or not. Thus, we converted the touch signal into a binary value 0 or 1
. For the slider
, we want to compute at which position on the slider the finger is, i.e. we want a continuous value
. This will allow us to more smoothly adjust the music volume rather than jumping from one discrete volume level to the next.
How can we detect where the finger is on the slider? To determine where the finger is on the slider, we need to detect how much of each slider segment is touched.
When looking at a slider segment signal in the Serial Plotter, you will notice that the value of a slider segment has a strong correlation with how much area of the slider segment is touched
, i.e. the more area your finger covers on the slider segment the higher the value is. Below, we are plotting the signal from the middle slider segment. You can see that the signal is first low because the finger is at the beginning of the slider and not touching the middle segment. As the finger moves towards the middle segment the signal goes up as the overlap area with the finger increases and then goes down once the finger passes it and the overlap area with the finger decreases again.
Before we can determine how much
a slider segment is touched, we need to do some preprocessing. You need to repeat the next steps for each slider segment individually
since they all have different noise levels and touch signal values due to slight inconstencies in the printing process.
Remove Noise: First, we want to distinguish between noise (i.e. small signal readings when the segment is not actually touched) and the value when the segment is barely touched. To find this minimum threshold
, open the Serial Plotter and slide with your finger over the slider. At some point, you will see that the values for the slider segment you want to measure are starting to increase. Write down the minimum value
which is consistently above the noise level. Repeat
this procedure for each slider segment and store the individual minimum values for each segment in your code.
Determine Max Value when Slider Segment is Fully Touched: Next, determine the maximum value
when the slider segment is fully touched with you finger, i.e. your finger overlaps with the entire slider segment. Repeat
the procedure for each slider segment and store the value for each segment in your code.

Determine if Slider Segment is Touched: Write code to determine if a slider segment is touched or not, i.e. if it exceeds the minimum threshold
). We recommend that for debugging, you write the result to the serial monitor in the same format as you did in lab2. You can use 0,1,2,3,4 for the slider segment IDs
and 0 for not touched
and 1 for touched
.
(sensor ID),(is_touched);
A sample output for when the finger is over the first two slider segments should look like:
0,1;
1,1;
2,0;
3,0;
4,0;
(5) Determine Slider Value When One Slider Segment is Touched
Differentiate Between Touching 1 or 2 Slider Segments: Next, extend your code to differentiate between two different scenarios: (1) Only one slider segment is touched
at a time, or (2) two segments are touched
at the same time. For (2), we want to later interpolate between both slider segment values to determine the relative position of the finger, but let's start with the simple case of touching only one segment.
Assigning Slider Values Based on Which Segment in Touched: In case only one slider segment is touched, you can simply compute the discrete position
on the whole slider. Since you have 5 slider segments and your overall slider ranges from 0-1, you can assign a value of 0 when only the first slider segment is touched, 0.25 when only the second slider segment is touched, and so on. Plot the values to the Serial Monitor and see if you can get the correct value when you touch each slider segment individually.
(6) Determine Slider Value When Two Slider Segments are Touched
Now let's look at the more complicated case where the finger is in-between two slider segments. In this case we want to interpolate between both slider segment signals
to determine the relative position of the finger between the two segments.
Determine How Much Each Segment is Touched: Let's first determine how much each of the two segments is being touched. The best way to do this is to divide each slider segment signal by its max value
, which gives you the fraction that represents how much a slider segment was touched. You already recorded the max value in section (3). After computing the fraction, write the result to the Serial Monitor and see if the fraction increases as you touch more area of the slider segment.
Compute Relative Position of a Finger Between Two Slider Segments: Now that you know how much each slider segment is being touched, you can compute the relative position of the finger between the two slider segments. This will be a value between 0.0-1.0 where smaller values represent that more of the left slider segment is touched, and larger values represent that more of the right slider segment is touched. To determine the relative position, you need to compute the average between both values
. When computing the average, keep in mind that the left segment will drop in value
as the finger moves to the right, which you need to reflect in your formula for the average: ((1-frac1)+frac2)/2
. Write this value to the serial monitor and see if it increases as your finger slides from the left to the right on the two segments.
Scaling the Relative Position to the Slider Spacing: Remember that our slider spacing is in 0.25 increments, i.e. slider segment 1-2 cover a range of 0-0.25, slider segment 2-3 cover a range of 0.25 - 0.5 and so on. However, the relative position between two slider segments we just computed is a value from 0-1.0. We thus need to scale down this value to our slider segment spacing
by multiplying it with 0.25. For example, if we have a relative position of 0.5, which indicates that the finger is exactly in the middle, multiplying the relative position 0.5 by the slider spacing 0.25 gives us 0.125, which is in the middle between two slider segments.
Computing Overall Slider Value: Finally, you still have to add the scaled relative position, which will always be between 0.0 - 0.25, to the overall slider position
. All you need to do is to add this value to the discrete slider value of the segment that is touched first. For instance, if you have a relative position of 0.18 for slider segment 3 and 4, which cover a range of 0.5 - 0.75, all you need to do is to add this value to 0.5 and you receive an overall slider value of 0.68.
(7) Write Slider Value to Serial Port
Once you are ready, clean up what you write to the Serial Port. We only want to write the overall slider value to the Serial Port, not the individual slider segments, so we can later read the overall slider value into Processing. Assign the slider value the ID 3 since we already used ID 0, 1, and 2 for the touch buttons. The output should print continuously as long as the slider is touched.
(sensor ID),(slider_value);
(sensor ID) is 3, and represents the ID of the slider (we already used up sensor IDs 0, 1, 2 for the touch buttons).
(slider_value) is ranging from 0.0 to 1.0 to indicate the overall slider position.
Here is a sample output showing that the finger is moving from the left to the right on the slider:
3,0.78;
3,0.86;
3,0.97;
(8) Add Slider to Music Card
Before we use our physical slider to control the music volume, let's first implement a digital slider
to test the music volume functionality.
Add Slider to Code: Open the Processing music card code
from lab3. We already implemented a class Slider
for you. Add a new slider to the code in the draw()
function with:
mySliders.add(new Slider(start_x, start_y, end_x, end_y));
You should be able to control the slider by dragging your mouse with the left mouse button pressed
as shown below:
Create Slider Events to Control the Music Volume: Next, we want to increase the music volume when the slider is dragged to the right and decrease the music volume when the slider is dragged to the left. To create events on mouse drag,
we need to implement several mouseDragged() events
. A part of this is already done further down in the code. Extend the code so that it changes the music volume based on the slider level.
You might find the following functions from the Audio
and Slider
classes useful:
music.changeVolume(double intensity);
Slider.getIntensity();
Once you finished your code, test if the music volume changes by first playing a song with the digital note touch buttons and then dragging the slider to the left and right to adjust the music volume.
Hide the Slider: Similar to the previously added buttons, you can hide the slider
by pressing the 'h' key
on your keyboard while your program runs. If you want to see the slider again, press 's' for show
.
NOTE: on Windows you might experience an issue where Processing does not allow you to drag over the card to adjust the volume bar. The reason for this because Processing4 (for some odd reason) cannot detect the mouse click event when inside the mouseDragged()
method. So, statements such as mouseButton == LEFT
always return false. A similar issue is presented here.
A quick workaround is to do something similar to the third response on that post.
(9) Connect Physical Music Card to Processing
Now that you can control the slider digitally, you area ready to connect your physical slider
so you can also adjust the volume from your card.
Extend Serial Read Code to Slider: Extend your serial read
code to also read in the serial messages for the overall slider value
.
Use Physical Slider Value to Adjust Volume: Once you read in the value from the physical slider, use it to change the volume of the music
. Test if everything works by using your physical printed card to play/pause songs and the physical slider to adjust the music volume. If it works, congrats, you are done!
Deliverables
At the end of the lab, upload to your student google drive:
- a photo of your slider circuit connected to the printed slider and the ESP microcontroller
- the Arduino code you wrote for Serial Communication of the slider value (.ino file format)
- the Processing code (.pde) of the music card application with the slider
- a short video (.mov or .mp4, max. 1 minute, 20MB or less) showing how you use the printed slider to adjust the volume
Please let us know if you had any trouble with the circuit or programming or if anything was confusing in the write up.
You can add your comments here.
sliderValue1, sliderValue2, sliderValue3, sliderValue4, sliderValue5 \\end of line
(sensor ID),(is_touched);
0,1;
1,1;
2,0;
3,0;
4,0;
3,0.78;
3,0.86;
3,0.97;
mouseDragged()
method. So, statements such as mouseButton == LEFT
always return false. A similar issue is presented here.
A quick workaround is to do something similar to the third response on that post.


-
Color Balance
Modifies the colors balance of the image using the specified Red/Green/Blue values.
rgb=R,G,B
- The [R]ed value is a percent integer between -100 and 100.
- The [G]reen value is a percent integer between -100 and 100.
- The [B]lue value is a percent integer between -100 and 100.
Edecio MartinezSeth Casteel/LittleFriendsPhoto.comEdecio MartinezSeth Casteel/LittleFriendsPhoto.comEdecio MartinezSeth Casteel/LittleFriendsPhoto.com


We now take for granted testing as something that’s integral to the development cycle and indeed some testing has always been, but unit testing is relatively new to the whole...


Toggle navigation
Identity Server
Home
Support
Identity Generator
Enter yor details to generate your identity for use with NIMessages.
Name
Email
Password
Use this password to open the identity file.
Bit Size
Very High Grade
High Grade
Medium Grade
Low Grade
Generate


We will now try to explain more precisely the types of modules that FreeType 2 is capable of managing.
Renderer modules manage scalable glyph images. This means transforming them, computing their bounding box, and converting them to either monochrome or anti-aliased bitmaps.
Note that FreeType 2 is capable of dealing with any kind of glyph images, as long as a renderer module is provided for it. The library comes by default with two renderers.
|
raster |
Supports the conversion of vectorial outlines
(described by
an |
|
smooth |
Supports the conversion of the same outlines to anti-aliased pixmaps (using 256 levels of gray). Note that this renderer also supports direct span generation, this is, it provides a hook into the engine so that the application can manipulate the rendering results itself, instead of letting the rasterizer fill a pixmap. See this tutorial demo file for an example. |
Font driver modules support one or more specific font formats. Here is a list with the most important ones.
|
truetype |
TrueType fonts. |
|
type1 |
Postscript Type 1 fonts, both in binary (.pfb) or ASCII (.pfa) formats, including Multiple Master fonts. |
|
cid |
Postscript CID-keyed fonts. |
|
cff |
OpenType CFF and CFF2, bare CFF, and CEF fonts (CEF is a derivative of CFF used by Adobe in its SVG viewer). |
|
winfonts |
Windows bitmap fonts (i.e., .fon and .fnt). |
Note that font drivers can support bitmapped or scalable glyph images. A given font driver that supports Bézier outlines through FT_Outline can also provide its own hinter, or rely on FreeType's autofit module for auto-hinting.
Helper modules are used to hold shared code that is often used by several font drivers, or even other modules. The most important are as follows.
|
sfnt |
Support for font formats based on the SFNT storage scheme: TrueType, OpenType, as well as other variants (like TrueType fonts that only contain embedded bitmaps). |
|
psnames |
Various useful functions related to glyph name ordering and Postscript encodings and charsets. For example, this module is capable of automatically synthetizing a Unicode charmap from a Type 1 glyph name dictionary. |
|
psaux |
Auxiliary functions related to Postscript charstring decoding, as needed by the type1, cid, and cff drivers. |
Finally, the auto-hinter module (autofit) has a specific role in FreeType 2, as it can be used automatically during glyph loading to process individual glyph outlines when a font driver doesn't provide its own hinting engine.
A paper published in the EuroTeX 2003 proceedings, titled Real-Time Grid Fitting of Typographic Outlines, gives further insight into the auto-hinting system's inner workings.
We will now study how modules are described, then managed by the library.
Here is the definition of FT_Module_Class, with some explanations. The following code is taken from ftmodapi.h.
typedef struct FT_Module_Class_ { FT_ULong module_flags; FT_Int module_size; const FT_String* module_name; FT_Fixed module_version; FT_Fixed module_requires; const void* module_interface; FT_Module_Constructor module_init; FT_Module_Destructor module_done; FT_Module_Requester get_interface; } FT_Module_Class;
A description of its fields.
|
module_flags |
A set of bit flags to describe the module's category. Valid values are listed below.
|
|
module_size |
An integer that gives the size in bytes of a given module object. This should never be less than sizeof(FT_ModuleRec), but can be more if the module needs to sub-class the base FT_ModuleRec class. |
|
module_name |
The module's internal name, coded as a simple ASCII C string. There can't be two modules with the same name registered in a given FT_Library object. However, FT_Add_Module uses the module_version field to detect module upgrades and perform them cleanly, even at run-time. |
|
module_version |
A 16.16 fixed-point number giving the module's major and minor version numbers. It is used to determine whether a module needs to be upgraded when calling FT_Add_Module. |
|
module_requires |
A 16.16 fixed-point number giving the version of FreeType 2 that is required to install this module. The default value is 0x20000 for FreeType version 2.x |
|
module_interface |
Most modules support one or more ‘interfaces’, i.e., tables of function pointers. This field points to the module's main interface, if there is one. It is a short-cut that prevents users of the module to call get_interface each time they need to access one of the object's common entry points. Note that it is optional, and can be set to NULL. Other interfaces can also be accessed through the get_interface field. |
|
module_init |
A pointer to a function to initialize the fields of a fresh new FT_Module object. It is called after the module's base fields have been set by the library, and is generally used to initialize the fields of FT_ModuleRec subclasses. Most module classes set it to NULL to indicate that no extra initialization is necessary. |
|
module_done |
A pointer to a function to finalize the fields of a given FT_Module object. Note that it is called before the library unsets the module's base fields, and is generally used to finalize the fields of FT_ModuleRec subclasses. Most module classes set it to NULL to indicate that no extra finalization is necessary |
|
get_interface |
A pointer to a function to request the address of a given module interface. Set it to NULL if you don't need to support additional interfaces but the main one. |
The FT_Module type is a handle (i.e., a pointer) to a given module object or instance, whose base structure is given by the internal FT_ModuleRec type. We will intentionally not describe this structure here, as there is no point to look so far into the library's design.
When FT_Add_Module is called, it first allocates a new module instance, using the module_size class field to determine its byte size. The function initializes the root FT_ModuleRec field, then calls the class-specific initializer module_init when this field is not set to NULL.
Note that the library defines several sub-classes of FT_ModuleRec.
FT_Renderer for renderer modules
FT_Driver for font driver modules
FT_AutoHinter for the auto-hinter
Helper modules use the base FT_ModuleRec type.
Last update: 13-Feb-2018


Hi,
Followed the Raspian Wheezy install and get to the end with Emoncms up with Apps but cannot get nodes to appear despite checking all settings.
Pi with RF12 board and 2 TX_3 units and a THM but cannott make the list of nodes appear to setup the feeds etc.
Seperate Pi with 17 Jun image works fine with same RF12 modules and all setup no issues.
All help welcome as I wish to next get it all setup to save to HDD.
Alan
Extract from logs
tail -f /var/log/emonhub/emonhub.log2015-12-07 17:04:49,532 INFO emonCMS sending: 2015-12-07 17:35:05,677 INFO emonCMS sending: http://localhost/emoncms/input/bulk.json?apikey=E-M-O-N-C-M-S-A-P-I-K-E-Y&data=[[1449509705.51,7,644,0,0,0,24950,3000,3000,3000,3000,3000,3000,1,0]]&sentat=1449509705
2015-12-07 17:35:09,533 INFO emonCMS sending: http://localhost/emoncms/input/bulk.json?apikey=E-M-O-N-C-M-S-A-P-I-K-E-Y&data=[[1449509709.38,10,0,324,-3,0,24924,0]]&sentat=1449509709
2015-12-07 17:35:15,466 INFO emonCMS sending: http://localhost/emoncms/input/bulk.json?apikey=E-M-O-N-C-M-S-A-P-I-K-E-Y&data=[[1449509715.34,7,641,0,0,0,24924,3000,3000,3000,3000,3000,3000,1,0]]&sentat=1449509715
2015-12-07 17:35:20,486 INFO emonCMS sending: http://localhost/emoncms/input/bulk.json?apikey=E-M-O-N-C-M-S-A-P-I-K-E-Y&data=[[1449509720.29,10,0,327,-2,0,24921,0]]&sentat=1449509720
2015-12-07 17:35:25,369 INFO emonCMS sending: http://localhost/emoncms/input/bulk.json?apikey=E-M-O-N-C-M-S-A-P-I-K-E-Y&data=[[1449509725.26,7,640,0,0,0,24929,3000,3000,3000,3000,3000,3000,1,0]]&sentat=1449509725
2015-12-07 17:35:31,251 INFO emonCMS sending: http://localhost/emoncms/input/bulk.json?apikey=E-M-O-N-C-M-S-A-P-I-K-E-Y&data=[[1449509731.12,10,0,323,-2,0,24949,0]]&sentat=1449509731
2015-12-07 17:35:35,419 INFO emonCMS sending: http://localhost/emoncms/input/bulk.json?apikey=E-M-O-N-C-M-S-A-P-I-K-E-Y&data=[[1449509735.23,7,644,0,0,0,24960,3000,3000,3000,3000,3000,3000,1,0]]&sentat=1449509735
2015-12-07 17:35:42,082 INFO emonCMS sending: http://localhost/emoncms/input/bulk.json?apikey=E-M-O-N-C-M-S-A-P-I-K-E-Y&data=[[1449509741.93,10,0,321,0,0,24857,0]]&sentat=1449509742
2015-12-07 17:35:45,317 INFO emonCMS sending: http://localhost/emoncms/input/bulk.json?apikey=E-M-O-N-C-M-S-A-P-I-K-E-Y&data=[[1449509745.19,7,639,0,0,0,24868,3000,3000,3000,3000,3000,3000,1,0]]&sentat=1449509745
2015-12-07 17:35:50,264 INFO emonCMS sending: http://localhost/emoncms/input/bulk.json?apikey=E-M-O-N-C-M-S-A-P-I-K-E-Y&data=[[1449509750.15,19,183,0,604,25]]&sentat=1449509750
2015-12-07 17:35:52,916 INFO emonCMS sending: http://localhost/emoncms/input/bulk.json?apikey=E-M-O-N-C-M-S-A-P-I-K-E-Y&data=[[1449509752.73,10,0,323,0,0,24831,0]]&sentat=1449509752
2015-12-07 17:35:55,236 INFO emonCMS sending: http://localhost/emoncms/input/bulk.json?apikey=E-M-O-N-C-M-S-A-P-I-K-E-Y&data=[[1449509755.12,7,706,0,0,0,24863,3000,3000,3000,3000,3000,3000,1,0]]&sentat=1449509755
2015-12-07 17:36:03,889 INFO emonCMS sending: http://localhost/emoncms/input/bulk.json?apikey=E-M-O-N-C-M-S-A-P-I-K-E-Y&data=[[1449509763.69,10,0,323,-1,0,24915,0]]&sentat=1449509763
2015-12-07 17:36:05,195 INFO emonCMS sending: http://localhost/emoncms/input/bulk.json?apikey=E-M-O-N-C-M-S-A-P-I-K-E-Y&data=[[1449509765.0,7,707,0,0,0,24914,3000,3000,3000,3000,3000,3000,1,0]]&sentat=1449509765
^C
pi@raspberrypi /etc/emonhub $
Re: Installed 9.2 and all up but cannot get Nodes to appear
this might help if the nodes are missing on the menu
http://openenergymonitor.org/emon/node/11752
Steve
Re: Installed 9.2 and all up but cannot get Nodes to appear
Have you checked your emonhub log?
tail -f /var/log/emonhub/emonhub.log
Paul
Re: Installed 9.2 and all up but cannot get Nodes to appear
OK so I now get inputs as expected and logs show writing but I get "ERROR: Feed could not be created, undefined" error when trying to setup a new feed in the inputs menu item. I know MYSQL is in and setup as per Wheezy install so not sure what next?
Re: Installed 9.2 and all up but cannot get Nodes to appear
Are your permission set correctly for the data folders?
Paul
Re: Installed 9.2 and all up but cannot get Nodes to appear
Hi all help so far is great but cannot create feeds with a "ERROR: Feed could not be created, undefined" so no feeds available. Setup MYSQL using the Wheezy install guide.
Re: Installed 9.2 and all up but cannot get Nodes to appear
So despite the settings.php being in place it then was deleted so added it back in, changed settings and now ok.
Its a complex beast but gradually I'm taming it......
Re: Installed 9.2 and all up but cannot get Nodes to appear
Meteosat007:
Do NOT double-post. Read what the link "Read this before posting" says.


This app guides you through all the realtime updates of covid cases, latest news and nearby vaccine centers and availability.
Tracks day to day new cases count, active count, reccovered count and deceased count as well as vaccine administered counts.
Provides latest trusted news updates, safety measures and other news related to covid shared by community.
Realtime updates on nearby vaccine centers and availability of vaccines.


No matter for what it’s for, our designs are guaranteed to get you noticed.
Every corporation strives to have a recognisable identity that is not bound by trends or timeframes.
Responsive development is a standard for all our websites.
Animations reinforce a perception of a brand, product or service.
Let’s go on an adventure together! Are you interested in a collaboration,
partnership or do you just want to come by and say hello?


Decorating When You're Starting Out or Starting Over
You’ve finally reached this point in your life- you’ve bought your first home, moved into your very own apartment, moved out of the dorm room or you’re finally downsizing after all of your kids have left the nest.
What do you like?
First things first, find out what you like. What makes you, you? More often than not we find that people have been stuck in places where others have called the shots, you didn’t own the apartment/condo/house or your kids really dictated what you did and didn’t furnish your home with... cough, white couch, cough. Now it’s your time to shine. Take a walk, find out what colors speak to you. Pick up a few magazines and see if you really identify with a particular style. Head over to Pinterest and create a board filled with things you’d want in your new space.
If you’re the kind of person who needs to see it all in person then head over to your closest Mor Furniture for Less and check out the way we lay out rooms. We strategically put together rooms for you with full sets of furniture.
Sketch out your floor plan
Now that you’re the one calling all of the shots you can layout the room just the way you like it. Take the time to sketch it out, come up with a few ideas and keep the extras in your back pocket so you can give the room a refresh in a few months. If you’re the kind of person who needs to physically see how things layout then put those moving boxes to good use and place them around the room as furniture.
If moving boxes sounds like too much work and your artist skills aren’t exactly up to par there are many different room builders and planners online. All you do is upload an image of the room and start planning!
Choose your color palette
Your color palette can come from a variety of inspiration. There are designers out there who say to take that inspiration from your floor color, others say to use a piece of art, but one of the best ways to create the perfect space for you is to use an item that you truly love. It could be anything from a favorite outfit you wear to a rug. Once your color palette is chosen work backward adding in neutrals to break up the bolder colors. Save the bright colors for the accent pieces, this way if you decide to change things up in a few years you’re not totally locked in.
John Doe Reply 03.05.2017
In vestibulum tellus ut nunc accumsan eleifend. Donec mattis cursus ligula, id iaculis dui feugiat nec. Etiam ut ante sed neque lacinia volutpat. Maecenas ultricies tempus nibh, sit amet facilisis mauris vulputate in. Phasellus tempor justo et mollis facilisis. Donec placerat at nulla sed suscipit.  Cras lobortis id elit eu vehicula. Sed porttitor nulla vitae nisl varius luctus. Quisque a enim nisl. Maecenas facilisis, felis sed blandit scelerisque, sapien nisl egestas diam, nec blandit diam ipsum eget dolor. Maecenas ultricies tempus nibh, sit amet facilisis mauris vulputate in.
John Doe Reply 21.03.2017
Cras lobortis id elit eu vehicula. Sed porttitor nulla vitae nisl varius luctus. Quisque a enim nisl. Maecenas facilisis, felis sed blandit scelerisque, sapien nisl egestas diam, nec blandit diam ipsum eget dolor. In vestibulum tellus ut nunc accumsan eleifend. Donec mattis cursus ligula, id iaculis dui feugiat nec. Etiam ut ante sed neque lacinia volutpat. Maecenas ultricies tempus nibh, sit amet facilisis mauris vulputate in. Phasellus tempor justo et mollis facilisis. Donec placerat at nulla sed suscipit. Praesent accumsan, sem sit amet euismod ullamcorper, justo sapien cursus nisl, nec gravida


Trader Galladucci:
Gemstone Powder is very valuable. The Ivory Tower of Oren orders a lot.
One last task. Deliver this order document to Priest Dustin at the Einhasad Temple. Be courteous and respectful, he holds a high position. My reputation and business are at stake!


Company profile - Canadian Company Capabilities
Third-Party Information Liability Disclaimer
Some of the information on this Web page has been provided by external sources. The Government of Canada is not responsible for the accuracy, reliability or currency of the information supplied by external sources. Users wishing to rely upon this information should consult directly with the source of the information. Content provided by external sources is not subject to official languages, privacy and accessibility requirements.
NVision Insight Group Inc.
Legal/Operating Name:
NVision Insight Group Inc.
Alternate Name:
Aarluk Consulting
Consilium Consulting
Stonecircle Consulting
Mailing Address:
488 Gladstone AveOTTAWA, Ontario
K1R 5N8
Location Address:
488 Gladstone AveOTTAWA, Ontario
K1R 5N8
Tel.:<PHONE_NUMBER>
Fax:<PHONE_NUMBER>
Logo
Company Profile
NVision Insight Group is an Indigenous owned and controlled company providing management consulting services geared specifically to the Indigenous client base, empowering Indigenous communities across Canada.
Full profile
Full profile
Contact information
Company description
Product / Service / Licensing
B1-Environmental Studies
B3-Administrative Support Studies
B5-Social Studies and Humanities
E-Environmental Services
G1-Social Services
R0-Professional Services
R1-Administrative and Management Support Services
T-Communications, Photographic, Mapping, Printing and Publication Services
U-Educational and Training Services
Market profile
Alliances:
- Technology
Strategic alliances:
We agree in principle with CRA's definition of a 'joint venture': “A joint venture is an arrangement where two or more persons (participants) work together in a limited and defined business undertaking. Ordinarily, all participants of the joint venture contribute assets, share risks, and have mutual liability.A joint venture agreement is not a continuing relationship between participants. For example, the venture may be for one specific business project. Once the project is completed, the joint venture ceases to exist.
Generally, participants in a joint venture name one participant to be the "joint venture operator". This person accounts for the day-to-day operations of the joint venture. The BN of the operator is used.
Industry sector market interests:
- Environment
- Fishery
- Service Industry
- Tourism
Sector information
Total plant size:
Distribution of employees:
13Unique applications:
Building North-South Business Bridges: Nunavut is Canada's fastest growing economy, offering opportunities for growth through linkage with businesses across Canada. While headlines focus on mineral and other non-renewable resources, other sectors offer significant opportunity for those prepared to make a meaningful, informed and sustained effort to enter this marketplace. Nova Scotia and Newfoundland & Labrador recognize these opportunities and invited the NVision Insight Group to help identify and develop potential linkages between their respective governments sand businesses and those in Nunavut.Key / Major clients:
We serve Indigenous organizations (Inuit Tapirit Kanatami, Land Claims Agreement Coalition, Nunavut Tunngavik Inc., Metis Nation of Ontario); Provincial and Territorial Governments (Dept. of Environment, Health, Culture and Heritage - Government of Nunavut, Government of Canada, Government of Ontario - Ontario Ministry of Aboriginal Affairs); Communities (Batchewana First Nation, Deline First Nation, City of Ottawa, Municipality of Sanikiluaq); Not for Profits (Inuit Broadcasting Corporation, Pairijait Tigumivik Elders Society); Corporate Clients (Baffin Regional Chamber of Commerce, Nova Scotia Business Inc., Defence Construction Canada, De Beers).Success stories:
The design, adaptation and delivery of 40+ online credit courses for Nunavut's Municipal Training Organization in partnership with Nunavut Arctic College. The project illustrated our approach to online learning; incorporation of best practices in adult learning, use of breakthrough technology, reliance on subject matter experts and joyful creativity. We created exceptional online learning experiences with positive feedback from participants.Testimonial:
E-Learning: The Aboriginal Cultural Awareness Training has helped our staff be more sensitive and better understand Aboriginal heritage and culture. This training will be put to work enhancing our outreach to Aboriginal communities so we can better work together for the success of the forest sector.–David Lindsay, President and CEO, Forest Products Association of Canada
Management Support: The National Centre for First Nations Governance has turned to this company a number of times over the last three years. Their hands-on understanding of First Nations, combined with a friendly and professional approach, keeps us coming back when we are faced with a complicated issue.
–Len Hartley, National Centre for First Nations Governance
Third-Party Information Liability Disclaimer
Some of the information on this Web page has been provided by external sources. The Government of Canada is not responsible for the accuracy, reliability or currency of the information supplied by external sources. Users wishing to rely upon this information should consult directly with the source of the information. Content provided by external sources is not subject to official languages, privacy and accessibility requirements.
Contacts
Contact information
Description
Company description
Products, services and licensing
Product / Service / Licensing
B1-Environmental Studies
B3-Administrative Support Studies
B5-Social Studies and Humanities
E-Environmental Services
G1-Social Services
R0-Professional Services
R1-Administrative and Management Support Services
T-Communications, Photographic, Mapping, Printing and Publication Services
U-Educational and Training Services
Market
Market profile
Alliances:
- Technology
Strategic alliances:
We agree in principle with CRA's definition of a 'joint venture': “A joint venture is an arrangement where two or more persons (participants) work together in a limited and defined business undertaking. Ordinarily, all participants of the joint venture contribute assets, share risks, and have mutual liability.A joint venture agreement is not a continuing relationship between participants. For example, the venture may be for one specific business project. Once the project is completed, the joint venture ceases to exist.
Generally, participants in a joint venture name one participant to be the "joint venture operator". This person accounts for the day-to-day operations of the joint venture. The BN of the operator is used.
Industry sector market interests:
- Environment
- Fishery
- Service Industry
- Tourism
Sector
Sector information
Total plant size:
Distribution of employees:
13Unique applications:
Building North-South Business Bridges: Nunavut is Canada's fastest growing economy, offering opportunities for growth through linkage with businesses across Canada. While headlines focus on mineral and other non-renewable resources, other sectors offer significant opportunity for those prepared to make a meaningful, informed and sustained effort to enter this marketplace. Nova Scotia and Newfoundland & Labrador recognize these opportunities and invited the NVision Insight Group to help identify and develop potential linkages between their respective governments sand businesses and those in Nunavut.Key / Major clients:
We serve Indigenous organizations (Inuit Tapirit Kanatami, Land Claims Agreement Coalition, Nunavut Tunngavik Inc., Metis Nation of Ontario); Provincial and Territorial Governments (Dept. of Environment, Health, Culture and Heritage - Government of Nunavut, Government of Canada, Government of Ontario - Ontario Ministry of Aboriginal Affairs); Communities (Batchewana First Nation, Deline First Nation, City of Ottawa, Municipality of Sanikiluaq); Not for Profits (Inuit Broadcasting Corporation, Pairijait Tigumivik Elders Society); Corporate Clients (Baffin Regional Chamber of Commerce, Nova Scotia Business Inc., Defence Construction Canada, De Beers).Success stories:
The design, adaptation and delivery of 40+ online credit courses for Nunavut's Municipal Training Organization in partnership with Nunavut Arctic College. The project illustrated our approach to online learning; incorporation of best practices in adult learning, use of breakthrough technology, reliance on subject matter experts and joyful creativity. We created exceptional online learning experiences with positive feedback from participants.Testimonial:
E-Learning: The Aboriginal Cultural Awareness Training has helped our staff be more sensitive and better understand Aboriginal heritage and culture. This training will be put to work enhancing our outreach to Aboriginal communities so we can better work together for the success of the forest sector.–David Lindsay, President and CEO, Forest Products Association of Canada
Management Support: The National Centre for First Nations Governance has turned to this company a number of times over the last three years. Their hands-on understanding of First Nations, combined with a friendly and professional approach, keeps us coming back when we are faced with a complicated issue.
–Len Hartley, National Centre for First Nations Governance


climlab.dynamics package¶
climlab.dynamics.budyko_transport module¶
-
class
climlab.dynamics.budyko_transport.
BudykoTransport
(b=3.81, **kwargs)[source]¶ Bases:
climlab.process.energy_budget.EnergyBudget
calculates the 1 dimensional heat transport as the difference between the local temperature and the global mean temperature.
Parameters: b (float) – budyko transport parameter
- unit: \(\textrm{W} / \left( \textrm{m}^2 \ ^{\circ} \textrm{C} \right)\)
- default value:
3.81
As BudykoTransport is a
Process
it needs a state do be defined on. See example for details.Computation Details:
In a global Energy Balance Model
\[C \frac{dT}{dt} = R\downarrow - R\uparrow - H\]with model state \(T\), the energy transport term \(H\) can be described as
\[H = b [T - \bar{T}]\]where \(T\) is a vector of the model temperature and \(\bar{T}\) describes the mean value of \(T\).
For further information see [Budyko_1969].
Example: Budyko Transport as a standalone process:
import climlab from climlab.dynamics.budyko_transport import BudykoTransport from climlab import domain from climlab.domain import field from climlab.utils.legendre import P2 import numpy as np import matplotlib.pyplot as plt # create domain sfc = domain.zonal_mean_surface(num_lat = 36) lat = sfc.lat.points lat_rad = np.deg2rad(lat) # define initial temperature distribution T0 = 15. T2 = -20. Ts = field.Field(T0 + T2 * P2(np.sin(lat_rad)), domain=sfc) # create BudykoTransport process budyko_transp = BudykoTransport(state=Ts) ### Integrate & Plot ### fig = plt.figure( figsize=(6,4)) ax = fig.add_subplot(111) for i in np.arange(0,3,1): ax.plot(lat, budyko_transp.default, label='day %s' % (i*40)) budyko_transp.integrate_days(40.) ax.set_title('Standalone Budyko Transport') ax.set_xlabel('latitude') ax.set_xticks([-90,-60,-30,0,30,60,90]) ax.set_ylabel('temperature ($^{\circ}$C)') ax.legend(loc='best') plt.show()
(Source code, png, hires.png, pdf)
-
b
¶ the budyko transport parameter in unit \(\frac{\textrm{W}}{\textrm{m}^2 \textrm{K}}\)
Getter: returns the budyko transport parameter Setter: sets the budyko transport parameter Type: float
climlab.dynamics.diffusion module¶
-
class
climlab.dynamics.diffusion.
Diffusion
(K=None, diffusion_axis=None, use_banded_solver=False, **kwargs)[source]¶ Bases:
climlab.process.implicit.ImplicitProcess
A parent class for one dimensional implicit diffusion modules.
Solves the one dimensional heat equation
\[\frac{dT}{dt} = \frac{d}{dy} \left[ K \cdot \frac{dT}{dy} \right]\]Initialization parameters
Parameters: - K (float) – the diffusivity parameter in units of \(\frac{[\textrm{length}]^2}{\textrm{time}}\) where length is the unit of the spatial axis on which the diffusion is occuring.
- diffusion_axis (str) – dictionary key for axis on which the diffusion is occuring in process’s domain axes dictionary
- use_banded_solver (bool) – input flag, whether to use
scipy.linalg.solve_banded()
instead ofnumpy.linalg.solve()
[default: False]
Note
The banded solver
scipy.linalg.solve_banded()
is faster thannumpy.linalg.solve()
but only works for one dimensional diffusion.Object attributes
Additional to the parent class
ImplicitProcess
following object attributes are generated or modified during initialization:Variables: - param (dict) – parameter dictionary is extended by diffusivity parameter K (unit: \(\frac{[\textrm{length}]^2}{\textrm{time}}\))
- use_banded_solver (bool) – input flag specifying numerical solving method (given during initialization)
- diffusion_axis (str) – dictionary key for axis where diffusion
is occuring:
specified during initialization
or output of method
_guess_diffusion_axis()
- K_dimensionless (array) – diffusion parameter K multiplied by the timestep and divided by mean of diffusion axis delta in the power of two. Array has the size of diffusion axis bounds. \(K_{\textrm{dimensionless}}[i]= K \frac{\Delta t}{ \left(\overline{\Delta \textrm{bounds}} \right)^2}\)
- diffTriDiag (array) – tridiagonal diffusion matrix made by
_make_diffusion_matrix()
with inputself.K_dimensionless
Example: Here is an example showing implementation of a vertical diffusion. It shows that a subprocess can work on just a subset of the parent process state variables.
import climlab from climlab.dynamics.diffusion import Diffusion import matplotlib.pyplot as plt c = climlab.GreyRadiationModel() K = 0.5 d = Diffusion(K=K, state = {'Tatm':c.state['Tatm']}, **c.param) c.add_subprocess('diffusion',d) ### Integrate & Plot ### fig = plt.figure( figsize=(6,4)) ax = fig.add_subplot(111) ax.plot(c.lev, c.state['Tatm'], label='step 0') c.step_forward() ax.plot(c.lev, c.state['Tatm'], label='step 1') ax.invert_xaxis() ax.set_title('Diffusion subprocess') ax.set_xlabel('level (mb)') #ax.set_xticks([]) ax.set_ylabel('temperature (K)') ax.legend(loc='best') plt.show()
(Source code, png, hires.png, pdf)
-
_implicit_solver
()[source]¶ Invertes and solves the matrix problem for diffusion matrix and temperature T.
The method is called by the
_compute()
function of theImplicitProcess
class and solves the matrix problem\[A \cdot T_{\textrm{new}} = T_{\textrm{old}}\]for diffusion matrix A and corresponding temperatures. \(T_{\textrm{old}}\) is in this case the current state variable which already has been adjusted by the explicit processes. \(T_{\textrm{new}}\) is the new state of the variable. To derive the temperature tendency of the diffusion process the adjustment has to be calculated and muliplied with the timestep which is done by the
_compute()
function of theImplicitProcess
class.This method calculates the matrix inversion for every state variable and calling either
solve_implicit_banded()
ornumpy.linalg.solve()
dependent on the flagself.use_banded_solver
.Variables: - state (dict) – method uses current state variables but does not modify them
- use_banded_solver (bool) – input flag whether to use
_solve_implicit_banded()
ornumpy.linalg.solve()
to do the matrix inversion - diffTriDiag (array) – the diffusion matrix which is given with the current state variable to the method solving the matrix problem
-
class
climlab.dynamics.diffusion.
MeridionalDiffusion
(K=None, **kwargs)[source]¶ Bases:
climlab.dynamics.diffusion.Diffusion
A parent class for Meridional diffusion processes.
Calculates the energy transport in a diffusion like process along the temperature gradient:
\[H(\varphi) = \frac{D}{\cos \varphi}\frac{\partial}{\partial \varphi} \left( \cos\varphi \frac{\partial T(\varphi)}{\partial \varphi} \right)\]for an Energy Balance Model whose Energy Budget can be noted as:
\[C(\varphi) \frac{dT(\varphi)}{dt} = R\downarrow (\varphi) - R\uparrow (\varphi) + H(\varphi)\]Initialization parameters
An instance of
MeridionalDiffusion
is initialized with the following arguments:Parameters: K (float) – diffusion parameter in units of \(1/s\) Object attributes
Additional to the parent class
Diffusion
which is initialized withdiffusion_axis='lat'
, following object attributes are modified during initialization:Variables: - K_dimensionless (array) – As K_dimensionless has been computed like
\(K_{\textrm{dimensionless}}= K \frac{\Delta t}{(\Delta \textrm{bounds})^2}\)
with \(K\) in units \(1/s\),
the \(\Delta (\textrm{bounds})\) have to
be converted from
deg
torad
to make the array actually dimensionless. This is done during initialiation. - diffTriDiag (array) – the diffusion matrix is recomputed with
appropriate weights for the meridional case
by
_make_meridional_diffusion_matrix()
Example: Meridional Diffusion of temperature as a stand-alone process:
import numpy as np import climlab from climlab.dynamics.diffusion import MeridionalDiffusion from climlab.utils import legendre sfc = climlab.domain.zonal_mean_surface(num_lat=90, water_depth=10.) lat = sfc.lat.points initial = 12. - 40. * legendre.P2(np.sin(np.deg2rad(lat))) # make a copy of initial so that it remains unmodified Ts = climlab.Field(np.array(initial), domain=sfc) # thermal diffusivity in W/m**2/degC D = 0.55 # meridional diffusivity in 1/s K = D / sfc.heat_capacity d = MeridionalDiffusion(state=Ts, K=K) d.integrate_years(1.) import matplotlib.pyplot as plt fig = plt.figure( figsize=(6,4)) ax = fig.add_subplot(111) ax.set_title('Example for Meridional Diffusion') ax.set_xlabel('latitude') ax.set_xticks([-90,-60,-30,0,30,60,90]) ax.set_ylabel('temperature ($^{\circ}$C)') ax.plot(lat, initial, label='initial') ax.plot(lat, Ts, label='Ts (1yr)') ax.legend(loc='best') plt.show()
(Source code, png, hires.png, pdf)
- K_dimensionless (array) – As K_dimensionless has been computed like
\(K_{\textrm{dimensionless}}= K \frac{\Delta t}{(\Delta \textrm{bounds})^2}\)
with \(K\) in units \(1/s\),
the \(\Delta (\textrm{bounds})\) have to
be converted from
-
climlab.dynamics.diffusion.
_guess_diffusion_axis
(process_or_domain)[source]¶ Scans given process, domain or dictionary of domains for a diffusion axis and returns appropriate name.
In case only one axis with length > 1 in the process or set of domains exists, the name of that axis is returned. Otherwise an error is raised.
Parameters: process_or_domain ( Process
,_Domain
ordict
of domains) – input from where diffusion axis should be guessedRaises: ValueError
if more than one diffusion axis is possible.Returns: name of the diffusion axis Return type: str
-
climlab.dynamics.diffusion.
_make_diffusion_matrix
(K, weight1=None, weight2=None)[source]¶ Builds the general diffusion matrix with dimension nxn.
Note
\(n\) = number of points of diffusion axis \(n+1\) = number of bounts of diffusion axis
Function-all argument
Parameters: Returns: completely listed tridiagonal diffusion matrix (size: nxn)
Return type: Note
The elements of array K are acutally dimensionless:
\[K[i] = K_{\textrm{physical}} \frac{\Delta t}{(\Delta y)^2}\]where \(K_{\textrm{physical}}\) is in unit \(\frac{\textrm{length}^2}{\textrm{time}}\)
The diffusion matrix is build like the following
\[\begin{split}\textrm{diffTriDiag}= \left[ \begin{array}{cccccc} 1+\frac{s_1 }{w_{2,0}} & -\frac{s_1}{w_{2,0}} & 0 & & ... & 0 \\ -\frac{s_1}{w_{2,1}} & 1+\frac{s_1 + s_2}{w_{2,1}} & -\frac{s_2}{w_{2,1}} & 0 & ... & 0 \\ 0 & -\frac{s_2}{w_{2,2}} & 1+\frac{s_2 + s_3}{w_{2,2}} & -\frac{s_3}{w_{2,2}} &... & 0 \\ & & \ddots & \ddots & \ddots & \\ 0 & 0 & ... & -\frac{s_{n-2}}{w_{2,n-2}} & 1+\frac{s_{n-2} + s_{n-1}}{w_{2,{n-2}}} & -\frac{s_{n-1}}{w_{2,{n-2}}} \\ 0 & 0 & ... & 0 & -\frac{s_{n-1}}{w_{2,n-1}} & 1+\frac{s_{n-1}}{w_{2,n-1}} \\ \end{array} \right] \end{split}\]where
\[\begin{split}\begin{array}{lllllll} K &= [K_0, &K_1, &K_2, &...,&K_{n-1}, &K_{n}] \\ w_1 &= [w_{1,0}, &w_{1,1},&w_{1,2},&...,&w_{1,n-1},&w_{1,n}] \\ w_2 &= [w_{2,0}, &w_{2,1},&w_{2,2},&...,&w_{2,n-1}] \end{array} \end{split}\]and following subsitute:
\[s_i = w_{1,i} K_i \]
-
climlab.dynamics.diffusion.
_make_meridional_diffusion_matrix
(K, lataxis)[source]¶ Calls
_make_diffusion_matrix()
with appropriate weights for the meridional diffusion case.Parameters: Weights are computed as the following:
\[\begin{split}\begin{array}{ll} w_1 &= \cos(\textrm{bounds}) \\ &= \left[ \cos(b_0), \cos(b_1), \cos(b_2), \ ... \ , \cos(b_{n-1}), \cos(b_n) \right] \\ w_2 &= \cos(\textrm{points}) \\ &= \left[ \cos(p_0), \cos(p_1), \cos(p_2), \ ... \ , \cos(p_{n-1}) \right] \end{array}\end{split}\]when bounds and points from
lataxis
are written as\[\begin{split}\begin{array}{ll} \textrm{bounds} &= [b_0, b_1, b_2, \ ... \ , b_{n-1}, b_{n}] \\ \textrm{points} &= [p_0, p_1, p_2, \ ... \ , p_{n-1}] \end{array}\end{split}\]Giving this input to
_make_diffusion_matrix()
results in a matrix like:\[\begin{split}\textrm{diffTriDiag}= \left[ \begin{array}{cccccc} 1+\frac{u_1 }{\cos(p_0)} & -\frac{u_1}{\cos(p_0)} & 0 & & ... & 0 \\ -\frac{u_1}{\cos(p_1)} & 1+\frac{u_1 + u_2}{\cos(p_1)} & -\frac{u_2}{\cos(b_1)} & 0 & ... & 0 \\ 0 & -\frac{u_2}{\cos(p_2)} & 1+\frac{u_2 + u_3}{\cos(p_2)} & -\frac{u_3}{\cos(p_2)} &... & 0 \\ & & \ddots & \ddots & \ddots & \\ 0 & 0 & ... & -\frac{u_{n-2}}{\cos(p_{n-2})} & 1+\frac{u_{n-2} + u_{n-1}}{\cos(p_{n-2})} & -\frac{u_{n-1}}{\cos(p_{n-2})} \\ 0 & 0 & ... & 0 & -\frac{u_{n-1}}{\cos(p_{n-1})} & 1+\frac{u_{n-1}}{\cos(p_{n-1})} \\ \end{array} \right] \end{split}\]with the substitue of:
\[u_i = \cos(b_i) K_i \]
-
climlab.dynamics.diffusion.
_solve_implicit_banded
(current, banded_matrix)[source]¶ Uses a banded solver for matrix inversion of a tridiagonal matrix.
Converts the complete listed tridiagonal matrix (nxn) into a three row matrix (3xn) and calls
scipy.linalg.solve_banded()
.Parameters: Returns: output of
scipy.linalg.solve_banded()
Return type: