Marie Stopes ordered to recall 4 million Life Guard condoms
by URNThe National Drug Authority (NDA) has ordered Marie Stopes Uganda to recall about 4 million Life Guard condoms from the Ugandan market. Marie Stopes, an NGO that offers reproductive services is also the sole distributors of Life Guard condoms in Uganda.
According to a letter issued by the NDA, Life Guard condoms from batches 19040205 and 19050105 manufactured in April and May 2019 with expiry dates for March and April 2024 do not meet market standards.
Victoria Nambasa, the product safety officer at NDA says the condoms were not free from holes and burst properties. It is estimated that over 4 million condoms produced in the batches will be affected. On the open market, a packet of Lifeguard condoms costs between Shs 1,500 and Shs 2,000.
"We have given you two weeks to submit a recall status report indicating the details of distribution and the clients that have been notified of the recall," Nambasa said.
Fred Ssekyana, the public relations officer of the National Drug Authority says that they have teams in the field to ensure that the order is followed.
"The process is on and we are working with the distributors of the condoms to make sure that the affected batches are off the market," Ssekyana said.
Sam Lemi, from Marie Stopes, says they have begun the recall process and it should be complete anytime now.
"We started the process and expect it to be completed soon. We are investigating what could have gone wrong," Lemi said.
According to data from the ministry of Health, an estimated 800 million condoms are needed to protect Ugandans from unplanned for pregnancies, HIV/Aifd and Sexually Transmitted Diseases (STDs).


HOME
STORAGE
PACKAGING
PRODUCTION DATA
PO NUMBER
PRODUCT TYPE
BAG COUNT
PRODUCTION DATE
PACKAGING LINE
SUBMIT


[1]
Small (in size); Small (in capacity)
[2]
style, capacity; iTunes, price, functionality, damage, wheel
[3]
Superb design, scroll whell, I-tunes.; Scratch prone.


--- layout: post title: Finally moving in to our new office date: 2012-03-07 00:22:35.000000000 -08:00 type: post published: true status: publish categories: [] tags: [] meta: {} author: ---
Sent from my iPhone


 As a child growing up without television, my options for entertaining myself were fairly limited; sure, I could've gone into the great outdoors to explore and play, but that would've required me to...you know...go outside. So I turned to books. Through books I experienced the best and worst man has to offer and, as a result, shaped me into the man I am today. Long story short reading is an important part of my life and it continues to affect how I live that life.
It seems only natural for one of my favorite websites to revolve around books. Goodreads is a website that brings the reading community together and gives them a platform to share their thoughts and give and find recommendations. It also has regular AMA's with famous authors, which allows us fans to connect with those we admire on a personal level.
Looking at the site itself reminds oneself of a bookshelf. It's color palette has an earthy, woodlike theme and its posts are sorted very much how one would sort books. If you are signed it, most of what you see are your friends' recent reviews. This is the whole idea behind goodreads: have a large community with a diverse background that can lead you to find something you were not expecting. It is fairly easy to browse through the site as it has a very robust search engine that allows you to search by title, author name, or ISBN. While on this site I'm always put into a good mood; its design evokes waves of nostalgia that carry into the experience itself. Going through each page of recommended books makes me feel like i'm nine years old again, sitting in my special corner of the bookstore while following the adventures of Martin the Warrior or Ender Wiggin.
I remember the first football game I ever watched in vivid detail. It was superbowl XXXI, the underdog patriots versus the powerhouse packers. I was wearing some god-awful couch-print jacket which, sadly, was the nicest article of clothing I owned. My cousin, who wanted the packers to win, insisted on sitting on me the entire game due to the fact that I bore a striking resemblance to my uncle's ottoman while wearing said jacket. Being half his age and half his weight, I couldn't really do much other than root for the patriots, so root for the patriots I did. They ended up losing, but on that night the first seeds of my fandom was sown.
If you're a sports fan of any kind it is almost impossible to resist the allure of fantasy sports. Every one of us thinks we know the game better than everyone else, and fantasy is the perfect way to show that. The more you get into fantasy, the more you get caught up in a sort of arms race to find the best sources of information and insight to get that one edge that will help you win your league. Today, against my better judgment, I'll reveal my personal secret weapon: fantasy football metrics.
What I like most about fantasy football metrics is its simplicity and straightforwardness. Rather than eyeballing a prospect and arguing whether or not a quarterback's arm is strong enough or if a runningback is elusive enough, fantasy football metrics does exactly what its name entails: it uses statistical analysis of each player's performance as well as his physical attributes, puts it through an algorithm, and gives a projection of that player's performance in the weeks to come.
Its philosophy in practice also carries over to how its site is designed. Looking at it, one would not be wrong in calling it “bare-bones.” It uses a simple navy blue and white template that gives off the vibe of being straightforward and businesslike. It doesn't try to distract you with pictures or news that is not germane to player performance. However, it does suffer from wall-of-text syndrome since that is literally all the content the site has to offer.
While the main author of the website like to inject humor and pop culture references in his posts, the bulk of his content is geared towards letting us viewers know who or what is trending statistically. Because of this, being on the site for a while gives me a sense of clinical detachment. The players who I am a fan of are no longer players, they are numbers. They are a means to an end, and that end is victory.
Anime has always been something of a guilty pleasure of mine. The first anime I watched regularly, like many boys my age, was Dragonball Z. Watching it today makes me wonder how I had the patience (does Goku really need ten episodes to make one goddamn spirit bomb?), but back then our choices were limited. My perception of the world of anime extended to DBZ, Transformers, and Pokemon, and for the longest time I never thought that it would have more to offer. That is until the day I started watching Fullmetal Alchemist. Realizing for the first time that the audience for anime wasn't limited to only children, that there were shows out there with substance, depth, and character development, was a seminal moment in my childhood. I would wager that watching shows like Mushi-shi, Baccano!, and Steins;Gate shaped me just as much as any book I have ever read.
Fast-forward to the present day. The world wide web has made watching whatever anime you wish with the click of a button. There are many different sites where you could do so. Hulu has a robust collection that continues to grow every day; Netflix is planning on producing a netflix anime original to supplement their already vast collection. However, my favorite place for all things anime is Crunchyroll. The main problem I have with Hulu and Netflix anime, respectively, are the highly distractive and over-the-top ads and the terrible lack of subbed anime. Crunchyroll seeks to solve both problems. While its collection of available streams is definitely smaller, it focuses on quality stream content with minimal advertizing. Because it supplements its revenue with all sorts of japanese paraphernalia as well as a subscription service that gets rid of ads all together, what little ads I do have to watch very rarely are longer than 30 seconds.
Getting down to the brass tacks of the website, when one sees the homepage of Crunchyroll its purpose is abundantly clear. Its bright color palette of white, orange, and yellow is reminiscent of that of a typical anime vignette. When you first set your eyes on this site, the very first thing you notice is the scrolling image box of the most popular anime that is currently available for stream. For both the veteran and the uninitiated, this is a great tool to get either get started or catch up to the latest show. Also on the page are links to the most recent anime news, forum links to discuss the previous night's episode, and a daily deal from their store.  Although the search engine could use a little work and the amount of clutter as you get to the bottom of the page is a little excessive, the site as a whole is very well put together.
The main emotion I feel when I'm on this site is probably excitement. The amount of resources available to me is almost overwhelming, but I manage to keep my composure and take advantage of everything this site has to offer.


Image Tool for Bing
Version <IP_ADDRESS>
Copyright © 2013-2015 James Gordy
Bing is a trademark of Microsoft Inc., registered in the U.S. and other countries. This application makes no claim to be either authorized or approved by Microsoft Inc.
Application icons are provided by www.designcontest.com.


val versions: List<Version>
Overrides Resource.versions
Provides list of Version objects which can be utilized by ConditionalHeaders and PartialContent features.
Getter
Provides list of Version objects which can be utilized by ConditionalHeaders and PartialContent features.


| Package | Description |
|---|---|
| jrigby.openstack_queue.request_templates | |
| jrigby.openstack_queue.server |
| Class and Description |
|---|
| ResourceProvisioningCallback
Provides callback methods once resources have been created
in the cloud.
|
| ResourceRequest
Specifies a job to execute that is submitted to
a
ResourceQueue . |
| ServerCollection
A set of servers that have been dedicated to a particular
ResourceRequest . |
| Class and Description |
|---|
| AuthorizedKeysList
Maintains a list of authorised SSH keys in the user's home directory.
|
| JobStatus
Defines a submitted job's status in the queue
|
| OSConnection
Provides a simplified abstraction to the OpenStack API
|
| OSCredentials
Credentials to be passed to the
OSConnection object |
| QueueCommandProcessor
Processes any command received that alters the queue state
e.g.
|
| QueueCommandProcessor.CommandType
Command type enumeration
|
| ResourceProvisioningCallback
Provides callback methods once resources have been created
in the cloud.
|
| ResourceQueue
The job queue.
|
| ResourceQueue.QueueStatus
A status designation.
|
| ResourceRequest
Specifies a job to execute that is submitted to
a
ResourceQueue . |
| ResourceUsage
Specifies consumed resources.
|
| ServerCollection
A set of servers that have been dedicated to a particular
ResourceRequest . |
| ServerSettings
An abstraction from the configuration file that specifies all
server settings.
|


---
layout: page
title: l1nk5...
---
Hacker News
https://news.ycombinator.com/
Universal Leet (L337, L33T, 1337) Converter
http://www.robertecker.com/hp/research/leet-converter.php
Bookadvice - Best Books Ever Written
http://www.bookadvice.co/
Site Reliability Engineering - How Google Runs Production Systems
https://landing.google.com/sre/book/index.html


This is an implementation of YAML, a human friendly data
serialization language. Started as PyYAML port, it was
completely rewritten from scratch. Now it’s very fast, and supports 1.2 spec.
If your have not used custom tags or loader classes - no changes needed. Just
upgrade library and enjoy high parse speed.
In other case, you should rewrite your tag constructors and custom loader
classes, to conform new schema-based API. See
examples and
wiki for details.
Note, that parser internals were completely rewritten.
npm install js-yaml
If you want to inspect your YAML files from CLI, install js-yaml globally:
npm install js-yaml -g
usage: js-yaml [-h] [-v] [-c] [-j] [-t] file
Positional arguments:
file File with YAML document(s)
Optional arguments:
-h, --help Show this help message and exit.
-v, --version Show program's version number and exit.
-c, --compact Display errors in compact mode
-j, --to-json Output a non-funky boring JSON
-t, --trace Show stack trace on error
<script src="js-yaml.min.js"></script>
<script type="text/javascript">
var doc = jsyaml.load('greeting: hello\nname: world');
</script>
Browser support was done mostly for online demo. If you find any errors - feel
free to send pull requests with fixes. Also note, that IE and other old browsers
needs es5-shims to operate.
Here we cover the most ‘useful’ methods. If you need advanced details (creating
your own tags), see wiki and
examples for more
info.
In node.js JS-YAML automatically registers handlers for .yml
and .yaml
files. You can load them just with require
. That’s mostly equivalent to
calling load()
on fetched content of a file. Just with one string!
require('js-yaml');
// Get document, or throw exception on error
try {
var doc = require('/home/ixti/example.yml');
console.log(doc);
} catch (e) {
console.log(e);
}
Parses string
as single YAML document. Returns a JavaScript object or throwsYAMLException
on error.
NOTE: This function does not understands multi-document sources, it throws
exception on those.
options:
filename
(default: null) - string to be used as a file path instrict
(default - false) makes the loader to throw errors instead ofschema
(default: DEFAULT_SCHEMA
) - specifies a schema to use.Same as load()
, but understands multi-document sources and apply iterator
to
each document.
var yaml = require('js-yaml');
yaml.loadAll(data, function (doc) {
console.log(doc);
});
Same as load()
but uses SAFE_SCHEMA
by default - only recommended tags of
YAML specification (no JavaScript-specific tags, e.g. !!js/regexp
).
Same as loadAll()
but uses SAFE_SCHEMA
by default - only recommended tags of
YAML specification (no JavaScript-specific tags, e.g. !!js/regexp
).
Serializes object
as YAML document.
options:
indent
(default: 2) - indentation width to use (in spaces).flowLevel
(default: -1) - specifies level of nesting, when to switch fromstyles
- “tag” => “style” map. Each tag may have own set of styles.schema
(default: DEFAULT_SCHEMA
) specifies a schema to use.styles:
!!null
"canonical" => "~"
!!int
"binary" => "0b1", "0b101010", "0b1110001111010"
"octal" => "01", "052", "016172"
"decimal" => "1", "42", "7290"
"hexadecimal" => "0x1", "0x2A", "0x1C7A"
!!null, !!bool, !!float
"lowercase" => "null", "true", "false", ".nan", '.inf'
"uppercase" => "NULL", "TRUE", "FALSE", ".NAN", '.INF'
"camelcase" => "Null", "True", "False", ".NaN", '.Inf'
By default, !!int uses decimal
, and !!null, !!bool, !!float use lowercase
.
Same as dump()
but uses SAFE_SCHEMA
by default - only recommended tags of
YAML specification (no JavaScript-specific tags, e.g. !!js/regexp
).
The list of standard YAML tags and corresponding JavaScipt types. See also
YAML tag discussion and
YAML types repository.
!!null '' # null
!!bool 'yes' # bool
!!int '3...' # number
!!float '3.14...' # number
!!binary '...base64...' # buffer
!!timestamp 'YYYY-...' # date
!!omap [ ... ] # array of key-value pairs
!!pairs [ ... ] # array or array pairs
!!set { ... } # array of objects with given keys and null values
!!str '...' # string
!!seq [ ... ] # array
!!map { ... } # object
JavaScript-specific tags
!!js/regexp /pattern/gim # RegExp
!!js/undefined '' # Undefined
!!js/function 'function () {...}' # Function
Note, that you use arrays or objects as key in JS-YAML. JS do not allows objects
or array as keys, and stringifies (by calling .toString method) them at the
moment of adding them.
---
? [ foo, bar ]
: - baz
? { foo: bar }
: - baz
- baz
{ "foo,bar": ["baz"], "[object Object]": ["baz", "baz"] }
Also, reading of properties on implicit block mapping keys is not supported yet.
So, the following YAML document cannot be loaded.
&anchor foo:
foo: bar
*anchor: duplicate key
baz: bat
*anchor: duplicate key
View the LICENSE file
(MIT).


On the Road Business Opportunities
Earn a living with your own mobile business, from Waste & Recycling to Chauffeur & Private Hire
WASTE DISTRIBUTION
Are you looking for a waste collection franchise or a waste distribution franchise? Discover our Waste Distribution business model!
Just £11,995+VAT
SURFACE RESTORATION
Earn a fantastic living offering professional surface restoration services. Full training included.
Just £9,995+VAT
SANDWICH DELI
Are you looking to run your own sandwich delivery business with your own mobile deli van?
Only £5,995+VAT
MULTI-CLEAN
Are you looking for a Cleaning Franchise Opportunity? Multi-Clean is a business that will give you a fantastic income.
Only £11,995
CHAUFFEUR & PRIVATE HIRE
Are you looking to run your own chauffeur business or want to know how to start a chauffeur business?
From just £4,995+VAT
PORTABLE APPLIANCE TESTING
Are you looking for a PAT testing franchise or to start a PAT testing business? Discover our Portable Appliance Testing business opportunity!
Just £4,995+VAT
HIRE BAR
Are you looking to run your own mobile bar business or to buy a mobile bar? Our bar hire package could be for you!
Only £5,995+VAT
DJ & KARAOKE
Are you looking to run your own mobile DJ business or a karaoke franchise? Find out more about our DJ & Karaoke opportunity.
Just £5,995+VAT
HOME HELP
Are you looking for a home help business opportunity or a home help franchise? Make a living with our home help business opportunity.
From just £3,995+VAT
LOCKSMITH
Are you looking for a locksmith franchise or a locksmith business for sale? Find out more about our Locksmith business opportunity here!
Just £6,995+VAT
COMING SOON
This opportunity is coming soon. Check back regularly to see the new business opportunities we have on offer.
COMING SOON
This opportunity is coming soon. Check back regularly to see the new business opportunities we have on offer.


{% extends "petitions/hearings/hearingsummary_list.html" %} {% block replacedatefilter%} {%endblock%} {% block hearingtabletitle %}
This table shows all the hearing summary that you have submitted. You can search using any criteria


A loaf is a, usually rounded or oblong, mass of food, typically and originally of bread. It is common to bake bread in a rectangular bread pan, also called a loaf pan, because some kinds of bread dough tend to collapse and spread out during the cooking process.
Cake is a form of sweet food made from flour, sugar, and other ingredients, that is usually baked. In their oldest forms, cakes were modifications of bread, but cakes now cover a wide range of preparations
A cookie is a baked or cooked snack or dessert that is typically small, flat and sweet. It usually contains flour, sugar, egg, and some type of oil, fat, or butter. It may include other ingredients such as raisins, oats, chocolate chips, nuts, etc.
A drink is a liquid intended for human consumption. In addition to their basic function of satisfying thirst, drinks play important roles in human culture. Common types of drinks include plain drinking water, milk, juice and soft drinks. Traditionally warm beverages include coffee, tea, and hot chocolate


Take a photo of the ID
No glitches, no hassles, and accessible from even the simplest smartphone. In one look, inVOID knows whether the ID is authentic or not.
This is not a drill: now, take a selfie
Who knew biometric verification might as well be fun for some customers? This is where inVOID’s AI-integrated facial recognition kicks in.
Viola! Your form is ready !
Easy, peasy, text squeezy? The text extracted from the ID is verified with official databases in real time, and then is auto-filled on to the information form for the customer’s convenience.
And one final step to make it foolproof.
inVOID believes in providing layered protection against fraudsters. To make sure that there is actually a live person undertaking the verification process, we ask them to perform certain easy gestures.
inVOID’s Dashboard, Exclusively For You
Fulfill all your authentication needs through a single page.
With the Dashboard feature, InVoid makes sure that the authentication process remains accessible and transparent to your business at each and every step. The Dashboard enables you to access results of all customers who undertake this verification process through a single portal.


Home
(current)
About
Glossary
These prices are not 100% guaranteed. However, it is a close estimate
Enter Information:
Choose Product's category
Choose Product's sub-category
Preview


This area is for website admins only, if you are an admin please login with the provided username and password below


Home
{{ title }}
"This background image was taken from https://www.etsy.com/listing/228200273/ocean-fish-art-ocean-scene-teal-decor . Replace if this grows beyond a school project!"
{% block content %}{% endblock %}


Hi, I'm Jonathan. I'm an undergraduate at UCT, studying Computer Science and Computer Games Development.
I intend to one day be changing the lives of people, be it through delivering stories through games, or through useful software. Technology, computers and games have always been an interest of mine, and I want to know as much as I can about them.
See my CV or contact me through phone or email.


Display Control
Prev
Play
Pause
Next
GOTO
Refresh
Blackboard Control
Lottery
Ranking
Close
Question Answering Control
Prepare
start
ranking
close
Content
Nickname
Reg Code
Time
Jill
Smith
50
50
50


Season: {{ activeSeason.title }} Round: {{ activeSeason.currentRound }}
POSITIONING
- WAITING FOR YOUR MOVE
- Activate Meta Mode in game.
Season: {{ activeSeason.title }} Round: {{ activeSeason.currentRound }}
COMBAT
Season: {{ activeSeason.title }} Round: {{ activeSeason.currentRound }}
RESULTS


MizuAkari Image Recognition
Choose your file
Our machine will try to predict what it is
{% block content %}
{% endblock %}


List of Methods |
Description |
| #each |
each {|x| ...}
Yields all elements. |
| #include?(value) |
Returns true if any elements == value |
| #map or collect |
map/collect {|x| ...}
Returns an array with the results from block. |
| #each_with_index |
each_with_index {|x, i| ...}
Yields all elements with their indeces. |
| #sort |
sort [{|a, b| ...}]
Returns array sorted by <=> operator or by block. Default block { |a, b| a <=> b }. |
| #all? |
[a, b, c].all? {|letter| letter.length >= 3} #true
Passes each element of the collection to the given block. The method returns true if the block never returns false. |
| #count |
ar1 = [1,2,4,3]
ar1.count # = 4
Returns the number of items in enum through enumeration. |


about.me
read.me
POPVR.IO
HOLODECK
Test Build
Click to Start
Will take a minute to load, please be patient
Best Experienced on Chrome


Grumpy Wizard Travels To Castle
The wizard was hungry, tired, and very grumpy. Standing above the valley, he couldn't help feeling mad that he would have to cross the valley and then climb the mountain to reach the castle.
The wizard was hungry, tired, and very grumpy. Standing above the valley, he couldn't help feeling mad that he would have to cross the valley and then climb the mountain to reach the castle.
Cats are still not my favorite. I just wanted to point that out incase you missed my dbc2.html. They're crazy to the max and I just don't get them. DOGS RULE!


Tenacious and empathetic human looking to transition into the gaming industry.
I'm a natural leader with a wide variety of technical and soft skills from a long career in software development, including indie game development.
I've built teams and companies and products by listening, staying focused, and working super hard.
Now, I would love to make games with you!
I have a long history in all kinds of software development but my passion is for creating and building.
From building games and apps to growing teams and departments, I am a resourceful, kind, and engaged teammate who loves to help others get where they want to go. All while crushing goals and maintaining laser-like focus on the things that need to get done.
I am a firm believer that you can achieve more together and that honest communication is the key to most problems. I have a proven record in helping teams achieve amazing things.
Values
A Variety of Skills
Below you'll find info about my most compelling projects and prototypes.
Completed indie game released on Steam.
Designed and built over the course of 20 months, this was my first game and I went all-in. From prototype playtesting to a successful Kickstarter campaign and beyond, you could say I bit off a lot. It was a tremendous, unbelievable experience and I loved every minute of it!
Druids was built in Unity before Unity2D was really a thing so I used the Orthello sprite engine as a base. It launched with a single player campaign of over 50 hand-made levels against a challenging AI, boss battles, online multiplayer, local multiplayer, and Steam Cards and Achievements.
I consistently managed the project through a series of milestones yet adjusted gameplay features through iteration and playtesting. Contractors were used for audio, art, animation, core AI programming, and PR. Oh yeah, I also kept up with constant social media promotion and networking.
I learned what it takes to release a game to the world: dedication, consistency, marketing, testing, polishing, and more!
Game details available at the website.
Prototype, Action RPG
My current passion project, an action RPG where you play as a mythical monster roaming the countryside in search of food, loot, and mayhem.
Players can destroy villages, manage hunger by eating inhabitants and animals, gather materials, find quests, and throw trees. Utilizes Component- and Object-oriented methods to keep behaviors discrete and modular.
Lots of planned features to practice on including lair building progression, dialog, quests, character selection, and much more.
Focus: 3D player control, camera movement, 3D modeling/rigging and animation, architecture, complex gameplay with a living world.
Prototype, 3D Endless Runner
This began as a simple sketch and concept for an endless runner that would include Tetris-like rotatable portions of the path that would serve as challenging obstacles.
Focus: 3D work, modeling, rigging and animation in Blender of a low-poly character with running and idle animations, maze generation.
Prototype, 2D Endless Hack n' Slash
The core idea here was to make an endless Zelda dungeon/runner cross, where distance over time was the primary objective. The theme of the game has evolved into a sports broadcast type of frame story.
Players control a party of fantasy trope character classes where the party leader is the only one visible and dictates which attacks, powers, and speed are in use. Players swap the leader to best handle the current situation, providing some strategic elements.
I've implemented the core mechanics of party swapping, character and camera controllers, and board generation in both 2D and 3D.
Prototype, Strategy
Smite is a retro-styled real time puzzle/strategy (god) game where you grow your population and keep them in line with god-like power.
Your followers will traverse the area and settle new villages. If they get stuck, they will become dissatisfied and plot to overthrow your people.
Focus: learning pixel perfect 2D camera and practicing my pixel art. Follower AI for traversal and growing villages.


Word/excel makros
An explanation of how to createa malicious makro-wordfile.
https://www.offensive-security.com/metasploit-unleashed/vbscript-infection-methods/
Also expand on DDE and others
Embed a executable inside a PowerPoint
You can embed executables inside PowerPoint presentations and then have them execute about animations.


Golden Wheel's Spiron:
Ah yes, the Calculator... Tell Brunon this:
"The enemy is within your own house."
Or,
"It is closer than you think."
If you don't understand this, I give up. Go and ask someone else...


--- layout: default title: Ear Plugs - New Advanced-Tech Hearing Protection | DUBS description: Experience quality sound & protect your hearing with DUBS advanced-tech earplugs. Our ear plugs reduce the volume without sacrificing your audio experience. ---
DUBS Acoustic Filters are advanced tech earplugs that reduce volume without sacrificing the clarity of sound. Whether you're in the city, at a concert, on a plane or at the game, the DUBS protect your ears to keep you going louder, longer.
Today, we encounter more harmful noise than ever before. While we’ve become accustomed to the roar of airplanes, construction sites, concerts, and clubs, our ears have not, leading to a rise in Noise Induced Hearing Loss. The DUBS feature a 12 decibel Noise Reduction Rating (NRR) to help protect your ears.
Traditional ear plugs block all noise, muffling the sounds of the world around you. The DUBS are different. Developed by leading acoustic engineers and designers, the DUBS have been pre-tuned to target specific frequencies, so you hear the world the way it was meant to be heard.


High level TypeScript Compiler API and TypeScript/JavaScript refactor APIs based on ts-morph (ex ts-simple-ast) library.
Browser support (out of the box)
Many APIs for project's code refactors.
APIs useful to me that unfortunately are out of topic to pull them to in ts-morph like astPath or generalNode abstraction or
utilities related with TypeScript Plugin development like abstract types, Tests Helpers, AST, repeated code, codefixes generic structure, etc
Access to not so public areas of TypeScript APIs or some encapsulated hacks
npm install ts-simple-ast-extra
NOTE: Currently, although there is API documentation I would say the best source of documentation are the test.
spec
folder using the same name. At the beggining there is alwasys a simple usage
src/refactor
contain many interesting code refactors at the project levelIn general they have the same API, you pass a SourceFile and the Project (they need access to the LanguageService):
import {Project, addBracesToArrowFunctions} from 'ts-simple-ast-extra'
const project = new Project()
const f = project.createSourceFile('f1.ts', `
const c = a => a+1
export f = (b:number h: Date[])=>null
`)
addBracesToArrowFunctions(project, f)
console.log(f.getText())
/*
const c = a => {
return a + 1;
}
export f = (b:number h: Date[])=>{
return null;
}
*/
import {Project, format} from 'ts-simple-ast-extra'
const project = new Project()
const file = project.createSourceFile('f2.ts', `
function f(){
alert(1);
log(2,function(){
return 1+g(a=>{
return 2
} )
} );
}`)
const output = format({
file,
project,
trailingSemicolons: 'never',
indentSize: 2,
})
console.log(f.getText())
/*
function f() {
alert(1)
log(2, function() {
return 1 + g(a => {
return 2
})
})
}
*/
Generated using TypeDoc


--- layout: project title: "Hacktoberfest" image: path: /assets/images/buttons/hf-icon.png thumbnail: /assets/images/buttons/hf-icon.png link: /programs/hacktoberfest permalink: /programs/hacktoberfest excerpt: "Layer5 - Hacktoberfest" ---
Hacktoberfest is open to everyone in the global community. Whether you’re a developer, student learning to code, event host, or a company of any size, you can help drive growth of open source and make positive contributions to an ever-growing community. All backgrounds and skill levels are encouraged to complete the challenge. Read more about Hacktoberfest.
While small, the Layer5 community represents the largest collection of service mesh projects and their maintainers in the world. We build projects to provide learning environments, deployment and operational best practices, performance benchmarks, create documentation, share networking opportunities, and more. Our shared commitment to the open source spirit pushes Layer5 projects forward. New members are always welcome.
Join us at the Layer5 Hacktoberfest MeetupsWe have lined up four meetups, spread across the month of October to introduce you to the Layer5 project repositories and help you get started on those pull requests. Sign up!
A long list of help-wanted have been specially curated in anticipation of our hackers!
Here is a list of beginner friendly issues to help you make your mark in open-source and move towards successfully completing the Hacktoberfest challenge.
Layer5 is a warm and welcoming community of open source contributors. We are continuously welcoming new members and are looking for your input. Help us better prepare to support you as you find your way into the world of Open Source by filling up this questionnaire.
Interested? Checkout the Layer5 community and join us on Slack


Slippery Rock University: Department of Computer Science
275 Advanced Technology & Science Hall
Slippery Rock University
Slippery Rock, Pennsylvania, 16057
Phone:<PHONE_NUMBER>
Department Chairperson: Deborah Whitfield
Assistant Chairperson: Bernie Zhou
Department Contact: Vicki Sparano
Student Webmaster: Austin Bolt


| 1 | /** | |
| 2 | * Copyright 2010 Mozilla Foundation | |
| 3 | * | |
| 4 | * Licensed to the Apache Software Foundation (ASF) under one | |
| 5 | * or more contributor license agreements. See the NOTICE file | |
| 6 | * distributed with this work for additional information | |
| 7 | * regarding copyright ownership. The ASF licenses this file | |
| 8 | * to you under the Apache License, Version 2.0 (the | |
| 9 | * "License"); you may not use this file except in compliance | |
| 10 | * with the License. You may obtain a copy of the License at | |
| 11 | * | |
| 12 | * http://www.apache.org/licenses/LICENSE-2.0 | |
| 13 | * | |
| 14 | * Unless required by applicable law or agreed to in writing, software | |
| 15 | * distributed under the License is distributed on an "AS IS" BASIS, | |
| 16 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| 17 | * See the License for the specific language governing permissions and | |
| 18 | * limitations under the License. | |
| 19 | */ | |
| 20 | package com.mozilla.pig.eval.json; | |
| 21 | ||
| 22 | import java.io.EOFException; | |
| 23 | import java.io.IOException; | |
| 24 | import java.util.HashMap; | |
| 25 | import java.util.List; | |
| 26 | import java.util.Map; | |
| 27 | ||
| 28 | import org.apache.pig.EvalFunc; | |
| 29 | import org.apache.pig.data.BagFactory; | |
| 30 | import org.apache.pig.data.DataBag; | |
| 31 | import org.apache.pig.data.Tuple; | |
| 32 | import org.apache.pig.data.TupleFactory; | |
| 33 | ||
| 34 | import com.fasterxml.jackson.core.JsonParseException; | |
| 35 | import com.fasterxml.jackson.core.type.TypeReference; | |
| 36 | import com.fasterxml.jackson.databind.JsonMappingException; | |
| 37 | import com.fasterxml.jackson.databind.ObjectMapper; | |
| 38 | ||
| 39 | public class JsonMap extends EvalFunc<Map<String, Object>> { | |
| 40 | ||
| 41 | public static enum ERRORS { | |
| 42 | JSONParseError, JSONMappingError, EOFError, GenericError | |
| 43 | }; | |
| 44 | ||
| 45 | private static final BagFactory bagFactory = BagFactory.getInstance(); | |
| 46 | protected static final TupleFactory tupleFactory = TupleFactory.getInstance(); | |
| 47 | protected final ObjectMapper jsonMapper = new ObjectMapper(); | |
| 48 | ||
| 49 | /** | |
| 50 | * Converts List objects to DataBag to keep Pig happy | |
| 51 | * | |
| 52 | * @param l | |
| 53 | * @return | |
| 54 | */ | |
| 55 | @SuppressWarnings("unchecked") | |
| 56 | private DataBag convertListToBag(List<Object> l) { | |
| 57 | DataBag dbag = bagFactory.newDefaultBag(); | |
| 58 | Tuple t = tupleFactory.newTuple(); | |
| 59 | for (Object o : l) { | |
| 60 |
1
1. convertListToBag : negated conditional → KILLED |
if (o instanceof List) { |
| 61 |
1
1. convertListToBag : removed call to org/apache/pig/data/DataBag::addAll → NO_COVERAGE |
dbag.addAll(convertListToBag((List<Object>) o)); |
| 62 | } else { | |
| 63 |
1
1. convertListToBag : removed call to org/apache/pig/data/Tuple::append → SURVIVED |
t.append(o); |
| 64 | } | |
| 65 | } | |
| 66 | ||
| 67 |
2
1. convertListToBag : changed conditional boundary → SURVIVED 2. convertListToBag : negated conditional → SURVIVED |
if (t.size() > 0) { |
| 68 |
1
1. convertListToBag : removed call to org/apache/pig/data/DataBag::add → SURVIVED |
dbag.add(t); |
| 69 | } | |
| 70 | ||
| 71 |
1
1. convertListToBag : mutated return of Object value for com/mozilla/pig/eval/json/JsonMap::convertListToBag to ( if (x != null) null else throw new RuntimeException ) → SURVIVED |
return dbag; |
| 72 | } | |
| 73 | ||
| 74 | /** | |
| 75 | * Convert map and its values to types that Pig can handle | |
| 76 | * | |
| 77 | * @param m | |
| 78 | * @return | |
| 79 | */ | |
| 80 | @SuppressWarnings("unchecked") | |
| 81 | protected Map<String, Object> makeSafe(Map<String, Object> m) { | |
| 82 | Map<String, Object> safeValues = new HashMap<String, Object>(); | |
| 83 | for (Map.Entry<String, Object> entry : m.entrySet()) { | |
| 84 | Object v = entry.getValue(); | |
| 85 |
2
1. makeSafe : negated conditional → SURVIVED 2. makeSafe : negated conditional → KILLED |
if (v != null && v instanceof List) { |
| 86 | DataBag db = convertListToBag((List<Object>) v); | |
| 87 | safeValues.put(entry.getKey(), db); | |
| 88 |
2
1. makeSafe : negated conditional → SURVIVED 2. makeSafe : negated conditional → KILLED |
} else if (v != null && v instanceof Map) { |
| 89 | safeValues.put(entry.getKey(), makeSafe((Map<String, Object>) v)); | |
| 90 | } else { | |
| 91 | safeValues.put(entry.getKey(), entry.getValue()); | |
| 92 | } | |
| 93 | } | |
| 94 | ||
| 95 |
1
1. makeSafe : mutated return of Object value for com/mozilla/pig/eval/json/JsonMap::makeSafe to ( if (x != null) null else throw new RuntimeException ) → KILLED |
return safeValues; |
| 96 | } | |
| 97 | ||
| 98 | @Override | |
| 99 | public Map<String, Object> exec(Tuple input) throws IOException { | |
| 100 |
2
1. exec : negated conditional → KILLED 2. exec : negated conditional → KILLED |
if (input == null || input.size() == 0) { |
| 101 |
1
1. exec : mutated return of Object value for com/mozilla/pig/eval/json/JsonMap::exec to ( if (x != null) null else throw new RuntimeException ) → NO_COVERAGE |
return null; |
| 102 | } | |
| 103 | ||
| 104 | try { | |
| 105 | Map<String, Object> values = jsonMapper.readValue((String) input.get(0), | |
| 106 | new TypeReference<Map<String, Object>>() {}); | |
| 107 |
1
1. exec : mutated return of Object value for com/mozilla/pig/eval/json/JsonMap::exec to ( if (x != null) null else throw new RuntimeException ) → KILLED |
return makeSafe(values); |
| 108 | } catch (JsonParseException e) { | |
| 109 |
1
1. exec : removed call to com/mozilla/pig/eval/json/JsonMap::warn → NO_COVERAGE |
warn("JSON Parse Error: " + e.getMessage(), ERRORS.JSONParseError); |
| 110 | } catch (JsonMappingException e) { | |
| 111 |
1
1. exec : removed call to com/mozilla/pig/eval/json/JsonMap::warn → NO_COVERAGE |
warn("JSON Mapping Error: " + e.getMessage(), ERRORS.JSONMappingError); |
| 112 | } catch (EOFException e) { | |
| 113 |
1
1. exec : removed call to com/mozilla/pig/eval/json/JsonMap::warn → NO_COVERAGE |
warn("Hit EOF unexpectedly", ERRORS.EOFError); |
| 114 | } catch (Exception e) { | |
| 115 |
1
1. exec : removed call to com/mozilla/pig/eval/json/JsonMap::warn → NO_COVERAGE |
warn("Generic error during JSON mapping", ERRORS.GenericError); |
| 116 | } | |
| 117 | ||
| 118 |
1
1. exec : mutated return of Object value for com/mozilla/pig/eval/json/JsonMap::exec to ( if (x != null) null else throw new RuntimeException ) → NO_COVERAGE |
return null; |
| 119 | } | |
| 120 | ||
| 121 | } | |
Mutations | ||
| 60 |
1.1 |
|
| 61 |
1.1 |
|
| 63 |
1.1 |
|
| 67 |
1.1 2.2 |
|
| 68 |
1.1 |
|
| 71 |
1.1 |
|
| 85 |
1.1 2.2 |
|
| 88 |
1.1 2.2 |
|
| 95 |
1.1 |
|
| 100 |
1.1 2.2 |
|
| 101 |
1.1 |
|
| 107 |
1.1 |
|
| 109 |
1.1 |
|
| 111 |
1.1 |
|
| 113 |
1.1 |
|
| 115 |
1.1 |
|
| 118 |
1.1 |


{% load static %}
UW Engineering Quiz | Quiz
{% csrf_token %}
Would you consider yourself as being creative?
I am very creative
I am somewhat creative
I am not creative
You have an assignment to write an essay about anything you want. How does that make you feel?
Excited! I can share my theories with the world
A bit apprehensive. I get overwhelmed with so many options
Annoyed. I would much rather be given a topic with clear instructions
How comfortable are you working in the outdoors?
I love the outdoors and wish I could work outside every day
Working outside would be okay, but only for short periods of time
I would rather work inside
What can you see yourself doing in the future?
Building things with moving parts
Designing buildings
Designing or building sensor based technology
Improving the way we use the world's resources
Making discoveries at the molecular level
Programming apps
Optimizing processes
How do you feel about group work?
I enjoy working with others
I occasionally like working with others
I do not like working as part of a team. I would rather work alone
What high school class did you enjoy the most?
Autoshop
Biology
Business
Chemistry
Computer Science
Geography
History
Language Arts
Math
Physics
Visual Arts
What high school class did you enjoy the least?
Autoshop
Biology
Business
Chemistry
Computer Science
Geography
History
Language Arts
Math
Physics
Visual Arts
What type of club would you consider joining?
Art or design club (i.e. Fashion for Change)
Autoshop club (i.e. Autonomoose Autonomous Car Club)
Business club (i.e. UW Finance Association)
Consulting club (i.e. DECA)
Environment club (i.e. UW Energy Network)
Robotics club (i.e. UW Robotics Team)
Hacker club (i.e. UW Hacks)
Student council (i.e. Engineering Society)
What type of club would you NOT want to join?
Art or design club (i.e. Fashion for Change)
Autoshop club (i.e. Autonomoose Autonomous Car Club)
Business club (i.e. UW Finance Association)
Consulting club (i.e. DECA)
Environment club (i.e. UW Energy Network)
Robotics club (i.e. UW Robotics Team)
Hacker club (i.e. UW Hacks)
Student council (i.e. Engineering Society)
What project would you want to be a part of?
Prototyping a musical instrument for children
Designing an Olympic village
Programming a robot that can make you dinner
Building the world’s most powerful supercomputer
Designing a water treatment system for Mars
Creating a battery from recycled material
Optimizing the Uber Pool routes
What project do you find the least interesting?
Prototyping a musical instrument for children
Designing an Olympic village
Programming a robot that can make you dinner
Building the world’s most powerful supercomputer
Designing a water treatment system for Mars
Creating a battery from recycled material
Optimizing the Uber Pool routes
If engineering didn’t exist, what would you consider studying?
Applied Science
Business
Computer Science
Economics
English Literature
Environmental Studies
Finance
Geography
Graphic Design
Health Studies
Marketing
Math
Political Science
Psychology
Visual Arts
How would you describe your drawing abilities?
Really good, I can draw just about anything
I am not the best, but I am not the worst
I am not very good
What industry can you see yourself working in, in the future? Select all that apply.
Architecture (i.e. Designing a building taller than the CN Tower)
Automotive (i.e. Designing a new autonomous car)
Entrepreneurship (i.e. Starting your own consulting company)
Construction (i.e. Building a smart city)
Health (i.e. Creating technology for minimally invasive surgeries)
Environment (i.e. Producing energy in sustainable ways)
Manufacturing (i.e. Optimization or automation of manufacturing processes)
Technology (i.e. Working with cloud based software)


The Apprentice's Lubna & Lottie clash again just weeks after 'racism scandal'
The Apprentice’s Lottie Lion has been slammed by Lubna Farhan for ‘not learning from her mistakes’ after the racism row that threatened her position on the show in a fiery Twitter spat.
Lottie and Lubna got vicious online after fellow candidate Ryan-Mark Parsons egged on the rumour that he was now dating 19-year-old Lottie.
When Lubna, who was eliminated three weeks ago, wrote: ‘Lolzz you guys are jokers’, Lottie hit back at the comment and told her: ‘Stop trying to stay relevant.’
As a result, the flippant comment turned nasty and Lubna responded: ‘You don’t sound like someone who regrets making racist comments. Too bad you don’t learn from your mistakes.
‘Good luck in your new publicity stunt.’
The pair definitely have no love lost between them in the aftermath of the show, especially after it emerged that Lottie had sent Lubna ‘racist comments’ in candidates shared group chat.
Advertisement Advertisement
Librarian Lottie was investigated by the BBC following the complaints after she told rival Lubna to ‘shut up Gandhi’ and threatened to ‘f***ing knock her out’ in a string of vile messages.
Fired hopeful Souleyman Bah also spoke out, saying he too experienced similar comments during his brief stint on the show.
The BBC later told Metro.co.uk: ‘While this happened on a private messenger service once filming had concluded, the BBC nevertheless still expects the candidates to behave appropriately.
‘The production company have looked into the issue and reported back, Lottie has been informed that her comments were wholly unacceptable and is in no doubt about our view on this.’
Jemelin Artiga was later added to the list of fellow candidates that have spoken out against Lottie, calling her out on Twitter after she was ‘let off’ by the Beeb.
Lottie later defended herself claiming the comments were ‘misinterpreted’ and ‘taken out of context’.
The Apprentice continues Wednesday at 9pm on BBC One.
Got a showbiz story?
If you've got a story, video or pictures get in touch with the Metro.co.uk Entertainment team by emailing us<EMAIL_ADDRESS>calling 020 3615 2145 or by visiting our Submit Stuff page - we'd love to hear from you.


import ee
import numpy as np
import warnings
import requests
from .common import _index
from .common import _maskClouds
from .common import _get_scale_params
from .common import _get_offset_params
from .common import _scale_STAC
from .common import _preprocess
def _extend_eeImageCollection():
"""Decorator. Extends the ee.ImageCollection class."""
return lambda f: (setattr(ee.imagecollection.ImageCollection, f.__name__, f) or f)
[docs]@_extend_eeImageCollection()
def closest(self, date, tolerance=1, unit="month"):
"""Gets the closest image (or set of images if the collection intersects a region that requires multiple scenes) to the specified date.
Tip
----------
Check more info about getting the closest image to a specific date in the :ref:`User Guide<Closest Image to a Specific Date>`.
Parameters
----------
self : ee.ImageCollection [this]
Image Collection from which to get the closest image to the specified date.
date : ee.Date | string
Date of interest. The method will look for images closest to this date.
tolerance : float, default = 1
Filter the collection to [date - tolerance, date + tolerance) before searching the closest image. This speeds up the searching process for collections
with a high temporal resolution.
unit : string, default = 'month'
Units for tolerance. Available units: 'year', 'month', 'week', 'day', 'hour', 'minute' or 'second'.
Returns
-------
ee.ImageCollection
Closest images to the specified date.
Examples
--------
>>> import ee, eemont
>>> ee.Initialize()
>>> S2 = ee.ImageCollection('COPERNICUS/S2_SR').closest('2020-10-15')
"""
if not isinstance(date, ee.ee_date.Date):
date = ee.Date(date)
startDate = date.advance(-tolerance, unit)
endDate = date.advance(tolerance, unit)
self = self.filterDate(startDate, endDate)
def setProperties(img):
img = img.set(
"dateDist",
ee.Number(img.get("system:time_start")).subtract(date.millis()).abs(),
)
img = img.set("day", ee.Date(img.get("system:time_start")).get("day"))
img = img.set("month", ee.Date(img.get("system:time_start")).get("month"))
img = img.set("year", ee.Date(img.get("system:time_start")).get("year"))
return img
self = self.map(setProperties).sort("dateDist")
closestImageTime = self.limit(1).first().get("system:time_start")
dayToFilter = ee.Filter.eq("day", ee.Date(closestImageTime).get("day"))
monthToFilter = ee.Filter.eq("month", ee.Date(closestImageTime).get("month"))
yearToFilter = ee.Filter.eq("year", ee.Date(closestImageTime).get("year"))
self = self.filter(ee.Filter.And(dayToFilter, monthToFilter, yearToFilter))
return self
[docs]@_extend_eeImageCollection()
def getTimeSeriesByRegion(
self,
reducer,
bands=None,
geometry=None,
scale=None,
crs=None,
crsTransform=None,
bestEffort=False,
maxPixels=1e12,
tileScale=1,
dateColumn="date",
dateFormat="ISO",
naValue=-9999,
):
"""Gets the time series by region for the given image collection and geometry (feature or feature collection are also supported) according to the specified reducer (or reducers).
Tip
----------
Check more info about time series in the :ref:`User Guide<Time Series By Regions>`.
Parameters
----------
self : ee.ImageCollection (this)
Image collection to get the time series from.
reducer : ee.Reducer | list[ee.Reducer]
Reducer or list of reducers to use for region reduction.
bands : str | list[str], default = None
Selection of bands to get the time series from. Defaults to all bands in the image collection.
geometry : ee.Geometry | ee.Feature | ee.FeatureCollection, default = None
Geometry to perform the region reduction. If ee.Feature or ee.FeatureCollection, the geometry() method is called. In order to get reductions by each feature please see
the getTimeSeriesByRegions() method. Defaults to the footprint of the first band for each image in the collection.
scale : numeric, default = None
Nomical scale in meters.
crs : Projection, default = None
The projection to work in. If unspecified, the projection of the image's first band is used. If specified in addition to scale, rescaled to the specified scale.
crsTransform : list, default = None
The list of CRS transform values. This is a row-major ordering of the 3x2 transform matrix.
This option is mutually exclusive with 'scale', and replaces any transform already set on the projection.
bestEffort : boolean, default = False
If the polygon would contain too many pixels at the given scale, compute and use a larger scale which would allow the operation to succeed.
maxPixels : numeric, default = 1e12
The maximum number of pixels to reduce.
tileScale : numeric, default = 1
A scaling factor used to reduce aggregation tile size; using a larger tileScale (e.g. 2 or 4) may enable computations that run out of memory with the default.
dateColumn : str, default = 'date'
Output name of the date column.
dateFormat : str, default = 'ISO'
Output format of the date column. Defaults to ISO. Available options: 'ms' (for milliseconds), 'ISO' (for ISO Standard Format) or a custom format pattern.
naValue : numeric, default = -9999
Value to use as NA when the region reduction doesn't retrieve a value due to masked pixels.
Returns
-------
ee.FeatureCollection
Time series by region retrieved as a Feature Collection.
See Also
--------
getTimeSeriesByRegions : Gets the time series by regions for the given image collection and feature collection according to the specified reducer (or reducers).
Examples
--------
>>> import ee, eemont
>>> ee.Initialize()
>>> f1 = ee.Feature(ee.Geometry.Point([3.984770,48.767221]).buffer(50),{'ID':'A'})
>>> f2 = ee.Feature(ee.Geometry.Point([4.101367,48.748076]).buffer(50),{'ID':'B'})
>>> fc = ee.FeatureCollection([f1,f2])
>>> S2 = (ee.ImageCollection('COPERNICUS/S2_SR')
... .filterBounds(fc)
... .filterDate('2020-01-01','2021-01-01')
... .maskClouds()
... .scaleAndOffset()
... .spectralIndices(['EVI','NDVI']))
>>> ts = S2.getTimeSeriesByRegion(reducer = [ee.Reducer.mean(),ee.Reducer.median()],
... geometry = fc,
... bands = ['EVI','NDVI'],
... scale = 10)
"""
if bands != None:
if not isinstance(bands, list):
bands = [bands]
self = self.select(bands)
if not isinstance(reducer, list):
reducer = [reducer]
if not isinstance(geometry, ee.geometry.Geometry):
geometry = geometry.geometry()
collections = []
for red in reducer:
reducerName = red.getOutputs().get(0)
def reduceImageCollectionByRegion(img):
dictionary = img.reduceRegion(
red,
geometry,
scale,
crs,
crsTransform,
bestEffort,
maxPixels,
tileScale,
)
if dateFormat == "ms":
date = ee.Date(img.get("system:time_start")).millis()
elif dateFormat == "ISO":
date = ee.Date(img.get("system:time_start")).format()
else:
date = ee.Date(img.get("system:time_start")).format(dateFormat)
return ee.Feature(None, dictionary).set(
{dateColumn: date, "reducer": reducerName}
)
collections.append(
ee.FeatureCollection(self.map(reduceImageCollectionByRegion))
)
flattenfc = ee.FeatureCollection(collections).flatten()
def setNA(feature):
feature = ee.Algorithms.If(
condition=feature.propertyNames().size().eq(3),
trueCase=feature.set(
ee.Dictionary.fromLists(bands, [naValue] * len(bands))
),
falseCase=feature,
)
feature = ee.Feature(feature)
return feature
return flattenfc.map(setNA)
[docs]@_extend_eeImageCollection()
def getTimeSeriesByRegions(
self,
reducer,
collection,
bands=None,
scale=None,
crs=None,
crsTransform=None,
tileScale=1,
dateColumn="date",
dateFormat="ISO",
naValue=-9999,
):
"""Gets the time series by regions for the given image collection and feature collection according to the specified reducer (or reducers).
Tip
----------
Check more info about time series in the :ref:`User Guide<Time Series By Regions>`.
Parameters
----------
self : ee.ImageCollection (this)
Image collection to get the time series from.
reducer : ee.Reducer | list[ee.Reducer]
Reducer or list of reducers to use for region reduction.
collection : ee.FeatureCollection
Feature Collection to perform the reductions on. Image reductions are applied to each feature in the collection.
bands : str | list[str], default = None
Selection of bands to get the time series from. Defaults to all bands in the image collection.
scale : numeric, default = None
Nomical scale in meters.
crs : Projection, default = None
The projection to work in. If unspecified, the projection of the image's first band is used. If specified in addition to scale, rescaled to the specified scale.
crsTransform : list, default = None
The list of CRS transform values. This is a row-major ordering of the 3x2 transform matrix.
This option is mutually exclusive with 'scale', and replaces any transform already set on the projection.
tileScale : numeric, default = 1
A scaling factor used to reduce aggregation tile size; using a larger tileScale (e.g. 2 or 4) may enable computations that run out of memory with the default.
dateColumn : str, default = 'date'
Output name of the date column.
dateFormat : str, default = 'ISO'
Output format of the date column. Defaults to ISO. Available options: 'ms' (for milliseconds), 'ISO' (for ISO Standard Format) or a custom format pattern.
naValue : numeric, default = -9999
Value to use as NA when the region reduction doesn't retrieve a value due to masked pixels.
Returns
-------
ee.FeatureCollection
Time series by regions retrieved as a Feature Collection.
See Also
--------
getTimeSeriesByRegion : Gets the time series by region for the given image collection and geometry (feature or feature collection are also supported)
according to the specified reducer (or reducers).
Examples
--------
>>> import ee, eemont
>>> ee.Initialize()
>>> f1 = ee.Feature(ee.Geometry.Point([3.984770,48.767221]).buffer(50),{'ID':'A'})
>>> f2 = ee.Feature(ee.Geometry.Point([4.101367,48.748076]).buffer(50),{'ID':'B'})
>>> fc = ee.FeatureCollection([f1,f2])
>>> S2 = (ee.ImageCollection('COPERNICUS/S2_SR')
... .filterBounds(fc)
... .filterDate('2020-01-01','2021-01-01')
... .maskClouds()
... .scaleAndOffset()
... .spectralIndices(['EVI','NDVI']))
>>> ts = S2.getTimeSeriesByRegions(reducer = [ee.Reducer.mean(),ee.Reducer.median()],
... collection = fc,
... bands = ['EVI','NDVI'],
... scale = 10)
"""
if bands != None:
if not isinstance(bands, list):
bands = [bands]
self = self.select(bands)
if not isinstance(reducer, list):
reducer = [reducer]
if not isinstance(collection, ee.featurecollection.FeatureCollection):
raise Exception("Parameter collection must be an ee.FeatureCollection!")
props = collection.first().propertyNames()
collections = []
imgList = self.toList(self.size())
for red in reducer:
reducerName = red.getOutputs().get(0)
def reduceImageCollectionByRegions(img):
img = ee.Image(img)
fc = img.reduceRegions(collection, red, scale, crs, crsTransform, tileScale)
if isinstance(bands, list):
if len(bands) == 1:
fc = ee.Algorithms.If(
condition=fc.first().propertyNames().size().eq(props.size()),
trueCase=fc,
falseCase=fc.select(
props.add(reducerName), props.add(bands[0])
),
)
fc = ee.FeatureCollection(fc)
if dateFormat == "ms":
date = ee.Date(img.get("system:time_start")).millis()
elif dateFormat == "ISO":
date = ee.Date(img.get("system:time_start")).format()
else:
date = ee.Date(img.get("system:time_start")).format(dateFormat)
def setProperties(feature):
return feature.set({dateColumn: date, "reducer": reducerName})
return fc.map(setProperties)
collections.append(self.map(reduceImageCollectionByRegions).flatten())
flattenfc = ee.FeatureCollection(collections).flatten()
def setNA(feature):
feature = ee.Algorithms.If(
condition=feature.propertyNames().size().eq(props.size().add(2)),
trueCase=feature.set(
ee.Dictionary.fromLists(bands, [naValue] * len(bands))
),
falseCase=feature,
)
feature = ee.Feature(feature)
return feature
return flattenfc.map(setNA)
[docs]@_extend_eeImageCollection()
def index(
self,
index="NDVI",
G=2.5,
C1=6.0,
C2=7.5,
L=1.0,
kernel="RBF",
sigma="0.5 * (a + b)",
p=2.0,
c=1.0,
online=False,
):
"""Computes one or more spectral indices (indices are added as bands) for an image collection.
Warning
-------------
**Pending Deprecation:** The :code:`index()` method will no longer be available for future versions. Please use :code:`spectralIndices()` instead.
Tip
----------
Check more info about the supported platforms and spectral indices in the :ref:`User Guide<Spectral Indices>`.
Parameters
----------
self : ee.ImageCollection
Image collection to compute indices on. Must be scaled to [0,1].
index : string | list[string], default = 'NDVI'
Index or list of indices to compute.\n
Available options:
- 'vegetation' : Compute all vegetation indices.
- 'burn' : Compute all burn indices.
- 'water' : Compute all water indices.
- 'snow' : Compute all snow indices.
- 'drought' : Compute all drought indices.
- 'kernel' : Compute all kernel indices.
- 'all' : Compute all indices listed below.
Vegetation indices:
- 'BNDVI' : Blue Normalized Difference Vegetation Index.
- 'CIG' : Chlorophyll Index - Green.
- 'CVI' : Chlorophyll Vegetation Index.
- 'EVI' : Enhanced Vegetation Index.
- 'EVI2' : Two-Band Enhanced Vegetation Index.
- 'GARI' : Green Atmospherically Resistant Vegetation Index.
- 'GBNDVI' : Green-Blue Normalized Difference Vegetation Index.
- 'GEMI' : Global Environment Monitoring Index.
- 'GLI' : Green Leaf Index.
- 'GNDVI' : Green Normalized Difference Vegetation Index.
- 'GRNDVI' : Green-Red Normalized Difference Vegetation Index.
- 'GVMI' : Global Vegetation Moisture Index.
- 'MNDVI' : Modified Normalized Difference Vegetation Index.
- 'NDVI' : Normalized Difference Vegetation Index.
- 'NGRDI' : Normalized Green Red Difference Index.
- 'RVI' : Ratio Vegetation Index.
- 'SAVI' : Soil-Adjusted Vegetation Index.
- 'VARI' : Visible Atmospherically Resistant Index.
Burn and fire indices:
- 'BAI' : Burned Area Index.
- 'BAIS2' : Burned Area Index for Sentinel 2.
- 'CSIT' : Char Soil Index Thermal.
- 'NBR' : Normalized Burn Ratio.
- 'NBRT' : Normalized Burn Ratio Thermal.
- 'NDVIT' : Normalized Difference Vegetation Index Thermal
- 'SAVIT' : Soil-Adjusted Vegetation Index Thermal.
Water indices:
- 'MNDWI' : Modified Normalized Difference Water Index.
- 'NDWI' : Normalized Difference Water Index.
Snow indices:
- 'NDSI' : Normalized Difference Snow Index.
Drought indices:
- 'NDDI' : Normalized Difference Drought Index.
Kernel indices:
- 'kEVI' : Kernel Enhanced Vegetation Index.
- 'kNDVI' : Kernel Normalized Difference Vegetation Index.
- 'kRVI' : Kernel Ratio Vegetation Index.
- 'kVARI' : Kernel Visible Atmospherically Resistant Index.
G : float, default = 2.5
Gain factor. Used just for index = 'EVI'.
C1 : float, default = 6.0
Coefficient 1 for the aerosol resistance term. Used just for index = 'EVI'.
C2 : float, default = 7.5
Coefficient 2 for the aerosol resistance term. Used just for index = 'EVI'.
L : float, default = 1.0
Canopy background adjustment. Used just for index = ['EVI','SAVI'].
kernel : str, default = 'RBF'
Kernel used for kernel indices.\n
Available options:
- 'linear' : Linear Kernel.
- 'RBF' : Radial Basis Function (RBF) Kernel.
- 'poly' : Polynomial Kernel.
sigma : str | float, default = '0.5 * (a + b)'
Length-scale parameter. Used for kernel = 'RBF'. If str, this must be an expression including 'a' and 'b'. If numeric, this must be positive.
p : float, default = 2.0
Kernel degree. Used for kernel = 'poly'.
c : float, default = 1.0
Free parameter that trades off the influence of higher-order versus lower-order terms in the polynomial kernel.
Used for kernel = 'poly'. This must be greater than or equal to 0.
online : boolean, default = False
Wheter to retrieve the most recent list of indices directly from the GitHub repository and not from the local copy.
.. versionadded:: 0.2.0
Returns
-------
ee.ImageCollection
Image collection with the computed spectral index, or indices, as new bands.
See Also
--------
scale : Scales bands on an image collection.
Examples
--------
>>> import ee, eemont
>>> ee.Authenticate()
>>> ee.Initialize()
>>> S2 = ee.ImageCollection('COPERNICUS/S2_SR').scale()
- Computing one spectral index:
>>> S2.index('NDVI')
- Computing indices with different parameters:
>>> S2.index('SAVI',L = 0.5)
- Computing multiple indices:
>>> S2.index(['NDVI','EVI','GNDVI'])
- Computing a specific group of indices:
>>> S2.index('vegetation')
- Computing kernel indices:
>>> S2.index(['kNDVI'],kernel = 'poly',p = 5)
- Computing all indices:
>>> S2.index('all')
"""
warnings.warn(
"index() will be deprecated in future versions, please use spectralIndices() instead",
PendingDeprecationWarning,
)
return _index(self, index, G, C1, C2, L, kernel, sigma, p, c, online)
[docs]@_extend_eeImageCollection()
def spectralIndices(
self,
index="NDVI",
G=2.5,
C1=6.0,
C2=7.5,
L=1.0,
kernel="RBF",
sigma="0.5 * (a + b)",
p=2.0,
c=1.0,
online=False,
):
"""Computes one or more spectral indices (indices are added as bands) for an image collection from the Awesome List of Spectral Indices.
Tip
----------
Check more info about the supported platforms and spectral indices in the :ref:`User Guide<Spectral Indices>`.
Parameters
----------
self : ee.ImageCollection
Image collection to compute indices on. Must be scaled to [0,1].
index : string | list[string], default = 'NDVI'
Index or list of indices to compute.\n
Available options:
- 'vegetation' : Compute all vegetation indices.
- 'burn' : Compute all burn indices.
- 'water' : Compute all water indices.
- 'snow' : Compute all snow indices.
- 'drought' : Compute all drought indices.
- 'kernel' : Compute all kernel indices.
- 'all' : Compute all indices listed below.
Vegetation indices:
- 'BNDVI' : Blue Normalized Difference Vegetation Index.
- 'CIG' : Chlorophyll Index - Green.
- 'CVI' : Chlorophyll Vegetation Index.
- 'EVI' : Enhanced Vegetation Index.
- 'EVI2' : Two-Band Enhanced Vegetation Index.
- 'GARI' : Green Atmospherically Resistant Vegetation Index.
- 'GBNDVI' : Green-Blue Normalized Difference Vegetation Index.
- 'GEMI' : Global Environment Monitoring Index.
- 'GLI' : Green Leaf Index.
- 'GNDVI' : Green Normalized Difference Vegetation Index.
- 'GRNDVI' : Green-Red Normalized Difference Vegetation Index.
- 'GVMI' : Global Vegetation Moisture Index.
- 'MNDVI' : Modified Normalized Difference Vegetation Index.
- 'NDVI' : Normalized Difference Vegetation Index.
- 'NGRDI' : Normalized Green Red Difference Index.
- 'RVI' : Ratio Vegetation Index.
- 'SAVI' : Soil-Adjusted Vegetation Index.
- 'VARI' : Visible Atmospherically Resistant Index.
Burn and fire indices:
- 'BAI' : Burned Area Index.
- 'BAIS2' : Burned Area Index for Sentinel 2.
- 'CSIT' : Char Soil Index Thermal.
- 'NBR' : Normalized Burn Ratio.
- 'NBRT' : Normalized Burn Ratio Thermal.
- 'NDVIT' : Normalized Difference Vegetation Index Thermal
- 'SAVIT' : Soil-Adjusted Vegetation Index Thermal.
Water indices:
- 'MNDWI' : Modified Normalized Difference Water Index.
- 'NDWI' : Normalized Difference Water Index.
Snow indices:
- 'NDSI' : Normalized Difference Snow Index.
Drought indices:
- 'NDDI' : Normalized Difference Drought Index.
Kernel indices:
- 'kEVI' : Kernel Enhanced Vegetation Index.
- 'kNDVI' : Kernel Normalized Difference Vegetation Index.
- 'kRVI' : Kernel Ratio Vegetation Index.
- 'kVARI' : Kernel Visible Atmospherically Resistant Index.
G : float, default = 2.5
Gain factor. Used just for index = 'EVI'.
C1 : float, default = 6.0
Coefficient 1 for the aerosol resistance term. Used just for index = 'EVI'.
C2 : float, default = 7.5
Coefficient 2 for the aerosol resistance term. Used just for index = 'EVI'.
L : float, default = 1.0
Canopy background adjustment. Used just for index = ['EVI','SAVI'].
kernel : str, default = 'RBF'
Kernel used for kernel indices.\n
Available options:
- 'linear' : Linear Kernel.
- 'RBF' : Radial Basis Function (RBF) Kernel.
- 'poly' : Polynomial Kernel.
sigma : str | float, default = '0.5 * (a + b)'
Length-scale parameter. Used for kernel = 'RBF'. If str, this must be an expression including 'a' and 'b'. If numeric, this must be positive.
p : float, default = 2.0
Kernel degree. Used for kernel = 'poly'.
c : float, default = 1.0
Free parameter that trades off the influence of higher-order versus lower-order terms in the polynomial kernel.
Used for kernel = 'poly'. This must be greater than or equal to 0.
online : boolean, default = False
Wheter to retrieve the most recent list of indices directly from the GitHub repository and not from the local copy.
Returns
-------
ee.ImageCollection
Image collection with the computed spectral index, or indices, as new bands.
See Also
--------
scaleAndOffset : Scales bands on an image collection.
Examples
--------
>>> import ee, eemont
>>> ee.Authenticate()
>>> ee.Initialize()
>>> S2 = ee.ImageCollection('COPERNICUS/S2_SR').scaleAndOffset()
- Computing one spectral index:
>>> S2.spectralIndices('NDVI')
- Computing indices with different parameters:
>>> S2.spectralIndices('SAVI',L = 0.5)
- Computing multiple indices:
>>> S2.spectralIndices(['NDVI','EVI','GNDVI'])
- Computing a specific group of indices:
>>> S2.spectralIndices('vegetation')
- Computing kernel indices:
>>> S2.spectralIndices(['kNDVI'],kernel = 'poly',p = 5)
- Computing all indices:
>>> S2.spectralIndices('all')
"""
return _index(self, index, G, C1, C2, L, kernel, sigma, p, c, online)
[docs]@_extend_eeImageCollection()
def maskClouds(
self,
method="cloud_prob",
prob=60,
maskCirrus=True,
maskShadows=True,
scaledImage=False,
dark=0.15,
cloudDist=1000,
buffer=250,
cdi=None,
):
"""Masks clouds and shadows in an image collection (valid just for Surface Reflectance products).
Tip
----------
Check more info about the supported platforms and clouds masking in the :ref:`User Guide<Masking Clouds and Shadows>`.
Parameters
----------
self : ee.ImageCollection [this]
Image collection to mask.
method : string, default = 'cloud_prob'
Method used to mask clouds.\n
Available options:
- 'cloud_prob' : Use cloud probability.
- 'qa' : Use Quality Assessment band.
This parameter is ignored for Landsat products.
prob : numeric [0, 100], default = 60
Cloud probability threshold. Valid just for method = 'prob'. This parameter is ignored for Landsat products.
maskCirrus : boolean, default = True
Whether to mask cirrus clouds. Valid just for method = 'qa'. This parameter is ignored for Landsat products.
maskShadows : boolean, default = True
Whether to mask cloud shadows. For more info see 'Braaten, J. 2020. Sentinel-2 Cloud Masking with s2cloudless. Google Earth Engine, Community Tutorials'.
scaledImage : boolean, default = False
Whether the pixel values are scaled to the range [0,1] (reflectance values). This parameter is ignored for Landsat products.
dark : float [0,1], default = 0.15
NIR threshold. NIR values below this threshold are potential cloud shadows. This parameter is ignored for Landsat products.
cloudDist : int, default = 1000
Maximum distance in meters (m) to look for cloud shadows from cloud edges. This parameter is ignored for Landsat products.
buffer : int, default = 250
Distance in meters (m) to dilate cloud and cloud shadows objects. This parameter is ignored for Landsat products.
cdi : float [-1,1], default = None
Cloud Displacement Index threshold. Values below this threshold are considered potential clouds.
A cdi = None means that the index is not used. For more info see
'Frantz, D., HaS, E., Uhl, A., Stoffels, J., Hill, J. 2018. Improvement of the Fmask algorithm for Sentinel-2 images:
Separating clouds from bright surfaces based on parallax effects. Remote Sensing of Environment 2015: 471-481'.
This parameter is ignored for Landsat products.
Returns
-------
ee.ImageCollection
Cloud-shadow masked image collection.
Notes
-----
This method may mask water as well as clouds for the Sentinel-3 Radiance product.
Examples
--------
>>> import ee, eemont
>>> ee.Authenticate()
>>> ee.Initialize()
>>> S2 = ee.ImageCollection('COPERNICUS/S2_SR').maskClouds(prob = 75,buffer = 300,cdi = -0.5)
"""
return _maskClouds(
self,
method,
prob,
maskCirrus,
maskShadows,
scaledImage,
dark,
cloudDist,
buffer,
cdi,
)
[docs]@_extend_eeImageCollection()
def scale(self):
"""Scales bands on an image collection.
Warning
-------------
**Pending Deprecation:** The :code:`scale()` method will no longer be available for future versions. Please use :code:`scaleAndOffset()` instead.
Tip
----------
Check more info about the supported platforms and image scaling the :ref:`User Guide<Image Scaling>`.
Parameters
----------
self : ee.ImageCollection (this)
Image collection to scale.
Returns
-------
ee.ImageCollection
Scaled image collection.
Examples
--------
>>> import ee, eemont
>>> ee.Authenticate()
>>> ee.Initialize()
>>> S2 = ee.ImageCollection('COPERNICUS/S2_SR').scale()
"""
warnings.warn(
"scale() will be deprecated in future versions, please use scaleAndOffset() instead",
PendingDeprecationWarning,
)
return _scale_STAC(self)
[docs]@_extend_eeImageCollection()
def getScaleParams(self):
"""Gets the scale parameters for each band of the image collection.
Parameters
----------
self : ee.ImageCollection (this)
Image collection to get the scale parameters from.
Returns
-------
dict
Dictionary with the scale parameters for each band.
See Also
--------
getOffsetParams : Gets the offset parameters for each band of the image collection.
scaleAndOffset : Scales bands on an image collection according to their scale and offset parameters.
Examples
--------
>>> import ee, eemont
>>> ee.Authenticate()
>>> ee.Initialize()
>>> ee.ImageCollection('MODIS/006/MOD11A2').getScaleParams()
{'Clear_sky_days': 1.0,
'Clear_sky_nights': 1.0,
'Day_view_angl': 1.0,
'Day_view_time': 0.1,
'Emis_31': 0.002,
'Emis_32': 0.002,
'LST_Day_1km': 0.02,
'LST_Night_1km': 0.02,
'Night_view_angl': 1.0,
'Night_view_time': 0.1,
'QC_Day': 1.0,
'QC_Night': 1.0}
"""
return _get_scale_params(self)
[docs]@_extend_eeImageCollection()
def getOffsetParams(self):
"""Gets the offset parameters for each band of the image collection.
Parameters
----------
self : ee.ImageCollection (this)
Image collection to get the offset parameters from.
Returns
-------
dict
Dictionary with the offset parameters for each band.
See Also
--------
getScaleParams : Gets the scale parameters for each band of the image collection.
scaleAndOffset : Scales bands on an image collection according to their scale and offset parameters.
Examples
--------
>>> import ee, eemont
>>> ee.Authenticate()
>>> ee.Initialize()
>>> ee.ImageCollection('MODIS/006/MOD11A2').getOffsetParams()
{'Clear_sky_days': 0.0,
'Clear_sky_nights': 0.0,
'Day_view_angl': -65.0,
'Day_view_time': 0.0,
'Emis_31': 0.49,
'Emis_32': 0.49,
'LST_Day_1km': 0.0,
'LST_Night_1km': 0.0,
'Night_view_angl': -65.0,
'Night_view_time': 0.0,
'QC_Day': 0.0,
'QC_Night': 0.0}
"""
return _get_offset_params(self)
[docs]@_extend_eeImageCollection()
def scaleAndOffset(self):
"""Scales bands on an image collection according to their scale and offset parameters.
Tip
----------
Check more info about the supported platforms and image scaling the :ref:`User Guide<Image Scaling>`.
Parameters
----------
self : ee.ImageCollection (this)
Image collection to scale.
Returns
-------
ee.ImageCollection
Scaled image collection.
See Also
--------
getOffsetParams : Gets the offset parameters for each band of the image collection.
getScaleParams : Gets the scale parameters for each band of the image collection.
Examples
--------
>>> import ee, eemont
>>> ee.Authenticate()
>>> ee.Initialize()
>>> S2 = ee.ImageCollection('COPERNICUS/S2_SR').scaleAndOffset()
"""
return _scale_STAC(self)
[docs]@_extend_eeImageCollection()
def preprocess(self,**kwargs):
"""Pre-processes the image collection: masks clouds and shadows, and scales and offsets the image collection.
Tip
----------
Check more info here about the supported platforms, :ref:`Image Scaling<Image Scaling>` and :ref:`Masking Clouds and Shadows<Masking Clouds and Shadows>`.
Parameters
----------
self : ee.ImageCollection [this]
Image Collection to pre-process.
**kwargs :
Keywords arguments for maskClouds().
Returns
-------
ee.ImageCollection
Pre-processed image collection.
See Also
--------
getScaleParams : Gets the scale parameters for each band of the image collection.
getOffsetParams : Gets the offset parameters for each band of the image collection.
scaleAndOffset : Scales bands on an image collection according to their scale and offset parameters.
maskClouds : Masks clouds and shadows in an image collection.
Examples
--------
>>> import ee, eemont
>>> ee.Authenticate()
>>> ee.Initialize()
>>> S2 = ee.ImageCollection('COPERNICUS/S2_SR').preprocess()
"""
return _preprocess(self,**kwargs)


WITNESS LIST State, Federal & International Relations Committee March 11, 1997-8:00A General Annoucements On: Workman, Mike (Statehood Committee) TX Dept. of Commerce On: Arnett, Brenda (TX Dept. of Commerce) Cineros, Jeannie (TX Dept. of Commerce)


Get Access to Exclusive News and Weather
First Name
Last Name
Email Address
Username
Password
City
Username:
Password:
Already Have an Account?
Log In


Home
Sign-up
Enter Your Account Details
{% csrf_token %}
Please sign in if you have your account registered.
User Name
Password
Remember me
Sign in
© 2017–2021


--- layout: page title: Changes text: The changelog for Padrino. --- {% capture current %}Changes{% endcapture %} {% include header_navigation.html %} {% include headline.html %}


Reusable components designed for the mobile interface and ready to use.
Mobilekit comes with basic pages you may need and use in your projects easily.


{{{_('Enter your new password (twice to confirm) to change your password.')}}}
{{{_('Use your validation code to get the possibility to change your password.')}}}
{{_('Submit your email and submit to receive a validation code in your mailbox.')}}
{{_('Signup to our service to access all the content and make your own!')}}
{{#if useRecaptcha}} {{/if}} {{#if membersNeedsLeader}}{{{_('We have sent you a validation code to your mailbox. Paste it here to validate you account.')}}}


SNA
About analysis
About us
Graph:
[Select]
Workspace1
Image Title
|
Nodes:
Edges:
Type:
|
|
FINDINGS:
Tip
general information
Description
Loading ...
Metrics


Fall
Eric O'Keefe
Week of December 6
Eric O’Keefe is a junior in Mechanical Engineering with a strong interest in composites and fluid mechanics. He is currently leading the aeromechanical team for Aerial Robotics. Outside of IEEE, Eric is on the Purdue Water Ski Team.
Kaitlyn Yu
Week of December 6
Kaitlyn Yu is a sophomore majoring in Electrical Engineering. She joined Purdue IEEE in 2020, and has since been a member of Learning, ROV, and has served the last semester as the G&E chair. Outside of IEEE, Kaitlyn enjoys going for runs, cooking, and completing puzzles.
Vivek Panchagnula, Alex Taylor
Week of November 15
Vivek Panchagnula is a First Year Engineering student. He loves reading and exploring nature, and hopes to change the world one small step at a time. You can find him outside doing work for classes while getting fresh air, or up and around West Lafayette exploring!
Alex Taylor a sophomore in Computer Engineering, and a part of the Electrical Team of Aerial Robotics, Growth & Engagement, and Computer Society. He has interests in game development, animation, and education.
Alex Beers
Week of November 8
Alex is a sophomore in Mechanical Engineering, who joined ROV in Fall 2021. Alex was chosen as student of the week for his work on a connection pressure testing enclosure, as well as taking inventory of parts. Outside of ROV, he enjoys running, working as an EMT, and cooking for friends.
Julian Triveri, Jude Adham, Kyler Harrison
Week of October 25
Julian Triveri is a freshman in Exploratory Studies with a passion for anything that combines visual art with software.
Kyler Harrison is a junior in Physics who likes computers and science.
Jude Adham is a senior in Computer Engineering with a strong interest in Software Engineering.
Spring
Katherine Sandys
Week of April 12
Katherine is a sophomore majoring in Computer Engineering, who joined ROV in Fall 2019. She is also a part of Women in Engineering. In her free time, she enjoys hanging out with friends, climbing and running. Katherine was chosen for her great work during her time on the ROV team. This year, she headed the logic project group and started heading more of the embedded projects in the second half of this semester. Katherine will be leading the ROV team starting Fall of 2021!
Ivan Kouzmine
Week of March 1
Ivan Kouzmine is a senior in Computer Engineering and the lead developer of the ROV pilot software. Outside of that, he likes rebuilding PCs and learning lots of world languages with Japanese and German being the latest. Ivan has been a huge boost to the ROV team. He took over the front end this year and has done an excellent job integrating it with ros so it's easy to use. Ivan had compiled extensive documentation to create a tutorial for installing ROS. His work for the front end has also included a 3D model of the ROV with orientation, thruster visualization, and more.
Matthieu Opdyke
Week of February 22
Matthieu Opdyke is a sophomore in Aerospace Engineering and the AeroMechanical team lead for Aerial Robotics. His interest in composite materials and advanced manufacturing techniques has helped the team build complex yet lightweight aircraft components. He hopes to use these concepts in combination with improved workflow structures to build an advanced UAS for the 2022 AUVSI-SUAS competition and to lead the team to its most successful placement in the past few years. Outside of PART, Matt enjoys playing tennis and golf as well as watching Purdue sports with friends.
Jerome Schweitzer
Week of February 15
Jerome is an aspiring Electrical Engineer who is also interested in computer science and enjoys running, watching movies, and playing cards. He joined IEEE in the fall of 2019 as a part of the Computer Society and spent the spring semester as the Event Coordinator of the committee. Jerome attends Software Saturday sessions as an attendee and has recently participated in Code Cafe 2019 as a mentor. Jerome has taken great initiative with the engineering social event and has done good work with virtual social events such as Minecraft and Among Us. In a time where social interaction has been low, he has kept morales up and participation in social activities high.
Sarah Mi
Week of February 8
Sarah Mi is the sponsorship chair for MTT-S. She is currently a sophomore double majoring in computer science and data science. During her free time, she plays animal crossing and spends time with her dog. Sarah has been chosen as student of the week her her dedication to MTT-S and her diligence in planning and running MTT-S events.
Derek Frohberg
Week of February 1
Derek Frohberg is a sophomore in Mechanical Engineering, and the Electrical/Software Lead for IEEE EMBS. In his role, he works on the EMBS Arm Project in planning the electronic components and training new members. Outside of IEEE, he's the Director of Regional Development for Purdue FIRST Programs, where he plans events for local high school robotics teams. Derek was chosen as student of the week due to his splendid effort in coordinating the electrical and software efforts for the EMBS exoskeletal elbow joint.
Sam Kovnar
Week of January 25
Sam Kovnar is a member of the ROV committee's electrical team. He is a sophomore majoring in Electrical Engineering from Milwaukee, Wisconsin. Outside of ROV, he is a proud member of the Alpha Phi Omega service fraternity and is serving on the Alpha Gamma chapter's executive board this semester. Sam was chosen as student of the week for his excellend work on ROV on his PCB. Sam put in lots of work over break routing his board and assisting with electrical-mechanical integration.
Hadi Ahmed
Week of January 18
Hadi Ahmed is a sophomore in Computer Engineering from Naperville, IL. As the chair of Software Saturdays, he helped increase participation and completion rate. Hadi is also involved with Aerial Robotics, serving as the Electrical team lead, and Computer Society. When not in class, he enjoys all sorts of outdoor activities, but mainly hiking and photography. Hadi is additionally involved in the upkeep of the IEEE website.


Provides type-level operations for refl-cpp related use-cases. More...
Classes | |
| struct | append |
| Appends a type to the list. More... | |
| struct | as_tuple< T< Ts... > > |
| Provides a member typedef which is a std::tuple specialization with template type parameters equivalent to the type parameters of the provided type. More... | |
| struct | as_type_list< T< Ts... > > |
| Provides a member typedef type which is a type_list with template type parameters equivalent to the type parameters of the provided type. More... | |
| struct | concat |
| Concatenates N lists together. More... | |
| struct | contains< T, type_list< Ts... > > |
| Checks whether T is contained in the list of types. More... | |
| struct | contains_base< T, type_list< Ts... > > |
| Checks whether a type deriving from T is contained in the list of types. More... | |
| struct | contains_instance< T, type_list< Ts... > > |
| Checks whether an instance of the template T is contained in the list of types. More... | |
| struct | filter< Predicate, type_list< Ts... > > |
| Filters a type_list according to a predicate template. More... | |
| struct | get< N, type_list< Ts... > > |
| Provides a member typedef type which is the N-th type in the provided type_list. More... | |
| struct | index_of< T, type_list< Ts... > > |
| The index of the type in the type list, -1 if it doesn't exist. More... | |
| struct | index_of_base< T, type_list< Ts... > > |
| The index of the type in the type list that is derived from T, -1 if it doesn't exist. More... | |
| struct | index_of_instance< T, type_list< Ts... > > |
| The index of the type in the type list that is a template instance of T, -1 if it doesn't exist. More... | |
| struct | is_container |
| Checks whether objects of the type T support member .begin() and .end() operations. More... | |
| struct | is_descriptor |
| A trait for detecting whether the type 'T' is a refl-cpp descriptor. More... | |
| struct | is_field |
| A trait for detecting whether the type 'T' is a field descriptor. More... | |
| struct | is_function |
| A trait for detecting whether the type 'T' is a function descriptor. More... | |
| struct | is_instance |
| Detects whether T is a template specialization. More... | |
| struct | is_instance_of |
| Detects whther the type U is a template specialization of T. More... | |
| struct | is_member |
| A trait for detecting whether the type 'T' is a member descriptor. More... | |
| struct | is_property |
| Checks whether T is marked as a property. More... | |
| struct | is_proxy |
| struct | is_reflectable |
| Checks whether there is reflection metadata for the type T. More... | |
| struct | is_type |
| Detects whether the type T is a type_descriptor. More... | |
| struct | map< Mapper, type_list< Ts... > > |
| Transforms a type_list according to a predicate template. More... | |
| struct | prepend |
| Prepends a type to the list. More... | |
| struct | remove_qualifiers |
| Removes all reference and cv-qualifiers from T. More... | |
| struct | reverse |
| Reverses a list of types. More... | |
| struct | skip< N, type_list< Ts... > > |
| Skips the first N types in the provided type_list. More... | |
| struct | unique |
| Creates a new list containing the repeating elements in the source list only once. More... | |
Typedefs | |
| template<typename T > | |
| using | remove_qualifiers_t = typename remove_qualifiers< T >::type |
| Removes all reference and cv-qualifiers from T. More... | |
| template<size_t N, typename TypeList > | |
| using | get_t = typename get< N, TypeList >::type |
| The N-th type in the provided type_list. More... | |
| template<size_t N, typename TypeList > | |
| using | skip_t = typename skip< N, TypeList >::type |
| Skips the first N types in the provided type_list. More... | |
| template<typename T > | |
| using | as_type_list_t = typename as_type_list< T >::type |
| A typedef for a type_list with template type parameters equivalent to the type parameters of the provided type. More... | |
| template<typename T > | |
| using | as_tuple_t = typename as_tuple< T >::type |
| A typedef for a std::tuple specialization with template type parameters equivalent to the type parameters of the provided type. More... | |
| template<typename TypeList > | |
| using | first = get< 0, TypeList > |
| Accesses first type in the list. More... | |
| template<typename TypeList > | |
| using | first_t = typename first< TypeList >::type |
| Accesses last type in the list. More... | |
| template<typename TypeList > | |
| using | last = get< TypeList::size - 1, TypeList > |
| Accesses last type in the list. More... | |
| template<typename TypeList > | |
| using | last_t = typename last< TypeList >::type |
| Accesses last type in the list. More... | |
| template<typename TypeList > | |
| using | tail = skip< 1, TypeList > |
| Returns all but the first element of the list. More... | |
| template<typename TypeList > | |
| using | tail_t = typename tail< TypeList >::type |
| Returns all but the first element of the list. More... | |
| template<size_t N, typename TypeList > | |
| using | take = detail::take< type_list<>, N, TypeList > |
| Returns the first N elements of the list. More... | |
| template<size_t N, typename TypeList > | |
| using | take_t = typename take< N, TypeList >::type |
| Returns the first N elements of the list. More... | |
| template<typename TypeList > | |
| using | init = take< TypeList::size - 1, TypeList > |
| Returns all but the last element of the list. More... | |
| template<typename TypeList > | |
| using | init_t = typename init< TypeList >::type |
| Returns all but the last element of the list. More... | |
| template<typename TypeList > | |
| using | reverse_t = typename reverse< TypeList >::type |
| Reverses a list of types. More... | |
| template<typename... Ts> | |
| using | concat_t = typename concat< Ts... >::type |
| Concatenates two lists together. More... | |
| template<typename T , typename TypeList > | |
| using | append_t = typename append< T, TypeList >::type |
| Appends a type to the list. More... | |
| template<typename T , typename TypeList > | |
| using | prepend_t = typename prepend< T, TypeList >::type |
| Prepends a type to the list. More... | |
| template<template< typename > typename Predicate, typename TypeList > | |
| using | filter_t = typename filter< Predicate, TypeList >::type |
| Filters a type_list according to a predicate template with a static boolean member named "value" (e.g. More... | |
| template<template< typename > typename Mapper, typename... Ts> | |
| using | map_t = typename map< Mapper, Ts... >::type |
| Transforms a type_list according to a predicate template with a typedef named "type" (e.g. More... | |
| template<typename T > | |
| using | unique_t = typename unique< T >::type |
| Creates a new list containing the repeating elements in the source list only once. More... | |
Variables | |
| template<typename T > | |
| constexpr bool | is_type_v { is_type<T>::value } |
| Detects whether the type T is a type_descriptor. More... | |
Provides type-level operations for refl-cpp related use-cases.
The refl::trait namespace provides type-level operations useful for compile-time metaprogramming.
| using refl::trait::append_t = typedef typename append<T, TypeList>::type |
Appends a type to the list.
| using refl::trait::as_tuple_t = typedef typename as_tuple<T>::type |
A typedef for a std::tuple specialization with template type parameters equivalent to the type parameters of the provided type.
The provided type must be a template specialization.
| using refl::trait::as_type_list_t = typedef typename as_type_list<T>::type |
A typedef for a type_list with template type parameters equivalent to the type parameters of the provided type.
The provided type must be a template instance.
| using refl::trait::concat_t = typedef typename concat<Ts...>::type |
Concatenates two lists together.
| using refl::trait::filter_t = typedef typename filter<Predicate, TypeList>::type |
Filters a type_list according to a predicate template with a static boolean member named "value" (e.g.
std::is_trivial)
| using refl::trait::first = typedef get<0, TypeList> |
Accesses first type in the list.
| using refl::trait::first_t = typedef typename first<TypeList>::type |
Accesses last type in the list.
| using refl::trait::get_t = typedef typename get<N, TypeList>::type |
The N-th type in the provided type_list.
| using refl::trait::init = typedef take<TypeList::size - 1, TypeList> |
Returns all but the last element of the list.
| using refl::trait::init_t = typedef typename init<TypeList>::type |
Returns all but the last element of the list.
| using refl::trait::last = typedef get<TypeList::size - 1, TypeList> |
Accesses last type in the list.
| using refl::trait::last_t = typedef typename last<TypeList>::type |
Accesses last type in the list.
| using refl::trait::map_t = typedef typename map<Mapper, Ts...>::type |
Transforms a type_list according to a predicate template with a typedef named "type" (e.g.
std::remove_reference)
| using refl::trait::prepend_t = typedef typename prepend<T, TypeList>::type |
Prepends a type to the list.
| using refl::trait::remove_qualifiers_t = typedef typename remove_qualifiers<T>::type |
Removes all reference and cv-qualifiers from T.
Equivalent to std::remove_cvref_t which is not currently available on all C++17 compilers.
| using refl::trait::reverse_t = typedef typename reverse<TypeList>::type |
Reverses a list of types.
| using refl::trait::skip_t = typedef typename skip<N, TypeList>::type |
Skips the first N types in the provided type_list.
| using refl::trait::tail = typedef skip<1, TypeList> |
Returns all but the first element of the list.
| using refl::trait::tail_t = typedef typename tail<TypeList>::type |
Returns all but the first element of the list.
| using refl::trait::take = typedef detail::take<type_list<>, N, TypeList> |
Returns the first N elements of the list.
| using refl::trait::take_t = typedef typename take<N, TypeList>::type |
Returns the first N elements of the list.
| using refl::trait::unique_t = typedef typename unique<T>::type |
Creates a new list containing the repeating elements in the source list only once.


--- title: BFConceptsAPI keywords: documentation theme, jekyll, technical writers, help authoring tools, hat replacements last_updated: Dec 03, 2018 sidebar: matlab_docs_sidebar permalink: bfconceptsapi.html folder: mydoc ---
BFConceptsAPI Class interacting with the Blackfynn API The BFConceptsAPI class implements all methods that are available in the concepts API.
| Sealed | false |
| Construct on load | false |
| BFConceptsAPI | Construct an instance of this class |
| host | |
| name | |
| session_ |
| createModel | Creates a model in the dataset | |
| createRecords | ||
| createRelationship | ||
| deleteRecords | ||
| getFiles | ||
| getModels | ||
| getProperties | ||
| getRecords | ||
| getRelated | ||
| getRelationCountsForRecord | ||
| getRelationships | Return relationships for dataset | |
| link | Creates relationships between records | |
| linkFile | Links file to one or more records | |
| Static | slugFromString | lowercase and strip of whitespace |
| updateModelProperties | Propinfo needs to be a struct, or array of structs with the |