Python
MLLPA
MLLPA (Machine Learning-assisted Lipid Phase Analysis) is a Python 3 library developed to analyse lipid membranes generated during molecular dynamics (MD) simulation runs in order to predict the phase of each lipid and map the local environment of the lipids in the bilayer.
Read More... GitHubiSCAN
iSCAN is a Python software running with a GUI that is used to analyse the images and sequences collected with an interferometric scattering (iSCAT) microscope. It can be used to calculate the contrast of the objects imaged and track particles diffusing in the image.
Read More... GitHubmicroImage
microImage is a Python library that can is used to open and save images in the typical formats used in microscopy. microImage also allows for simple modifications of the images and calibrations of the scale or frame rate in the case of a sequence.
Read More... GitHubLabVIEW
Sentry
Sentry is a control software for the iSCAT microscope constructed in my current research group. The software is designed to control all the different equipments of the microscope: the cameras, the piezo-electric stage, the LASER light source, the shutter and a spatial light modulator. While the software is specific to our microscope, it is modulable enough to be adapted to any kind of setup.
Read More...Java
AutoCorrelation Function
The AutoCorrelation function (ACF) is a plugin made for ImageJ which enable the user to perform autocorrelation calculations in both space and time on an image or a sequence of images. The plugin returns the characteristic time and distance of the images.
Read More... GitHub


limits:
group limit:
How do I use this?
-
The metric is a graphite metric. It can be a query that returns multiple keys
(e.g., by using
*
,[...]
, or{...}
. See the Graphite function documentation for more details. -
The range determines how far back in the past to consider. The syntax is Go's
time.Duration
(see thetime.ParseDuration
documentation for the details). Examples:30s
,5m
,1h
. - Limits configure what comparisons determine whether the check passes or fails. If your metric only returns a single key, then the check passes if and only if all the limits are satisfied. If your metric returns multiple keys, then you need group limits.
-
Group limits must be given when the target metric returns multiple keys.
A group limit defines the limits on the number of successful targets needed for a
successful check. If the group limit is
all
, all targets need to be within the limits for the check to pass. If the group limit isany
, at least one target needs to be within the limits. - The "include empty targets" setting controls whether Shadow considers targets that come back without any non-null datapoints. Generally you want to ignore these because if you have per-host graphite metrics, old hosts that are no longer around will return null data.


bootstrap modal draggable with angular.js, touch enabled
Launch draggable modal
×
Drag me
draggable modal
btw: if you drag me around, close and reopen me i will appear where you left me off. At least in Chrome, it seems.


Web Design/Development
To see more projects visit my Github
RATE MY LEARNING - Educational rating system for schools, where students, graduates, and faculty can share their educational experience to help others seeking similar career goals.
Download Project from GithubWe are graduated students of Conestoga College from the IT innovation and Design 3-year program. We each have specific expertise in the web development and design industry, and have showcased our skills in this web application.
Rate My Learning is a review-based website designed to assist students in aiding their decision for their future career path program direction.
Rate My Learning is a web application that will allow users, mainly students and/or faculty to anonymously submit feedback about their personal experiences at a post-secondary school. Users will be able to create, edit, delete and browse reviews made by others and themselves. The intended audience for this application is current students or anyone looking to enroll into a post-secondary college institution. Accessibility to the site will be via desktop or mobile devices in order to allow users full functionality and on demand services.
With the introduction of Rate My Learning, not only will students be informed on what they are choosing but schools can also use this data to better their services and create an overall better learning environment for students across Canada.


Snow Queen
Snow Queen is the main character of the fairy tale of the same name by Hans Christian Andersen.


Dr. Dolittle 2 * 1/2 (out of * * * * )
Directed by Steve Carr. Cast: Eddie Murphy, Kristen Wilson, Raven-Symone, Kyla Pratt, Lil' Zane, Kevin Pollak, Jeffrey Jones; voices of Steve Zahn, Lisa Kudrow, Norm MacDonald. 2001 - 81 minutes Rated PG (for mild profanity and sexual innuendo). Reviewed by Dustin Putman, June 23, 2001.
"Dr. Dolittle 2," a pointless sequel to the 1998 hit, is superior to its hideously misguided predecessor, and yet it's still pretty bad. Aimed more squarely for children than the original (this one is rated PG; the original was PG-13), it is harmless and fluffy, with a few scattershot moments of mild amusement. It is also painfully routine, more often boring than not, and instantly forgettable.
Dr. John Dolittle (Eddie Murphy), the famous veterinarian who has the gift of being able to understand what animals say, is back, along with his lawyer wife, Lisa (Kristen Wilson), and two children, Charisse (Raven-Symone) and Maya (Kyla Pratt). When a forest is threatened to be torn down by a nasty land developer (Jeffrey Jones), Dr. Dolittle is given a month to perform the impossible: take a circus bear (voiced by Steve Zahn) and get him to mate with a country bear (Lisa Kudrow).
Written by Larry Levin and directed by Steve Carr (2000's despicable "Next Friday"), "Dr. Dolittle 2" is placed firmly in the category of "unnecessary sequel." The premise of saving land from being torn down is as old as the hills, and doesn't help matters; certainly a more original idea could have been concocted if a follow-up had to be made.
The various interactions between the doctor and the animals are predictable and too often tiresome. While children may enjoy much of this, it doesn't successfully carry over for the adult audience, which all good family films do. Better is a subplot involving the rocky relationship between the doctor and his 16-year-old daughter, Charisse, who has begun to date. This section of the movie does away with the main attraction of the animals, but it also offers up a fairly accurate, if PG-rated view, of the growing pains of an adolescent. It is surprising to see Raven-Symone, who once played little Olivia on TV's "The Cosby Show," all grown up, and she certainly has the charisma of an actress with a definite future in films.
As for Eddie Murphy, does he really have nothing to do anymore than make sequels to successful first pictures? Last year it was the perfectly dreadfully "Nutty Professor II: The Klumps," and now it is "Dr. Dolittle 2." Since he is so clearly upstaged by the animal performers, and doesn't get nearly enough comedic material for himself, Murphy's role could have been played by anyone and it wouldn't have made a bit of difference. Likewise, the film itself could have never been made, and it wouldn't have been missed. If anything, it could have saved millions of wasted dollars.
- Copyright 2001 by Dustin Putman http://us.imdb.com/ReviewsBy?Dustin+Putman http://www.all-reviews.com/reviewers/dustinputman.htm http://www.atnzone.com
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


In an effort to streamline the decision-making process, the law was amended in 1985 to allow applicants for land use changes of 15 acres or less to apply directly to the counties. The Commission, therefore, no longer handles such requests except when the lands are situated within the Conservation District. All amendments approved by the counties are submitted to the State Land Use Commission Office in Honolulu for revision of the Official State Land Use District Boundaries Maps.


Muhosira
Add sites to be blocked. One patterns per line. The patterns syntax is described
here
.
save


Research
Saykally Group, College of Chemistry, UC Berkeley
I've been working with (now Dr.) Tony Rizzuto since the summer of 2015 on studies regarding the effects of solute on the evaporation rate of liquid water. Evaporative cooling rates are determined by performing Raman thermometry on a free falling droplet train generated in vacuum; these can be used to calculate gamma (evaporation coefficient). Want to learn more? Click me or the image to the left.
Physics Based Microsystems, Sandia National Labs
I spent the summer of 2016 working for this group at Sandia's main location on Kirtland Air Force Base in Albuqueque, New Mexico for Dr. Carlos Perez. One project was the application of anodization for a variety of metal functionalizations. The second was a critical analysis of how electroplating quality was affected by parameters involved in the production process. Want to learn more? Click me or the image to the left.
Publications and Posters:
-
Rizzuto, A. M., Cheng, E. S., Lam, R. K., Saykally, R. J.
"Surprising Effects of Hydrochloric Acid on the Water Evaporation Coefficient Observed by Raman Thermometry"
J. Phys. Chem. C (2017)
- Abstract: The kinetics and energetics of cloud droplet and aerosol formation in the atmosphere are strongly influenced by the evaporation and condensation rates of water, yet the magnitude and mechanism of evaporation remains incompletely characterized. Of particular import (and controversy) is the nature of interfacial water pH and its potential effects on evaporation rate and environmental reactivity. We have used Raman thermometry measurements of freely evaporating microdroplets to determine evaporation coefficients (γ) for two different hydrochloric acid solutions, both of which result in a significant deviation from γwater. At 95% confidence, we find the evaporation coefficient for 1.0 M HCl to be 0.24 ± 0.04, a ∼60% decrease relative to pure water , and for 0.1 M HCl to be 0.91 ± 0.08, a ∼45% increase relative to pure water. These results suggest a large perturbation in the surface structure induced by either hydronium ions adsorbing to the water surface or by the presence of a Cl–···H3O+ ion-pair moiety in the interfacial region.
-
Cheng, E.S., Perez, C.
"Anodization as a Low Cost, Scalable, and Tunable Nanoscale Manufacturing Technique"
Rio Grande Symposium for Advanced Materials. Albuquerque, NM. (2016)
- Abstract: We explore the application of anodization of aluminum as a low cost, efficient, and highly scalable technique useful not only for manipulation of macroscopic properties of materials, but also as a starting point for the creation of nanoscale metallic structures. Using simple chemical setups and software controls, we have been able to selectively anodize aluminum, without affecting underlying substrate. This process has yielded alumina samples suitable for further development
-
Cheng, E.S, Ko, K.
"Effects of Temperature and Morphology on Piezoelectricity in Crystalline Sucrose"
Chem 4B Special Projects Presentations(2014)
- Abstract: While the factors affecting piezoelectricity have been well studied in multiple piezoelectric materials, there has not yet been a study on the factors affecting piezoelectricity in crystalline sugar. In this experiment, we explore the effects of temperature and crystal morphology on the piezoelectric effect in crystalline sugar. We attempted synthesis of crystals with two methods, in wells and on dowels. We also used commercially grown crystals for testing. These crystals were subjected to consistent pressures and a temperature range from -50° C to 50° C, and their voltage responses were recorded. In these tests, we determined that there is a positive correlation between increasing temperature and piezoelectric resonse, with the response going to 0 beyond the temperatures at the ends of our range. It is also of interest to note that the typical crystal growing method failed, while the discs produced crystals with structure nearly identical to the commercial crystal.
-
Cheng, E.S. Clausen, E., Kidd, T.
“Chemical Analysis of MoS2 Nanoparticles Formed by Ultrasonic Exfoliation”
UNI Undergraduate Research Symposium (2013)
-
Abstract: MoS2 has been observed to be a compound with favorable electronic properties., with possible applications in small electronics. However, we wanted to analyze the chemical compositions of the samples that we’ve been producing because there have been electric inconsistencies observed. The chemical study, therefore, is to study exactly what the chemical compositions of these MoS2 nanostructures turn out to be after their manufacturing process, and the correlation of that to the observed electrical properties.
Coursework
-
Taken at UC Berkeley
- Chemistry 4A: General Chemistry, Chemistry 4B: Analytical and Bio-Chemistry
- Engineering 45: Properties of Materials
- Chemistry 112A/B: Advanced Organic Chemistry (two semesters)
- Chemistry 104A/B: Advanced Inorganic Chemistry (two semesters)
- Chemistry 120A: Physical Chemistry (Quantum Mechanics)
- Chemistry 120B: Physical Chemistry (Statistical Mechanics)
- Chemistry 221A: (Graduate) Quantum Mechanics
- Chemistry 125: Physical Chemistry Laboratory
- Chemistry 105: Analytical and Instrumental Chemistry
- Chemistry 195: Special Topics (Introduction to Computational Chemistry)
-
Taken at UT Austin
- CH 382L: (Graduate) Advanced Physical Chemistry: Statistical Mechanics
- CHE 391S: (Graduate) Molecular Simulation of Materials
- CHE 384T: (Graduate) Nanomaterials Chemistry and Engineering
- ME 386P1: (Graduate) Introduction to Phase Transformations
- ME 386P4: (Graduate) Solid State Properties of Materials


Remembering the last person killed trying to escape to west Berlin
by Lena RocheThe widow of the last person to die trying to cross the Berlin Wall says he might still be alive today if they had waited just a few months to attempt their escape.
Winfried Freudenberg was a 32-year-old engineer living in East Berlin with his wife Sabine in the first months of 1989 when he attempted to escape over the wall via hot air balloon.
The couple had planned to make their escape together but where discovered while attempting to inflate the balloon in their home during the night.
A neighbour spotted the balloon and alerted the local police.
The pair then decided Winfried would make the attempt to escape while Sabine would stay behind to face interrogation.
With the balloon not fully inflated and sitting on a wooden broom handle instead of a basket Winfried was pushed from Blankenberg in the east of the city to Zenlendorf in the west without being able to control it.
The balloon eventually rose to over 5,000 metres in the air where temperatures can drop to as low as -20C.
After flying for five hours Winfried either let go or lost grip on the broom and crashed to the ground in Zenlendorf.
His body was found the following afternoon in a local park.
Meanwhile, his wife was facing interrogation by the Stasi - the East German secret police.
She was released after a few weeks and just seven months after her husband’s death the Berlin wall came down.
Sabine Freudenberg told Euronews it took her weeks to cross the famous Oberbaum Bridge between the eastern and western sections of the city.
She said: “I was thinking about (Winfried) the whole time. That was what was keeping me from going over there. He was just dead. Since March. Now it was only November and he was dead because the wall was closed.
“I think he would still be alive if we had waited a few months. And that was so sad. That was so terribly incomprehensible for me.
“What if he were here and he could see that? And now he can’t see it anymore. Grief, only grief”.


|
Panda3D
|
A container for the various kinds of properties we might ask to have on a graphics frameBuffer before we create a GSG. More...
Public Member Functions | |
| __init__ () | |
| __init__ (const FrameBufferProperties) | |
| addProperties (const FrameBufferProperties other) | |
| Sets any properties that are explicitly specified in other on this object. More... | |
| clear () | |
| Unsets all properties that have been specified so far, and resets the FrameBufferProperties structure to its initial empty state. More... | |
| int | getAccumBits () |
| int | getAlphaBits () |
| int | getAuxFloat () |
| int | getAuxHrgba () |
| int | getAuxMask () |
| Converts the aux bitplanes of the framebuffer into a RenderBuffer::Type. More... | |
| int | getAuxRgba () |
| int | getBackBuffers () |
| int | getBlueBits () |
| int | getBufferMask () |
| Converts the non-aux bitplanes of the framebuffer into a RenderBuffer::Type. More... | |
| int | getColorBits () |
| int | getCoverageSamples () |
| If coverage samples are specified, and there is hardware support, we use coverage multisampling. More... | |
| int | getDepthBits () |
| bool | getFloatColor () |
| bool | getFloatDepth () |
| bool | getForceHardware () |
| bool | getForceSoftware () |
| int | getGreenBits () |
| bool | getIndexedColor () |
| int | getMultisamples () |
| int | getQuality (const FrameBufferProperties reqs) |
| Assumes that these properties are a description of a window. More... | |
| int | getRedBits () |
| bool | getRgbColor () |
| bool | getSrgbColor () |
| int | getStencilBits () |
| bool | getStereo () |
| bool | isAnySpecified () |
| Returns true if any properties have been specified, false otherwise. More... | |
| bool | isBasic () |
| Returns true if the properties are extremely basic. More... | |
| bool | isSingleBuffered () |
| bool | isStereo () |
| bool | operator!= (const FrameBufferProperties other) |
| bool | operator== (const FrameBufferProperties other) |
| output (Ostream out) | |
| Generates a string representation. More... | |
| setAccumBits (int n) | |
| setAllSpecified () | |
| Marks all bits as having been specified. More... | |
| setAlphaBits (int n) | |
| setAuxFloat (int n) | |
| setAuxHrgba (int n) | |
| setAuxRgba (int n) | |
| setBackBuffers (int n) | |
| setBlueBits (int n) | |
| setColorBits (int n) | |
| Sets the number of requested color bits as a single number that represents the sum of the individual numbers of red, green and blue bits. More... | |
| setCoverageSamples (int n) | |
| If coverage samples are specified, and there is hardware support, we use coverage multisampling. More... | |
| setDepthBits (int n) | |
| setFloatColor (bool n) | |
| setFloatDepth (bool n) | |
| setForceHardware (bool n) | |
| setForceSoftware (bool n) | |
| setGreenBits (int n) | |
| setIndexedColor (bool n) | |
| setMultisamples (int n) | |
| setOneBitPerChannel () | |
| If any of the depth, color, alpha, accum, or stencil properties is set to more than one, then they are reduced to one. More... | |
| setRedBits (int n) | |
| setRgbaBits (int r, int g, int b, int a) | |
| Convenience method for setting the red, green, blue and alpha bits in one go. More... | |
| setRgbColor (bool n) | |
| setSrgbColor (bool n) | |
| setStencilBits (int n) | |
| setStereo (bool n) | |
| bool | setupColorTexture (Texture tex) |
| Sets the texture up for render-to-texture matching these framebuffer properties. More... | |
| bool | setupDepthTexture (Texture tex) |
| Sets the texture up for render-to-texture matching these framebuffer properties. More... | |
| bool | subsumes (const FrameBufferProperties other) |
| Returns true if this set of properties makes strictly greater or equal demands of the framebuffer than the other set of framebuffer properties. More... | |
| bool | verifyHardwareSoftware (const FrameBufferProperties props, str renderer) |
| Validates that the properties represent the desired kind of renderer (hardware or software). More... | |
Static Public Member Functions | |
| static const FrameBufferProperties | getDefault () |
| Returns a FrameBufferProperties structure with all of the default values filled in according to the user's config file. More... | |
Public Attributes | |
| int | accum_bits |
| int | alpha_bits |
| int | aux_float |
| int | aux_hrgba |
| int | aux_rgba |
| int | back_buffers |
| int | blue_bits |
| int | color_bits |
| int | coverage_samples |
| If coverage samples are specified, and there is hardware support, we use coverage multisampling. More... | |
| int | depth_bits |
| Individual queries. More... | |
| bool | float_color |
| bool | float_depth |
| bool | force_hardware |
| bool | force_software |
| int | green_bits |
| bool | indexed_color |
| int | multisamples |
| int | red_bits |
| bool | rgb_color |
| bool | srgb_color |
| int | stencil_bits |
| bool | stereo |
A container for the various kinds of properties we might ask to have on a graphics frameBuffer before we create a GSG.
| __init__ | ( | ) |
| __init__ | ( | const | FrameBufferProperties | ) |
| addProperties | ( | const FrameBufferProperties | other | ) |
Sets any properties that are explicitly specified in other on this object.
Leaves other properties unchanged.
| clear | ( | ) |
Unsets all properties that have been specified so far, and resets the FrameBufferProperties structure to its initial empty state.
| int getAccumBits | ( | ) |
| int getAlphaBits | ( | ) |
| int getAuxFloat | ( | ) |
| int getAuxHrgba | ( | ) |
| int getAuxMask | ( | ) |
Converts the aux bitplanes of the framebuffer into a RenderBuffer::Type.
| int getAuxRgba | ( | ) |
| int getBackBuffers | ( | ) |
| int getBlueBits | ( | ) |
| int getBufferMask | ( | ) |
Converts the non-aux bitplanes of the framebuffer into a RenderBuffer::Type.
| int getColorBits | ( | ) |
| int getCoverageSamples | ( | ) |
If coverage samples are specified, and there is hardware support, we use coverage multisampling.
|
static |
Returns a FrameBufferProperties structure with all of the default values filled in according to the user's config file.
| int getDepthBits | ( | ) |
| bool getFloatColor | ( | ) |
| bool getFloatDepth | ( | ) |
| bool getForceHardware | ( | ) |
| bool getForceSoftware | ( | ) |
| int getGreenBits | ( | ) |
| bool getIndexedColor | ( | ) |
| int getMultisamples | ( | ) |
| int getQuality | ( | const FrameBufferProperties | reqs | ) |
Assumes that these properties are a description of a window.
Measures how well this window satisfies a specified set of requirements. A higher quality number means that more requirements were satisfied. A quality of zero means that the window is unsuitable.
The routine deducts a lot if the window fails to provide a requested feature. It deducts less if the window provides a feature, but at a degraded level of functionality (ie, the user asks for rgba8, color, but the window only provides rgba4). The routine also deducts a small amount for unnecessary features. For example, if the window has an accumulation buffer when one is not requested will reduce quality slightly. Maximum quality is obtained when the window exactly matches the request.
If you want to know whether the window satisfies all of the requirements, use the "subsumes" function.
| int getRedBits | ( | ) |
| bool getRgbColor | ( | ) |
| bool getSrgbColor | ( | ) |
| int getStencilBits | ( | ) |
| bool getStereo | ( | ) |
| bool isAnySpecified | ( | ) |
Returns true if any properties have been specified, false otherwise.
| bool isBasic | ( | ) |
Returns true if the properties are extremely basic.
The following count as basic: rgb or rgba, depth. If anything else is specified, the properties are non-basic.
| bool isSingleBuffered | ( | ) |
| bool isStereo | ( | ) |
| bool operator!= | ( | const FrameBufferProperties | other | ) |
| bool operator== | ( | const FrameBufferProperties | other | ) |
| output | ( | Ostream | out | ) |
Generates a string representation.
| setAccumBits | ( | int | n | ) |
| setAllSpecified | ( | ) |
Marks all bits as having been specified.
| setAlphaBits | ( | int | n | ) |
| setAuxFloat | ( | int | n | ) |
| setAuxHrgba | ( | int | n | ) |
| setAuxRgba | ( | int | n | ) |
| setBackBuffers | ( | int | n | ) |
| setBlueBits | ( | int | n | ) |
| setColorBits | ( | int | n | ) |
Sets the number of requested color bits as a single number that represents the sum of the individual numbers of red, green and blue bits.
Panda won't care how the individual bits are divided up.
See also set_rgba_bits, which allows you to specify requirements for the individual components.
| setCoverageSamples | ( | int | n | ) |
If coverage samples are specified, and there is hardware support, we use coverage multisampling.
| setDepthBits | ( | int | n | ) |
| setFloatColor | ( | bool | n | ) |
| setFloatDepth | ( | bool | n | ) |
| setForceHardware | ( | bool | n | ) |
| setForceSoftware | ( | bool | n | ) |
| setGreenBits | ( | int | n | ) |
| setIndexedColor | ( | bool | n | ) |
| setMultisamples | ( | int | n | ) |
| setOneBitPerChannel | ( | ) |
If any of the depth, color, alpha, accum, or stencil properties is set to more than one, then they are reduced to one.
| setRedBits | ( | int | n | ) |
| setRgbaBits | ( | int | r, |
| int | g, | ||
| int | b, | ||
| int | a | ||
| ) |
Convenience method for setting the red, green, blue and alpha bits in one go.
| setRgbColor | ( | bool | n | ) |
| setSrgbColor | ( | bool | n | ) |
| setStencilBits | ( | int | n | ) |
| setStereo | ( | bool | n | ) |
| bool setupColorTexture | ( | Texture | tex | ) |
Sets the texture up for render-to-texture matching these framebuffer properties.
Returns true if there was a format that had enough bits, false otherwise. Of course, this is no guarantee that a particular graphics back-end supports rendering to textures of that format.
| bool setupDepthTexture | ( | Texture | tex | ) |
Sets the texture up for render-to-texture matching these framebuffer properties.
Returns true if there was a format that had enough bits, false otherwise. Of course, this is no guarantee that a particular graphics back-end supports rendering to textures of that format.
| bool subsumes | ( | const FrameBufferProperties | other | ) |
Returns true if this set of properties makes strictly greater or equal demands of the framebuffer than the other set of framebuffer properties.
| bool verifyHardwareSoftware | ( | const FrameBufferProperties | props, |
| str | renderer | ||
| ) |
Validates that the properties represent the desired kind of renderer (hardware or software).
If not, prints out an error message and returns false.
| int accum_bits |
| int alpha_bits |
| int aux_float |
| int aux_hrgba |
| int aux_rgba |
| int back_buffers |
| int blue_bits |
| int color_bits |
| int coverage_samples |
If coverage samples are specified, and there is hardware support, we use coverage multisampling.
| int depth_bits |
Individual queries.
| bool float_color |
| bool float_depth |
| bool force_hardware |
| bool force_software |
| int green_bits |
| bool indexed_color |
| int multisamples |
| int red_bits |
| bool rgb_color |
| bool srgb_color |
| int stencil_bits |
| bool stereo |


Quick links
Engeneering collages in India.
Yoou can expect two types of engeneering institutes in India providing technical education government and private.
Government engeneering instittes are the instittes run undr the direct supervision of government of India or state government of India.These instituts includes IITs, NITs and IITs and so on.
Private engeneering institutes include all deemed universities and non-government funded universities.
How to get admission in government funded universitiies ?
The admission process in different institutes is differnt.
Admission in IIT :In order to get admisssion in IIT students should attend JEE main and JEE advanced both. They should then get admission in IIT through JoSSA seat allocation system.
Admission in NIT: In order to get admission in NIT one should attend JEE main, if the students attend a valid marks in JEE main then he/she will get admission in NIT. Marks obtained by studentts in JEE main is the determining factor for admission in NIT.
Admission in IIT: Admission in IIIT are done on the basis of marks of JEE mains, if a students have not attended JEE mains then the examination conducted by IITs themself can be considered sometimes.
Admission in CFTIs: JEE main is the only way to get admission in CFTIs. The studens get admission in CFTIs on the basis of their performance in JEE main.
How to get admission in deemed or private universities?
Before we get into detaails let us first understand the fndamentally what deemed or private universities mean.
Both deemed and private universities are nearly similar but deemed universities have a right to apply their own rules and regulation and they enjoy the autonomy of rules and regulation.
Some deemed universities accept JEE main scores to select sstudents for undergraduate courses, while many other conducts their own entrance examination which you may have to pass to get admission in it.
IIT
- IIT stands for Indian Institute of Technology. Students are selected in IIT through JEE advanced but many other courses have different mode of selection.
- There are 23 IITs spead all across the country.
- As of 2020 there were 13.647 seats in IIT The seat were distributed among different categories.
Different engeneering degrees provided by IITs
- Computer Science Engeneering
- Mechaniical Engeneering
- Chemical Engeneering
- Electrical Engeneering
- Automobile engeneering
- Aerospace engeneering
- Aeronautical engeneering
- Electronics engeneering
- Industrial engeneering
- Marine engeneering
- Petroleum engeneering
- Electronics & Communication engeneering
- Civil engeneering
Informaton to foreign nationals
IIT offers 10% of extra seats in every coourses to foreign nationals. Foreign nationals shoould be able to pass JEE advanced and also meet the required eligibility criteria to claim for the seats alloted to them.
It is sad to know although IITs offer a lot of seats to foreign nationals and although being one of the most prestigious institutes a few foreign nationals make into IIT.
IIT Kharagpur
- IIT Kharagpur provides niche courses in :
- Biological Science & Bioengeneering in BTech
- Industrial & Systems Engeneering in BTech
- Medical Imaging & Informatics in MTech
- IIT Kharagpur is located in West Bengal Kharagpur.
| Courses |
No of intake |
| Aerospace engeneering |
44 |
| Agriculture and food engeneering |
48 |
| Architecture and regional planning |
36 |
| Chemical Engeneering |
79 |
| Civil Engeneering |
87 |
| Computer science & Engeneering |
80 |
| Electrical Engeneering |
80 |
| Electronics and Electrical Communicaion Engeneering |
90 |
| Industrial and Systems Engeneering |
43 |
| Instrumentaion Engeneering |
44 |
| Manufacture Science and engeneering |
44 |
| Mechanical Engeneering |
99 |
| Mechanical and Materials Engeneering |
62 |
| Metallurgical snd Materials Engeneering |
62 |
| Mining Engeneering |
59 |
| Ocean Engeneering and Naval Architecture |
46 |
| Dual degree |
| Aerospace engeneering |
26 |
| Agriculture and Food Engeneering with M.Tech in any of listed specializations |
45 |
| Biotechnology and Biochemical Engeneering |
34 |
| Civil engeneering with any one of listed specification |
36 |
| Computer Science and Engeneering |
55 |
| Electrical engeneering with M.Tech in any of the listed specialization |
33 |
| Electronics and Electrical Communication Engeneering with M.Tech in any one of the listed specialization |
60 |
| Industrial and System Engeneering with M.Tech in Industrial and System Engeneering and Management |
29 |
| Manufacturing Science and Engeneering with M.Tech in Industrial and System Engeneering and Management |
22 |
| Mechanical Engeneering with M.Tech in any of the following specification |
38 |
| Metallurgical and Materials Engeneering |
31 |
| Mining Engeneering |
28 |
| Mining Safety Engeneering |
26 |
| Oceean Engeneering and Naval Architecture |
34 |
| Quality Engeneering and Design Manufacturing |
20 |
| Total |
1520 |
IIT Bombay
- IIT Bombay provides niche courses in :
- Geo-Informaatics And Natural Resources in MTech
- Petroleum Geoscience MTech
- IIT Bombay is located in Maharastra Bombay.
| Courses |
No of intake |
| Aerospace Engeneering |
89 |
| Chemical Engeneering |
167 |
| Civil Engeneering |
170 |
| Computer Science and Engeneering |
160 |
| Electrical Engeneering |
92 |
| Engeneering Physics |
59 |
| Mechanical Engeneering |
176 |
| Metallurgical Engeneeirng and Material Science |
123 |
| Dual degree |
| Electrical engeneering |
90 |
| Electrical engeneering with M.Tech in Energy Systems Engeneering |
43 |
| Environment science and engeneering |
40 |
| Mechanical engeneering and M.Tech in Computer Integrated Manufacturing |
31 |
| Metallurgical engeneering and Materials Science |
35 |
| Total |
1275 |
IIT Madras
- IIT Madras provides niche courses in :
- Biological Engeneering in dual degree program
- Engeneering Design in dual degree program
- IIT Madras is located in Tamil Nadu.
| Courses |
No of intake |
| Aerospace Engeneering |
63 |
| Chemical Engeneering |
117 |
| Civil Engeneering |
127 |
| Computer Sccience and Engeneering |
87 |
| Electrical Engeneering |
155 |
| Engeneering Physics |
42 |
| Mechanical Engeneering |
215 |
| Metallurgical and Materials Engeneering |
68 |
| Naval Architecture and Ocean Engeneering |
78 |
| Dual degree |
| Aerospace Engeneering |
10 |
| Biological Engeneering |
43 |
| Engeneering Design |
13 |
| Total |
1018 |
IIT Kanpur
- IIT Kanpur provides niche courses in :
- Biological Science and Bioengeneering in BTech
- IIT kanpur is located in Uttar Pradesh.
| Courses |
No of intakes |
| Aerospace Engeneering |
69 |
| Biological Science and Bioengeneering |
53 |
| Chemical Engeneering |
104 |
| Civil Engeneering |
148 |
| Computer Science and Engeneering |
129 |
| Electrical Engeneering |
192 |
| Material Science and Engeneering |
85 |
| Mechanical Engeneering |
149 |
IIT Delhi
- IIT Delhi provides niche courses in :
- Prroduction and Industrial Engeneering in BTech
- Applied optics in MTech
- Design of Mechanical Equipment in MTech
- Industrial Tribiology and Maintainance Engeneering in MTech
- Molecular Engeneering in MTech
- Radio Frequency Design and Technology in MTech
- Solid State Materials in Mtech
- Design Engeneering in MTech
- IIT Delhi is located in Delhi.
| Courses |
No of students |
| Biotechnology and Biochemcal Engeneering |
72 |
| Chemical Engeneering |
82 |
| Civil Engeneering |
113 |
| Computer Science and Engeneering |
99 |
| Electrical Engeneering |
120 |
| Electrical Engeneeirng ( Power and Autonoation) |
65 |
| Engeneering and computational mechanics |
40 |
| Engeneeirng Physics |
63 |
| Materials Engeneering |
40 |
| Mathmatics and Computing |
89 |
| Mechanical Engeneering |
95 |
| Production and Industrial Engeneering |
89 |
| Textile technology |
116 |
| Dual Degree |
| Chemical Engeneering |
56 |
| Computer Science and Engeneering |
37 |
| Mathmatics and Computing |
33 |
| Total |
1209 |
IIT Guwahati
IIT Guwahati is loccated in Assam.
| Courses |
No of intake |
| Bioscience and Bioengeneering |
84 |
| Chemical Engeneering |
97 |
| Chemical Science and Technology |
65 |
| Civil Engeneering |
117 |
| Computer Science and Engeneering |
114 |
| Electronics and Communication Engeneering |
104 |
| Electronics and Electrical Engeneering |
62 |
| Engeneering Physics |
68 |
| Mathmatics and Computing |
72 |
| Mechanical Engeneering |
119 |
| Total |
902 |
IIT Roorkey
- IIT Roorkey provides niche courses in :
- Paper and pulp engeneering in BTech
- Polymer Science and Engeneering in BTech
- Geological Technology in Dual degree program
- Geophysical Technology in Dual degree program
- IIT Roorkey is located in Uttarakhand.
| Courses |
No of students |
| Bio Technology |
46 |
| Chemical Engeneering |
120 |
| Civil Engeneering |
194 |
| Computer Science and Engeneering |
109 |
| Electrical Engeneering |
165 |
| Electronics and Communication Engeneering |
109 |
| Engeneering Physics |
40 |
| Mechanical Engeneering |
150 |
| Metallurgical and Materials Engeneering |
112 |
| Polymer Science and Engeneering |
40 |
| Production and Industrial Engeneering |
58 |
| Architecture |
| Architecture |
37 |
| Dual Degree |
| Geological Technology |
38 |
| Geophysical Technology |
41 |
| Total |
1259 |
IIT Ropar
- IIT Ropar is located in Punjab.
| Courses |
No of intakes |
| Chemical Engeneering |
25 |
| Civil Engeneering |
35 |
| Computer Science and Emgeneering |
84 |
| Elecctrical Engeneering |
84 |
| Mathmatics and Computing |
33 |
| Mechanical Engeneering |
83 |
| Metallurgical and Materials Engeneering |
28 |
| Total |
370 |
IIT Bhuwaneswar
- IIT Bhuwaneswar is located in Odisha.
| Courses |
No of intakes |
| Civil Engeneering |
66 |
| Computer Science and Engeneering |
68 |
| Electrical Engeneering |
70 |
| Electronics and Communicstion Engeneering |
52 |
| Mechanical Engeneering |
70 |
| Metallurgucal and Materials Engeneering |
29 |
| Civil Engeneering and M.Tech in Structural Engeneering |
13 |
| Civil Engeneering and M.tech in Transportation engeneering |
13 |
| Computer Science and Engeneering |
13 |
| Electrical Engeneering and M.Tech Power Electronics and Drives |
12 |
| Mechanical Engeneering and M.Tech in Mechanical System Design |
12 |
| Mechanical Engeneering and M.Tech in Thermal Science and Engeneering |
15 |
| Mrechanical Engeneering and M.Tech in Manufacturing Engeneering |
15 |
| Metallurgical and Material Engeneering |
12 |
| Total |
475 |
IIT Gandhinagar
- IIT Gandhinagar is located in Gujrat.
| Courses |
No of intake |
| Chemical Engeneering |
44 |
| Civil Engeneering |
39 |
| Computer Science and Engeneering |
42 |
| Electrical Engeneering |
42 |
| Materials Science and Engeneering |
39 |
| mechanical Engeneering |
44 |
| Total |
250 |
IIT Hyderabad
- IIT Hyderabad provides niche courses in :
- Artificial Intelligence in BTech
- Mechanical and aerospace engeneering in BTech
- Executive MTech
- IIT Hydrbasd is located in Telengana.
| Courses |
No of Intakes |
| Artificial Intelligence |
27 |
| Biomedical engeneering |
20 |
| Chemical Engeneering |
40 |
| Civil Engeneering |
54 |
| Computer Science and Emgeneering |
59 |
| Electrical Engeneering |
57 |
| Engineering Physics |
27 |
| Material Science and Metallurgical Engeneering |
30 |
| Mathmatics and Computing |
20 |
| Mechanical Engeneering |
58 |
| Total |
425 |
IIT Jodhpur
- IIT Jodhpur is located in Rajasthan.
| Courses |
No of Students |
| Artificial Intelligence and Data science |
50 |
| Bio Engeneering |
50 |
| Chemical Engeneering |
50 |
| Civil and Infrastructure Engeneering |
50 |
| Computer Science and Engeneering |
80 |
| Electrical Engeneering |
80 |
| Materials Engeneering |
50 |
| Mechanical Engeneering |
80 |
| Total |
490 |
IIT Patna
- IIT Patna is located in Bihar.
| Courses |
No of intake |
| Chemical Engeneering |
67 |
| Civil Engeneering |
67 |
| Computer Science and Engeneering |
83 |
| Electrical and Electronics Engeneering |
83 |
| Mechanical Engeneering |
83 |
| Metallurgical and Materials Engeneeirng |
44 |
| Total |
427 |
IIT Indore
- IIT Indore is located in Madhya Pradesh.
| Civil Engeneering |
53 |
| Computer Science and Engeneerng |
82 |
| Electrical Engeneering |
84 |
| Mechanical Engenering |
87 |
| Metallurgical Engeneering nad Material Science |
53 |
| Total |
360 |
IIT Mandi
- IIT Mandi provides niche courses in :
- Master of Technology in Power Electronics and Drives in MTech
- Climate Science and Technology in MTech
- IIT Mandi is located in Himachal Pradesh.
| Courses |
No of intake |
| Civil Engeneering |
49 |
| Computer Science and Engeneering |
70 |
| Data Science and Engeneering |
28 |
| Electrical Engeneering |
68 |
| Engeneering Physics |
28 |
| Mechanical Engeneering |
58 |
| Dual Degree |
| Bio Engeneering |
28 |
| Total |
329 |
IIT Varanasi (BHU)
- IIT Varanasi provides niche courses in :
- Ceramic engeneering in BTech
- Pharmaceutical engeneering & Technology BTech
- Thermal Science And Engeneering in MTech
- Climate Science And Technology in MTech
- Biochemical Engeneering in dual degree program
- Industrial Chemistry in dual degree program
- Civil Engeneering + Transportation Engeneering in Dual degree program
- IIT Varanasi is located in Uttar Pradesh.
| Courses |
No of studens |
| Ceramic Engeneering |
75 |
| Chemical Engeneering |
156 |
| Civil Engeneering |
120 |
| Computer Science and Engeneering |
99 |
| Electricls Engeneerng |
115 |
| Electronics Engeneering |
133 |
| Mechanical Engeneering |
148 |
| Metallurgical Engeneering |
106 |
| Mining Engeneering |
131 |
| Pharmaceutical engeneering and Technology |
80 |
| Architecture |
| Architecture |
26 |
| Dual Degree |
| Biochemical Engeneering with M.Tech in Biochemical Engeneering and Biotechnology |
25 |
| Bioengeneering with M.Tech in Biomedical Technology |
21 |
| Ceramic Engeneering |
20 |
| Civil Engeneering |
30 |
| Computer Science and Engeneering |
34 |
| Electrical Engeneering with M.Tech in Power Electronics |
30 |
| Engeneering Physics |
28 |
| Industrial Chemistry |
21 |
| Material Science and Technology |
28 |
| Mathmatics nad Computing |
52 |
| Mechanical Engeneering |
32 |
| Metallurgical Engeneering |
28 |
| Mining Engeneering |
30 |
| Pharmaceutical Engeneering & Technology |
21 |
| Total |
1589 |
IIT Palakkad
- IIT Pallakad is located in Kerela.
| Civil Engeneering |
43 |
| Computer Science and Engeneering |
54 |
| Electrical Engeneering |
52 |
| Mechanical Engeneerng |
39 |
| Total |
188 |
IIT Tirupati
- IIT Tirupati is located in Andhra Pradesh.
| Coursees |
No of students |
| Chemical Engeneering |
39 |
| Civil Engeneering |
39 |
| Computer Science and Engeneering |
53 |
| Electrical Engeneering |
53 |
| Mechanical Engeneering |
53 |
| Total |
237 |
IIT Dhanbad
- IIT Dhanbad provides niche courses in :
- Master of Technology in Power Electronics and Drives in MTech
- Mineral Engeneering in BTech
- Mining Machinery Engeneering
- IIT Dhanbad is located in Jharkhand.
| Courses |
No of Students |
| Chemical Engeneering |
55 |
| Civil Engeneering |
69 |
| Computer Science and Engeneering |
139 |
| Electrical Engeneering |
123 |
| Electronics and Communication Engeneering |
124 |
| Engeneering Physics |
31 |
| Environmental engeneering |
48 |
| Mechanical Engeneering |
131 |
| Mineral and Metallurgical Engeneering |
45 |
| Mining Engeneering |
117 |
| Mining Machinery Engeneering |
56 |
| Petroleum Engeneering |
90 |
| Dual Degree |
| Applied Geollogy |
21 |
| Applied Geophysics |
21 |
| Mathmatics and Computing |
55 |
| Total |
1125 |
IIT Bhilai
- IIT Bhilai is located in Chattisgadh.
| Courses |
No of intake |
| Computer Science and Engeneering |
54 |
| Data Science and Artificial Intelligence |
20 |
| Electrical Engeneering |
54 |
| Mechanical Engeneering |
55 |
| Total |
183 |
IIT Jammu
- IIT Jammu is located in Jammu and Kashmir.
| Courses |
No of intake |
| Chemecal Engeneering |
38 |
| Civil Engeneering |
38 |
| Computer Science and Engeneering |
43 |
| Electrical Engeneering |
40 |
| Material science and Engeneering |
38 |
| Mechanical Engeneering |
40 |
| Total |
237 |
IIT Goa
- IIT Goa is located in Goa.
| Courses |
No of students |
| Computer Science and Engeneering |
40 |
| Electrical Engeneering |
43 |
| Mathmatics and Computing |
29 |
| Mechanical Engeneering |
45 |
| Total |
157 |
IIT Dharwad
- IIT Dharwad is located in Karnataka.
| Courses |
No of students |
| Computer Science and Engeneering |
56 |
| Electrical Engeneering |
52 |
| Mechanical Engeneering |
62 |
| Total |
170 |


Having originally studied design, I have an appreciation for the small details. I care about white-space, typography and colour.
What attracted me to Tundra was the care for the end user experience and attention to detail which shows in Tundra's work.
Outside of being a developer, I enjoy music production, ice skating hiking and getting outdoors.
In my downtime, I like to visit web design blogs such at Httpster and Site Inspire to keep up with modern web and interaction trends.
When building a web interface, I try to put the user at the forefront of the process. What is the purpose and how will they interact?
I am passionate about what I do. I am not afraid to suggest new ideas or improve on existing work.


In this work I continue my process of overlaying videos with a painterly style using ai image processing. In this iteration, I implemented an interactive element in which you hover over the video to switch between the raw video and its ai processed counterpart. The concept I explore is how artists can become enveloped in their work or medium. I wanted to capture that feeling of full immersion in a world seen through the lens of an artist. It's a visual representation of a painter's raw imagination before it takes a static form on a canvas. This is accomplished through digitally animated versions of traditional painting styles.
Instructions: Hover over the image to reveal the ai processed version.


| Giant Kelp Redwood of the algae world, this brownish gold, fast-growing plant can reach 100 feet (30 meters) in height. The plants flattened blade is where cells absorb water and carbon dioxide from the sea and, through photosynthesis, convert the ingredients into oxygen and food compounds. Each giant kelp is really two plants. The large, leafy sporophyte plants that sway gently in the sea currents produce spores; smaller plants that sprout at the plants feet, called gametophyte, produce eggs or sperm that create a new generation of giant kelp. Full-grown giant kelp may live for seven years or more. They grow in cold-water coastal areas, primarily along the west coasts of North and South America. |


Module pl.permute
Permutation operations
Functions
| iter (a) | an iterator over all permutations of the elements of a list |
| table (a) | construct a table containing all the permutations of a list |
Functions
- iter (a)
-
an iterator over all permutations of the elements of a list
Please note that the same list is returned each time, so do not keep references!
Parameters:
a
: list-like table
Returns:
-
an iterator which provides the next permutation as a list
- table (a)
-
construct a table containing all the permutations of a list
Parameters:
a
: list-like table
Usage:
permute.table {1,2,3} --> {{2,3,1},{3,2,1},{3,1,2},{1,3,2},{2,1,3},{1,2,3}}
Returns:
-
a table of tables


| Figure 1 |
Relative present value as a function of carbon price. ( a) S ... |
| Figure 2 |
Parameter importance as determinants of relative present val ... |
| Figure 3 |
Parallel coordinates plot of the relative net present values ... |
| Figure 4 |
Parameter ranges for which each technology has the highest r ... |


Home
Content
Contact
Our works
If you want to see more work, please contact us.


Cacti - T. pachanoi
Short Story:
When I went to the doctor several months ago (an addiction specialist who is helping me overcome an opiate addiction) I was asked to submit a urine specimen for testing.
I had recently been to a Roger Waters: Dark Side of the Moon concert where I had indulged in smoking marijuana as well as ingesting dried San Pedro (Trichocereus Pachanoi) cactus which is 1%-2% mescaline by volume.
The testing was done right there in the doctors office using what looked like several different over-the-counter testing kits that use multiple 'indicator strips' that change color and appearance when put in contact with the urine.
I tested positive for most everything, which I expected, but I also tested positive for Amphetamines which surprised me.
A month went by and steadily that positive indication on each new Amphetamine indicator strip test was slowly fading until I was finally negative for Amphetamines.
That same week the doctor confronted me with the results of my first urine which he had sent to a Lab for further analysis by GC/MS methods. By this time I had my own working theory that it was the Mescaline that 'flagged' my earlier positive amphetamine test.
However, the lab results of the GC/MS testing showed no amphetamines were present in any detectable levels. The reason is because although the lab tested for 20+ drugs, 3,4,5-trimethoxy-ß-phenethylamine was not one of the the drugs on the list.. and they look for specifics.
The next weekend I coincidentally decided to have another mescaline experience. And on my very next doctor visit I tested positive again for amphetamines, surprise.
The moral of the story is, in my humble opinion, ironically it likely that mescaline will be detected as an amphetamine using low tech Over-The-Counter test kits and the NIDA-5 govt. standard test but the more high tech GC/MS testing methods often do not SPECIFICALLY check for the presence of mescaline unless requested/suspected by whomever is requesting the testing.
[Reported Dose: 'threshold 200mg']
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


org.apache.spark.storage
Classes
BlockId
BlockManagerId
BlockStatus
BroadcastBlockId
MemoryEntry
RDDBlockId
RDDInfo
ShuffleBlockId
ShuffleDataBlockId
ShuffleIndexBlockId
StorageLevel
StorageStatus
StorageStatusListener
StreamBlockId
TaskResultBlockId
TimeTrackingOutputStream
Exceptions
BlockNotFoundException


--- layout: doc title: Documentation ---
The node you are looking for is at Configuring undo behaviour.


This section covers each feature in Holodeck in detail. Research how to test your application more fully by understanding how to use the features of Holodeck completely.
Each of the following chapters contain all the advanced features of Holodeck.
New Project Wizard Holodeck can launch or attach to applications and services.
Creating Tests Scheduled tests allow you to fail a single API call based on that functions input and output parameters.
Creating Limits Holodeck can limit physical resources such as memory, hard drive space, and network bandwidth your application has available to it; use this to simulate different hardware configurations.
Creating Faults Faults are common failures a system might have, such as an invalid address for memory, or a network disabled error for the network.
Resource Faults Resource faults are faults that simulate problems accessing or loading a resource such as a process, library, file, folder, registry key, registry value or COM Object.
Working with Logs Holodeck logs all the APIs you select. You can filter, sort, change which functions are logged, export and more.
Working with Reports Holodeck can generate an easy to read report on your current project. This report contains information for every process in the project including logs, faults, limits, etc..
Using Automatic Test Generation Holodeck can automatically generate tests, limits, and faults for you through the use of code coverage or stress test generation.
Generating Network Corruption Faults The Network Corruption Fault Wizard will help you create corruption within network packets.
Generating File Corruption Faults Holodeck helps test file parsing by corrupting files.
Using regular expressions and Replacement strings Regular Expressions and Replacement strings can be used in conjunction with Network and File Corruption Faults.
Multiple Threads and Processes Holodeck can be focused on a single thread or follow multiple process.
Exceptions and Mini-dumps Holodeck can logs exceptions and create mini-dump files to help debug the application.
Recording and Replaying Sessions Holodeck allows you to record the tests Holodeck makes to help you reproduce bugs and verify failures.
Add New Holodeck Intercepts You can add new intercepts to Holodeck easily to help you intercept custom libraries.


jsPlumbToolkit.Renderers.AbstractRenderer Class
Superclass for renderers
Constructor
jsPlumbToolkit.Renderers.AbstractRenderer
-
params
Parameters:
-
params
ObjectConstructor parameters.
-
[view]
Object optionalParameters for Node, Port and Edge definitions. Although this is not a required parameter, the vast majority of applications will
-
[elementsDraggable=true]
Boolean optionalWhether or not elements should be made draggable.
-
[elementsDroppable=false]
Boolean optionalIf true, elements can be dragged onto other elements and events will be fired. What you choose to do with that event is up to you.
-
[id]
String optionalOptional id for this renderer. If you provide this you can then subsequently retrieve it via
toolkit.getRenderer(<id>)
. -
[refreshAutomatically=true]
Boolean optionalWhether or not to automatically refresh the associated layout whenever a Node is added or deleted.
-
[enhancedView=true]
Boolean optionalIf false, there will be no support for preconfigured parameters or functions in the definitions inside a view. You will want to set this for Angular if you use the 2-way data binding.
-
[assignPosse]
Function optionaloptional function that, given each node, can return the id of the posse to which the node belongs. a Posse is a group of nodes that should all be dragged together.
-
[modelLeftAttribute="left"]
String optionalOptional; specifies the name of the attribute by which to store the x position of a dragged node of
storePositionsInModel
is true. -
[modelTopAttribute="top"]
String optionalOptional; specifies the name of the attribute by which to store the y position of a dragged node of
storePositionsInModel
is true. -
[relayoutOnGroupUpdate=false]
Boolean optionalIf true, any change to a Group's nodes will cause a relayout.
-
Item Index
Methods
- activateState
- addToPosse
- adHocLayout
- autoSizeGroups
- batch
- deactivateState
- getCoordinates
- getLayout
- getPath
- getPosition
- getRenderedConnection
- getRenderedElement
- getRenderedEndpoint
- getRenderedGroup
- getRenderedNode
- getRenderedPort
- getSize
- isHoverSuspended
- jsPlumbToolkitUtil.ajax
- jsPlumbToolkitUtil.debounce
- jsPlumbToolkitUtil.xml.createElement
- jsPlumbToolkitUtil.xml.getChild
- jsPlumbToolkitUtil.xml.getChildren
- jsPlumbToolkitUtil.xml.getNodeText
- jsPlumbToolkitUtil.xml.setNodeText
- jsPlumbToolkitUtil.xml.xmlToString
- magnetize
- refresh
- relayout
- removeFromAllPosses
- removeFromPosse
- resetState
- setHoverSuspended
- setJsPlumbDefaults
- setLayout
- setPosition
- setPosse
- setRefreshAutomatically
- setSuspendRendering
- setView
- setVisible
- storePositionInModel
- storePositionsInModel
Methods
activateState
-
stateId
-
[target]
Activates the UI state with the given ID on the objects contained in the given target. If target is not supplied, the state is activated against the entire dataset.
Parameters:
-
stateId
StringID of the state to activate. States are defined inside a
states
member of yourview
definition. -
[target]
Selection | Path | JsPlumbToolkitInstance | Element optionalSet of objects to activate the state on. If null, the entire dataset (Nodes, Edges and Ports) is used. If you provide an Element here, a Selection is created that consists of the Node representing the element, plus all Edges to and from the given Node.
addToPosse
-
obj
-
posse
-
[active=true]
Add the given Node to the posse with the given name
Parameters:
-
obj
Element | String | NodeA DOM element representing a Node, or a Node id, or a Node.
-
posse
StringID of the posse to add the Node to.
-
[active=true]
Boolean optionalIf true (which is the default), the Node causes all other Nodes in the Posse to be dragged. If false, this Node drags independently but is dragged whenever an active member of the Posse is dragged,
adHocLayout
-
layoutParams
Applies the given layout one time to the content.
Parameters:
-
layoutParams
ObjectParameters for the layout, including type and constructor parameters.
autoSizeGroups
()
Run the groups auto size routine.
batch
-
fn
Wraps the underlying Toolkit's batch
function with the added step of first suspending events being
fired from this renderer.
Parameters:
-
fn
ObjectFunction to run while rendering and events are both suspended.
deactivateState
-
stateId
-
[target]
Deactivates the UI state with the given ID on the objects contained in the given target. If target is not supplied, the state is deactivated against the entire dataset.
getCoordinates
-
el
Gets the origin and size of an element that is being managed by the Surface.
Parameters:
-
el
String | Element | Selector | NodeElement id, element, selector or Node to get position for.
Returns:
{x:.., y:..., w:..., h:...} if element found, otherwise null.
getLayout
()
Layout
Gets the current layout.
Returns:
The current layout.
getPath
-
params
Gets a Path from some source Node/Port to some target Node/Port. This method is a wrapper around the
Toolkit's getPath
method, adding a setVisible
function to the result.
Parameters:
-
params
ObjectPath spec params
-
source
Node | Port | StringSource node or port, or id of source node/port
-
target
Node | Port | StringTarget node or port, or id of target node/port
-
[strict=true]
Boolean optionalSets whether or not paths are searched strictly by the given source/target. If, for instance, you supply a node as the source, but there are only edges connected to ports on that node, by default these edges will be ignored. Switching
strict
to false will mean these edges are considered. -
[nodeFilter]
Function optionalOptional function that is given each Node's backing data and asked to return true or false - true means include the Node, false means exclude it.
-
[edgeFilter]
Function optionalOptional function that is given each Edge's backing data and asked to return true or false - true means include the Edge, false means exclude it.
-
Returns:
a Path object. Even if no path exists you will get a return value - but it will just be empty.
getPosition
-
el
Gets the position of an element that is being managed by the Surface.
Parameters:
-
el
String | Element | Selector | NodeElement id, element, selector or Node to get position for.
Returns:
[left,top] position array if element found, otherwise null.
getRenderedConnection
-
edgeId
Gets the underlying jsPlumb connection that was rendered for the Edge with the given id.
Parameters:
-
edgeId
StringID of the Edge to retrieve the Connection for.
Returns:
A jsPlumb Connection, null if not found.
getRenderedElement
-
obj
Gets the DOM node that was rendered for the given Node/Port.
Returns:
DOM element for the given Node/Port, null if not found.
getRenderedEndpoint
-
portId
Gets the underlying jsPlumb Endpoint that was rendered for the Port with the given ID.
Parameters:
-
portId
StringID of the Port to retrieve the Endpoint for.
Returns:
a jsPlumb Endpoint, null if not found.
getRenderedGroup
-
GroupId
Gets the DOM node that was rendered for the Group with the given id.
Parameters:
-
GroupId
StringGroup id for which to retrieve the rendered element.
Returns:
DOM element for the given Group id, null if not found.
getRenderedNode
-
nodeId
Gets the DOM node that was rendered for the Node with the given id.
Parameters:
-
nodeId
StringNode id for which to retrieve the rendered element.
Returns:
DOM element for the given Node id, null if not found.
getRenderedPort
-
portId
Gets the DOM node that was rendered for the Port with the given id.
Parameters:
-
portId
StringPort id for which to retrieve the rendered element. Note that you must supply the "full" id here, that is in dotted notation with the id of the Node on which the port resides.
Returns:
DOM element for the given Port id, null if not found.
getSize
-
el
Gets the size of an element that is being managed by the Surface.
Parameters:
-
el
String | Element | Selector | NodeElement id, element, selector or Node to get position for.
Returns:
[width, height] Array if element found, otherwise null.
isHoverSuspended
()
Boolean
Gets hover suspended state.
Returns:
Hover suspended state.
jsPlumbToolkitUtil.ajax
-
params
Execute an ajax call.
Parameters:
-
params
Object-
[type="get"]
String optionalHTTP operation.
-
[dataType]
String optionalExpected datatype of response.
-
url
StringURL to connect to.
-
success
FunctionFunction to call on success, with received data. Success is deemed to be any status code in the 2XX range.
-
[error]
Function optionalOptional function to call on error. Will be given the response text and the status code as arguments.
-
[data]
Object optionalOptional data payload.
-
[headers]
Object optionalOptional map of HTTP header values.
-
jsPlumbToolkitUtil.debounce
-
fn
-
[timeout=150]
Generates a debounce helper for the given function, with the given timeout. The given function will be called only
when a period of length timeout
has elapsed since the last call to the debounce function. Use this for stuff like
relayout of your UI when the window is resized, or firing an ajax call after a series of checkboxes have been
selected or deselected.
Parameters:
-
fn
FunctionFunction to fire
-
[timeout=150]
Number optionalTimeout, in milliseconds. Default is 150.
Returns:
a function with debouncing built in.
jsPlumbToolkitUtil.xml.createElement
-
name
-
[attributes]
-
[text]
Creates an XML element.
Parameters:
-
name
StringTag name of the element to create.
-
[attributes]
Object optionalOptional map of attribute names and values.
-
[text]
String optionalOptional text for the element.
Returns:
An XML element.
jsPlumbToolkitUtil.xml.getChild
-
parent
-
name
Gets the first instance of the child with the given tag name, null if none found.
Parameters:
-
parent
ElementElement to retrieve child from.
-
name
StringChild tag name to retrieve.
jsPlumbToolkitUtil.xml.getChildren
-
parent
-
name
Gets children of the given node (only direct children), returning an array of nodes (an empty array if none found).
Parameters:
-
parent
ElementElement to retrieve children from.
-
name
StringChild tag names to retrieve.
jsPlumbToolkitUtil.xml.getNodeText
-
node
Gets text from the given node.
Parameters:
-
node
ElementXML element.
jsPlumbToolkitUtil.xml.setNodeText
-
node
-
text
Sets a node's text value.
Parameters:
-
node
ElementElement to set text on.
-
text
StringText to set.
jsPlumbToolkitUtil.xml.xmlToString
-
xmlNode
Serializes the given XML node to a string, throwing an Error if something goes bad.
Parameters:
-
xmlNode
ElementXML element to serialize.
Returns:
Serialized XML element.
magnetize
-
[params]
Magnetize the display. You must indicate what sort of magnetization you wish to perform: if you provide an event,
the event's location will be the magnetization origin. If you provide origin:{left;xxx, top:xxx}
, that value will be used. If
you provide neither, the computed center of all elements will be used. You can also provide an options:{...}
value, whose
values can contain filter
, constrain
and padding
values for the specific run of the magnetizer.
Parameters:
-
[params]
Object optionalMagnetize parameters. If omitted, the origin of magnetization will be the computed center of all the elements.
-
[event]
Event optionalIf provided, the event location will be used as the origin of magnetization.
-
[origin]
Object optionalAn object with
left
andtop
properties. If provided, will be used as the origin of magnetization. -
[options]
Object optionalExtra magnetizer options for this run of the magnetizer.
-
refresh
()
Incrementally update the layout, without a reset. If rendering is suspended, this method does nothing.
relayout
-
[newParameters]
Reset the layout and run it again. This is different to refresh
in that refresh
does not reset the layout first.
Parameters:
-
[newParameters]
Object optionalOptional new parameters for the layout.
removeFromAllPosses
-
obj
Remove the given Node from all Posses to which it belongs.
Parameters:
-
obj
Element | String | NodeA DOM element representing a Node, or a Node id, or a Node.
removeFromPosse
-
obj
-
posse
Remove the given Node from the given Posse.
Parameters:
-
obj
Element | String | NodeA DOM element representing a Node, or a Node id, or a Node.
-
posse
StringID of the posse from which to remove the Node from.
resetState
()
Resets (clears) the UI state of all objects in the current dataset.
setHoverSuspended
-
suspended
Sets/unsets hover suspended state. When hover is suspended, no connections or endpoints repaint themselves on mouse hover.
Parameters:
-
suspended
Boolean
setJsPlumbDefaults
-
defaults
Sets the current jsPlumb defaults
Parameters:
-
defaults
ObjectDefaults to set.
setLayout
-
layoutParams
-
[doNotRefresh=false]
Sets the current layout.
Parameters:
-
layoutParams
ObjectParameters for the layout, including type and constructor parameters.
-
[doNotRefresh=false]
Boolean optionalDo not refresh the UI after setting the new layout.
setPosition
-
node
-
x
-
y
-
[doNotUpdateElement=false]
Sets the position of the given Node or Group.
Parameters:
-
node
String | Node | ElementEither a Node/Group id, a DOM element representing a Node/Group, or a Node/Group.
-
x
Integerleft position for the element.
-
y
Integertop position for the element.
-
[doNotUpdateElement=false]
Boolean optionalIf true, the DOM element will not be moved. This flag is used internally by various Toolkit methods; most external calls to this method will want the element to be moved.
setPosse
-
el
-
spec
Sets the posse(s) for the element with the given id, creating those that do not yet exist, and removing from the element any current Posses that are not specified by this method call. This method will not change the active/passive state if it is given a posse in which the element is already a member.
Parameters:
-
el
ElementElement to set posse(s) on.
-
spec
String... | Object...Variable args parameters. Each argument can be a either a String, indicating the ID of a Posse to which the element should be added as an active participant, or an Object containing
{ id:"posseId", active:false/true}
. In the latter case, ifactive
is not provided it is assumed to be true.
setRefreshAutomatically
-
refreshAutomatically
Sets whether or not the layout is refreshed automatically after a Node, Port or Group is added or removed.
Parameters:
-
refreshAutomatically
BooleanTrue to refresh automatically, false otherwise.
setSuspendRendering
-
val
Sets whether or not rendering is suspended. This actually does not mean that new nodes are not added, but it does mean that the panzoom widget is informed not to do any work involving element postions or sizes.
Parameters:
-
val
Object
setView
-
p
Sets the current view for this renderer.
Parameters:
-
p
ObjectView to set.
setVisible
-
obj
-
state
-
[doNotCascade=false]
Sets the visibility of some Node/Port or Edge.
Parameters:
-
obj
Selection | Path | Edge | Node | Port | String | Node[] | Port[] | Edge[] | StringAn Edge, Port, Node or - in the case of String - a Node/Port id.
-
state
BooleanWhether the object should be visible or not.
-
[doNotCascade=false]
Boolean optionalIf true, the method does not cascade visibility changes down from a Node to its connected Edges, or from an Edge to its Ports. The default is for this to happen.
storePositionInModel
-
id
-
params
Writes the current left/top for some Node or Group into the data model. A common use case is to run an auto layout the first time some dataset is seen, and then to save the locations of all the Nodes/Groups once a human being has moved things around. Note that this method takes either a String, representing the Node or Group's ID, and uses the default values for left/top attribute names, or an Object, in which you provide the id and the left/top attribute names.
Parameters:
-
id
StringID of the Node or Group for which to store the position. Either supply this, or an object containing id and values for the left/top attribute names.
-
params
ObjectParameters. An object containing id and values for the left/top attribute names. Supply this or just supply the node id as a string.
-
id
IntegerNode or Group id
-
[group=false]
Boolean optionalIf true, the ID given is for a Group, not a Node.
-
[leftAttribute]
String optionalName of the attribute to use for the left position. Default is 'left'.
-
[topAttribute]
String optionalName of the attribute to use for the top position. Default is 'top'.
-
Returns:
The current position as [left, top].
storePositionsInModel
-
params
Writes the current left/top for each node into the data model. A common use case is to run an auto layout the first time some dataset is seen, and then to save the locations of all the nodes once a human being has moved things around.
Parameters:
-
params
ObjectParameters
-
[leftAttribute]
String optionalName of the attribute to use for the left position. Default is 'left'
-
[topAttribute]
String optionalName of the attribute to use for the top position. Default is 'top'
-


{% extends "app/base.html" %} {% block bodyid %}register{% endblock %} {% block title %}First time user - Example App{% endblock %} {% block content %} {# Currently, the messages here do nothing #} {% if messages %}
This is the first time you have logged into our site with this account. Please choose a username that you'd like to use and provide your email address.


APEC 2021 Bill passes first reading
by New Zealand GovernmentForeign Affairs Minister Winston Peters has welcomed the first reading of the Asia Pacific Economic Cooperation 2021 (APEC 2021) Bill in Parliament today. The temporary bill supports New Zealand’s security preparations for hosting the Asia Pacific Economic Cooperation (APEC) Forum in 2021.
“APEC is the leading economic and trade forum in the Asia-Pacific region and APEC 2021 will be the largest international event ever hosted by the New Zealand Government, bringing with it complex security needs. Up to 20,000 visitors are expected throughout the year, including world leaders, ministers and international media,” Mr Peters said.
“This Bill will ensure the New Zealand Police has the resources it needs, as well as provide temporary security and safety measures around key meeting locations during the leaders’ event,” Mr Peters said.
The temporary legislation, which passed its first reading today with bipartisan support, will expire at the end of November 2021.
The Bill will now proceed to the Foreign Affairs, Defence and Trade select committee for consideration and public consultation. The Bill can be read in full here.


STACEY ABRAMS on GEORGIA RACE: ‘I Put My Money on Blue’
STACEY ABRAMS on GEORGIA RACE: ‘I Put My Money on Blue’ | Sean HannityFailed Georgia gubernatorial candidate Stacey Abrams spoke with late-night comedian Stephen Colbert Monday; saying Democrats are “ready to...
https://hann.it/3pPAcqE
@Mgrant5150 Guarantee this election is stolen bc Inventor JOVAN PULITZER has said his team was able to hack the DOMINION voting machines from a polling pad & said that these voting machines is connected to the internet & has data incoming & outgoing while ppl were still voting in real time!!!! & he has testified at the GEORGIA SUBCOMMITTEE & said THIS HACK CANNOT STAND!!!! This folks needs to be investigated!!!! They are using the same tactic in the Nov. 3 Presidential election!!! Go figure ppl!!! #STOPTHEDAMNSTEAL!!!!!!
The only ones who can pick the electors are the state legislators.....what part of are the only one's don't you so called smart people understand....Read the Constitution it explicitly say's this therefore the voting process was illegitimate........Read farther and all involved have committed wait for it; TREASON......Bob T......
You should really look at the fraudulent empire she has built. She is behind all the fraud that has taken place.  Why should Democrat operatives be afraid of cheating or accusations of voter fraud when they were not held accountable for it on Nov. 3, 2020?
 What s hog, she will go 500 lbs dressed out, my dad use to get top dollar for those hogs
That ruling by her sister should be thrown out by a higher court of appeals due to conflict of interest.
Where's the Proud Boys & Bikers...... Need to show those officials how to count legitimate votes, Abrams, her sister, Raffensperger, & Kemp !
You mean other ppls money ?
When you cheat it’s a for sure bet.
 Why would they not if they got away with stealing the presidency!!!
Figuratively AND literally
She disgusts me beyond belief!
Of course, being she leads the cheating ring and uses her sister as a judge to cheat
Because you’ve already put millions of corrupting it
I bet she does. Freaking voter thief.

She’s a pig! 😡


At least seven killed in gas explosion in Bangladesh
by ReutersDHAKA — At least seven people were killed and eight injured on Sunday after a gas pipeline exploded in the Bangladeshi port city of Chittagong, a police official said.
The pipeline exploded in front of a five-story building, blowing some of the building’s walls off, Mohammad Mohsin said, citing witnesses.
The injured were taken to hospital, he said, adding the death toll could rise as some were in critical condition.
Among the injured, one suffered burns while others were wounded by the wall collapse, Mohsin said.
It was not immediately clear what caused the explosion, fire service official Amir Hossain said, adding an investigation was under way.
Last month seven children died after a gas cylinder used for inflating balloons exploded in the capital Dhaka.
Faulty gas pipelines and substandard cylinders often cause accidents in the south Asian country, blamed on lax monitoring.
(Reporting by Ruma Paul; Editing by Susan Fenton)


Summary
Our goal was to detect the vegetation from an image of a road side, and we achieve our main request.
We decided not to focus only at one solution, and we were working on several approaches, unfortunately none of them was perfect. Used technologies include MathLab, Python and several image processing and machine learning libraries (OpenCV, skimage, sklearn).
The principal idea fulfilled the task which was placed in front of us, but it did not work well when the vegetation had another determinate color than green. That is why we created more complicated program which used pre – processing and dilated all non-gray scale pixel's green channel.
Later we decided to try some more solution, which was pre – processing, machine learning and recognizing textures. After that, we noticed than none of the approaches has advantages and disadvantages as mentioned above. Though that we are glad of our results in such a short time of working.
For addition information please visit our git repository.


class: center, middle # Site Reliability Engineering # SRE --- # Agenda 1. The mind models of software operations 1. SRE Principles 1. SLI and SLO 1. Alert on SLO 1. The Calculus of Service Availability 1. Non Large Abstract System Design --- class: p-margin-small # The Mind Models of Software Operations Hard Boundary (ITIL) You build it, you run it aka DevOps Site Reliability Engineering SRE --- class: p-margin-small # Model: Hard Boundary (ITIL) We accept things like incidents and technical debt exists, but we try to get someone else to handle them. The classical Dev Department, Ops Department model.  Keep all responsibility in-house. **Strengths**: Production Ownership by Devs and Ops, good Feedback Loop, short Lead Time, end to end Automation. **Weakness**: Poor aligment between Teams on Ops practicies, Teams reeinvent things, not all Solutions fit this Model, lots off skills needed in one Team (Development, Reliability, Security, Operation) --- class: p-margin-small # Model: Site Reliability Engineering SRE A dedicated Role with expertise in maintaining Reliability (Design for Reliability, Implement Reliability, Change Management, Monitoring, Incident Response) **Strengths**: Aligns with DevOps, Reliability is a feature, clear contract when to work on Reliability, one language for Reliability, specific role which owns the Knowledge, can scale. **Weakness**: If there is no governance on tools and practices, its hard. SRE practices are not for free. --- class: center, middle **Site Reliability Engineering is an engineering discipline devoted to helping an organization sustainably achieve the appropriate level of reliability in their systems, services and products** --- class: p-margin-small # Is SRE kind of DevOps? SRE provides the Practicies how Reliability can be addressed. DevOps focus on Lead Time and Automation, but there is no Guidance, how to Address the Aspect of Reliability. Anyway what is the Ops aspect? It means to **reliable** run the product and introduce change. SRE is not a competitor to DevOps, it provides Practicies how to implement the Reliability aspect. --- class: p-margin-small # Why does Reliability matter If your product is down, your product has no value. If you product misbehaves, you can loose your whole business. --- class: p-margin-small # Most Important SRE Principles/Practicies 1. **SLI, SLO and Errorbudget** 1. **Alert on SLO** 1. ~~Eliminating Toil~~ 1. *Incident Response* 1. ~~Postmortem Culture~~ 1. *Canarying Releases* 1. *Non Large Abstract System Design* --- class: center, middle # SLI/SLO **Service Level Indicator** A quantifiable measure of service reliability. With focus on how the user experiences reliability. --- # SLI and the user happiness .center[![Default-aligned image](images/sli_happy_unhappy.png)] --- # SLI and the user happiness .center[![Default-aligned image](images/sli_happy_unhappy_metric.png)] --- # SLI and the user happiness .center[![Default-aligned image](images/sli_happy_unhappy_metric_noise_ratio.png)] --- class: p-margin-small # Possible metrics for SLI * http response code * response time * response data quality --- # Definition of SLI .center[![Default-aligned image](images/good_events_valid_events.png)] --- # Definition of SLI http response code example .center[![Default-aligned image](images/good_events_valid_events.png)] **valid events** = `100` http resp **good events** = `95` http resp with `code != 5.*` **SLI** = `95` --- class: center, middle # SLI/SLO **Service Level Objective** Set a reliability target for an SLI --- # Definition of SLO .center[![Default-aligned image](images/happy_unhappy_slo.png)] --- class: center, middle # Definition of SLO The SLI http response code must be 99 over a rolling window of 30 days --- class: p-margin-small # We got an error budget In a rolling window 30 days we can only have `100 - SLI (99)` bad response codes. Means if there are 1'000'000 requests we can afford 10'000 bad requests/response. --- class: p-margin-small # Act on the error budget The error budget is actionable When the error budget declined to a certain point, we can prioritize reliability improvements over new features **We just added reliability as a feature to our value stream** The PO can treat new functionality and reliability head to head in the same model --- class: p-margin-small # Alert on SLI As consequence we should also base our alerting on the SLI metric But when should we page the on-call engineer? And when should we just create an issue, that can be worked on in working hours? --- # Alert on SLO Burndown Rate .center[![Default-aligned image](images/slo_burndown_rate.png)] --- class: p-margin-small # Alert on SLO Burndown Rate If we have a burn rate of 14% of the overall errorbudget in the last 5min, we page somebody. If we have a burn rate of 1% over the last 6 hours we create a ticket, notify over another channel --- class: p-margin-small # Alert on SLO Burndown Rate Not so simple because you have several factors: * Detection Time (System down should alert immediately) * Reset Time (When the SLI is back to 100, the alert should not fire anymore) The problem can be solve with a multiwindow alerting and expressed in PromQL for example. For an example check [Alerting on SLOs like Pros](https://developers.soundcloud.com/blog/alerting-on-slos) --- class: p-margin-small # The Calculus of Service Availability What is the impact of nines on our Incident Response Time. Availability and the downtime per year: 99 -----> 87.6h 99.9 ---> 8.76h 99.99 --> 52.6m 99.999 -> 5.26m --- class: p-margin-small # SLO Dependencies A service can only be as reliable as the sum of SLO's of his critical dependency. A critical dependency brings your service down, if it is down: * network * run infrastructure (*aaS) * *database?* * ~~another service~~ Critical dependencies needs an extra 9 --- class: p-margin-small # Example 99.9 * 5 Critcal Dependencies * Error Budget is 526m Downtime, Dependencies eat 263m, **263m** is left * expect 2 Outages, time MTTR per outage is 132m * Detection Time for alert 2m * Until oncall is ready to fix 20m * **Remaining time for fix 110m** --- class: p-margin-small # Example 99.99 * 5 Critcal Dependencies * Error Budget is 52.6m Downtime, Dependencies eat 26.3m, **26.3m** is left * expect 2 Outages, time MTTR per outage is 13.2m * Detection Time for alert 2m * Until oncall is ready to fix 20m * --> **Game Over, we missed our four nines** --- class: center, middle # Calculus of Nines conclusion Relying on humans for fixing production issues can not lead to high reliability We need other measures --- class: p-margin-small # Have multiple instances of your service First of all you need multiple instances. The more instances you have, the less you consume from your SLI when one instance fails. when 1 of your 10 instances fails, your SLI is down to 90. If 1 instance of your 100 instances fail, your SLI is down to 99. --- class: p-margin-small # Distribute your System, no Single Point of Failure **Multi Instance, Multi Node, Multi Datacenter** The more the nines, the more distributed your System needs to be But also the cost of beeing (eventual) consistent increases (CAP) --- class: p-margin-small # Roll out your changes gradually The known method for rolling out change gradually is canarying. This can be done with everything. Config change, code change, BIOS update ... just name it. Again, If 1 instance of your 100 instances fail on your change, your SLI is down to 99. Automate the Rollback, based on metrics. --- class: p-margin-small # Non Large Abstract System Design NLASD is the ability to assess, design, and evaluate (large) systems. Practically, NALSD combines elements of: * capacity planning * component isolation * instance, data distribution * high availability * clustering * graceful system degradation --- class: p-margin-small # Non Large Abstract System Design Non Abstract, becasue the White Board Design has to be translated into Response Times, Network Bandwith, IOPS, RAM Access Time, Failure Modes etc. And these numbers will be measured and the Design will be verified. --- class: center, middle # Should you do SRE As always it depends Is reliability a problem for you. If you are a 2 person startup, most probably not SRE is the solution. If you are a large company with high reliability requirements for some of you services, SRE can help you. --- class: p-margin-small # How can you start You don't have to start with a full blown SRE department. Start small and iterate: * Try to define your first SLI/SLO's * Get in contact with Business/Users to align on SLO * Start to monitor the error budget * Alert on SLO * Assess your Services with the NALSD --- class: center, middle Much more to say, but not enough time --- class: p-margin-small # Conclusion SRE and Reliability doesn't come for free If the built in Reliability of your Application and run Environment is sufficent, go with it. If you need to care about Reliability, SRE gives you a good framwork to treat Reliabilty in a predictible model. --- class: p-margin-small # Resources * [The SRE Workbook](https://landing.google.com/sre/workbook/toc/) * [The Mental Models for Reliable Software Engineering](https://www.youtube.com/watch?v=qD_qBUFkKMQ&feature=youtu.be&t=1050) * [DevOps Versus SRE](https://devops.com/site-reliability-engineering-101-devops-versus-sre/) * [The Calculus of Service Availability](https://queue.acm.org/detail.cfm?id=3096459) * [Best Practices for Setting SLOs and SLIs For Modern, Complex Systems](https://blog.newrelic.com/engineering/best-practices-for-setting-slos-and-slis-for-modern-complex-systems/) * [SLOs Are the API for Your Engineering Team](https://www.infoq.com/articles/slos-engineering-team-API/) * [Stop Talking & Listen; Practices for Creating Effective Customer SLOs](https://www.infoq.com/presentations/slo-pitfalls-2019/) --- class: p-margin-small # Resources * [Canary Analysis Service](https://queue.acm.org/detail.cfm?id=3194655) * [Why SRE Documents Matter](https://queue.acm.org/detail.cfm?id=3283589) * [Alerting on SLOs like Pros](https://developers.soundcloud.com/blog/alerting-on-slos) * [https://github.com/floriankammermann/sre-presentation](https://github.com/floriankammermann/sre-presentation) --- class: center, middle # keep the evolution going Get better in Reliability, by not compromising the Value Stream


Chapter 1 tibbles, ggplot2, and the tidyverse
The tidyverse universe includes:
## ── Attaching packages ──────────────────────────────────── tidyverse 1.2.1 ──
## ✔ ggplot2 3.2.0 ✔ purrr 0.3.2
## ✔ tibble 2.1.3 ✔ dplyr 0.8.1
## ✔ tidyr 0.8.3 ✔ stringr 1.4.0
## ✔ readr 1.3.1 ✔ forcats 0.4.0
## ── Conflicts ─────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
In general, the tidyverse is the following:
- provided the
pipe
command%>%
x %>% f(y, z, ...)
isf(x, y, z, ...)
- allows chained commands for better coherence
- e.g.,
mtcars %>% apply(2, mean)
is error withouttidyr::%>%
tibble
is the improved data structure of the tidyverse
- easier to read-in data to a useful format
- automatic type conversion
- nicer printing options
dplyr
provides tibble manipulation commands
- understandable data processing with
pipe
streams - filter data faster
- arrange rows of data easily
- select columns quickly
- mutate variables
- summarize according to
group_by()
- also provides SQL relational operations
ggplot2
is a plotting syntax (grammar of graphics)
qplot()
provides a sensible quick plot- apply plot types to data rather than the reverse
- e.g.
ggplot(data) + plot_type(aes(xvar, yvar, groups), options)
- allows grid of plots by group using facets
- overlays statistical summaries, e.g.
+ geom_smooth(x, y)
- “add” options such as transformed axes, labels, coordinates, etc.
readr
is a faster, less painful read-in method
read_fun
denotesreadr
functions (instead ofread.fun
)- guesses column types
- offers writing functions, too
- allows read and write with RDS, R’s binary format
tidyr
recharacterizes tibbles
spread()
turns key and value columns into key-category columns- e.g.,
state, year, pop
intostate, 1990, 1991, ...
of pop values gather()
turns expands data frames by condensing columns- e.g., condenses
1990, 1991, ...
into twoyear, pop
columns
- Other helpful tidyverse packages:
stringr
offers many usefulstr_fun
operationsforcats
has operations _for cat_egorical variableslubridate
provides date and time controlpurrr
The examples I’ll use in the next few chapters are the Boston housing database and the Lahman baseball database. By doing analysis on these two data sets, I hope to introduce the power of the tidyverse.
1.1 Tibbles: Boston housing data
Load, convert, print a tibble.
# Convert to a tibble so it prints nicely
library(MASS)
##
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
select <- dplyr::select
boston <- as_tibble(MASS::Boston)
boston
## # A tibble: 506 x 14
## crim zn indus chas nox rm age dis rad tax ptratio
## <dbl> <dbl> <dbl> <int> <dbl> <dbl> <dbl> <dbl> <int> <dbl> <dbl>
## 1 0.00632 18 2.31 0 0.538 6.58 65.2 4.09 1 296 15.3
## 2 0.0273 0 7.07 0 0.469 6.42 78.9 4.97 2 242 17.8
## 3 0.0273 0 7.07 0 0.469 7.18 61.1 4.97 2 242 17.8
## 4 0.0324 0 2.18 0 0.458 7.00 45.8 6.06 3 222 18.7
## 5 0.0690 0 2.18 0 0.458 7.15 54.2 6.06 3 222 18.7
## 6 0.0298 0 2.18 0 0.458 6.43 58.7 6.06 3 222 18.7
## 7 0.0883 12.5 7.87 0 0.524 6.01 66.6 5.56 5 311 15.2
## 8 0.145 12.5 7.87 0 0.524 6.17 96.1 5.95 5 311 15.2
## 9 0.211 12.5 7.87 0 0.524 5.63 100 6.08 5 311 15.2
## 10 0.170 12.5 7.87 0 0.524 6.00 85.9 6.59 5 311 15.2
## # … with 496 more rows, and 3 more variables: black <dbl>, lstat <dbl>,
## # medv <dbl>
?MASS::Boston
- crim per capita crime rate by town.
- zn proportion of residential land zoned for lots over 25,000 sq.ft.
- indus proportion of non-retail business acres per town.
- chas Charles River dummy variable (= 1 if tract bounds river; 0 otherwise).
- nox nitrogen oxides concentration (parts per 10 million).
- rm average number of rooms per dwelling.
- age proportion of owner-occupied units built prior to 1940.
- dis weighted mean of distances to five Boston employment centres.
- rad index of accessibility to radial highways.
- tax full-value property-tax rate per $10,000.
- ptratio pupil-teacher ratio by town.
- black \(1000(Bk - 0.63)^2\) where Bk is the proportion of blacks by town.
- lstat lower status of the population (percent).
- medv median value of owner-occupied homes in $1000s.
A ggplot is the first declaration (usually variable data
is defined), followed by graphics definitions (operations on the data):
ggplot(data = boston) +
geom_point(mapping = aes(x = rm, y = medv), alpha=0.4) +
labs(x = "avg. rooms per house",
y = "median house value",
title = "House values vs. size in Boston")
Making a histogram of all numeric variables. First step, gather all variables.
boston %>%
keep(is.numeric) %>% # strips all non-numeric columns (unnecessary here)
gather() # puts all variable values in a single column 'value'
## # A tibble: 7,084 x 2
## key value
## <chr> <dbl>
## 1 crim 0.00632
## 2 crim 0.0273
## 3 crim 0.0273
## 4 crim 0.0324
## 5 crim 0.0690
## 6 crim 0.0298
## 7 crim 0.0883
## 8 crim 0.145
## 9 crim 0.211
## 10 crim 0.170
## # … with 7,074 more rows
Facet wrap allows plotting each key
level separately.
boston %>%
gather() %>%
ggplot() +
facet_wrap(~ key, scales = "free") +
geom_histogram(mapping = aes(value), bins=20)
From the histograms, there seems to be only a few values of crim
over 30.
boston %>%
filter(crim > 30)
## # A tibble: 8 x 14
## crim zn indus chas nox rm age dis rad tax ptratio black
## <dbl> <dbl> <dbl> <int> <dbl> <dbl> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1 89.0 0 18.1 0 0.671 6.97 91.9 1.42 24 666 20.2 397.
## 2 38.4 0 18.1 0 0.693 5.45 100 1.49 24 666 20.2 397.
## 3 41.5 0 18.1 0 0.693 5.53 85.4 1.61 24 666 20.2 329.
## 4 67.9 0 18.1 0 0.693 5.68 100 1.43 24 666 20.2 385.
## 5 51.1 0 18.1 0 0.597 5.76 100 1.41 24 666 20.2 2.6
## 6 45.7 0 18.1 0 0.693 4.52 100 1.66 24 666 20.2 88.3
## 7 73.5 0 18.1 0 0.679 5.96 100 1.80 24 666 20.2 16.4
## 8 37.7 0 18.1 0 0.679 6.20 78.7 1.86 24 666 20.2 18.8
## # … with 2 more variables: lstat <dbl>, medv <dbl>
1.2 ggplot2 and EDA
But we want to know the conditional distributions according to medv
. First, showing this with conditional densities.
boston %>%
gather('key', 'value', -medv) %>%
mutate(price_gr = ntile(medv, 4)) %>%
ggplot(aes(value, group = price_gr)) +
facet_wrap(~ key, ncol = 4, scales = "free") +
geom_freqpoly(aes(color = price_gr), bins = 12)
# Click on the expand icon at the top right to make bigger.
Appears chas
is categorical.
boston <- boston %>%
mutate(chas = factor(chas))
Second, scatterplots of median value vs. all variables.
boston %>%
gather('key', 'value', -c(medv, chas)) %>%
ggplot(aes(x = value, y = medv)) +
facet_wrap( ~ key, scales = "free") +
geom_point(aes(shape = chas), size = 0.5, alpha = 0.25) +
geom_smooth(lwd = 0.5, se = TRUE) +
ggsave('plots/medv-scatter.pdf')
## Saving 7 x 5 in image
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
# Click on the expand icon at the top right to make bigger.
There are ggplot jitter options, but none worked for me.
boston %>%
gather('key', 'value', -c(medv, chas)) %>%
ggplot(aes(x = value, y = medv)) +
facet_wrap( ~ key, scales = "free") +
geom_jitter(aes(shape = chas), size = 0.5, alpha = 0.25) +
geom_smooth(lwd = 0.5, se = TRUE)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Tinkering to get a jittered plot.
var_sd <- boston %>%
gather('key', 'value', -c(medv, chas)) %>%
group_by(key) %>%
summarize(var_sd = sd(value))
boston %>%
gather('key', 'value', -one_of(c("medv", "chas"))) %>%
left_join(y = var_sd, by = "key") %>%
mutate(jit_val = value + var_sd * runif(nrow(boston), -0.1, 0.1)) %>%
ggplot(aes(x = jit_val, y = medv)) +
facet_wrap( ~ key, scales = "free") +
geom_jitter(aes(shape = chas), size = 0.5, alpha = 0.25) +
geom_smooth(lwd = 0.5, se = TRUE) +
ggsave('plots/medv-jitter.pdf')
## Saving 7 x 5 in image
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Covariance plot of variables.
boston %>%
keep(is.numeric) %>%
cor() %>%
as_tibble() %>%
mutate(name = colnames(boston[sapply(boston, is.numeric)])) %>%
gather( , , -one_of("name")) %>%
ggplot(aes(name, key, fill = value)) +
geom_tile() +
scale_fill_gradient2(low = "blue", mid = "white", high = "red",
breaks = seq(-1, 1, , by = 0.2)) +
theme(legend.key.height = unit(45, "pt"))
But a better correlation plot is in a package designed for them.
library(corrplot)
## corrplot 0.84 loaded
boston %>%
keep(is.numeric) %>%
cor() %>%
abs() %>%
corrplot(cl.lim = c(0, 1))
Analyze median value and highway access rad
.
boston %>%
ggplot(aes(rad, medv)) +
geom_jitter(aes(color = chas),
height = 2, width = NULL,
size = 1, alpha = 0.4) +
geom_smooth(aes(color = chas), lwd = 1)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Perhaps rad = 24
is a missing value.
boston %>%
count(rad)
## # A tibble: 9 x 2
## rad n
## <int> <int>
## 1 1 20
## 2 2 24
## 3 3 38
## 4 4 110
## 5 5 115
## 6 6 26
## 7 7 17
## 8 8 24
## 9 24 132
boston %>%
gather( , , -rad) %>%
group_by(key, rad) %>%
mutate(value = as.numeric(value)) %>% # necessary due to factor variable chas
summarize(z = round(mean(value), 1)) %>%
spread(rad, z)
## Warning: attributes are not identical across measure variables;
## they will be dropped
## # A tibble: 13 x 10
## # Groups: key [13]
## key `1` `2` `3` `4` `5` `6` `7` `8` `24`
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 age 45 64.8 49.3 60.8 69.2 60.1 40.1 67.3 89.8
## 2 black 389. 386. 392. 383. 369. 387. 388. 385. 288.
## 3 chas 0 0 0.1 0.1 0.1 0 0 0.2 0.1
## 4 crim 0 0.1 0.1 0.4 0.7 0.2 0.2 0.4 12.8
## 5 dis 6 4.1 5.1 4.4 3.7 4 6.5 4.4 2.1
## 6 indus 5.1 9.6 4.4 10.7 9.8 8.2 5 5.9 18.1
## 7 lstat 7.4 10 9.1 12.2 10.7 12.3 8 8 18.6
## 8 medv 24.4 26.8 27.9 21.4 25.7 21 27.1 30.4 16.4
## 9 nox 0.5 0.5 0.5 0.5 0.6 0.5 0.4 0.5 0.7
## 10 ptratio 17.6 17.3 18.2 19.1 16.5 17.8 18.4 18 20.2
## 11 rm 6.6 6.6 6.5 6.1 6.4 6.1 6.6 7 6
## 12 tax 291. 261. 246. 336 332. 373. 304. 301. 666
## 13 zn 39.9 20.4 16.4 14.7 11.1 13 26.7 6.2 0
Or in helpful boxplot format.
boston %>%
keep(is.numeric) %>%
gather( , , -rad) %>%
group_by(key, rad) %>%
ggplot(aes(x = rad, y = value, group = rad)) +
geom_boxplot(outlier.size = 0.5, varwidth = T) +
facet_wrap(~ key, ncol = 3, scales = "free") +
ggsave('plots/rad-boxplot.pdf')
## Saving 7 x 5 in image
Looking at lstat
relationships.
boston %>%
keep(is.numeric) %>%
gather( , , -lstat) %>%
mutate(lstat_gr = ntile(lstat, 10)) %>%
group_by(key, lstat_gr) %>%
ggplot(aes(x = lstat_gr, y = value, group = lstat_gr)) +
geom_violin() +
facet_wrap(~ key, ncol = 3, scales = "free") +
ggsave('plots/lstat-violin.pdf')
## Saving 7 x 5 in image
Jittering works well for single plots.
boston %>%
ggplot(aes(tax, nox)) +
geom_jitter(aes(color = medv, shape = chas),
height = 0.02, width = 10) +
scale_color_gradient2(midpoint = 20,
low = "blue", mid = "gray75", high = "red") +
geom_hline(yintercept = 0.6, color = "yellow") +
geom_abline(slope = 0.001, intercept = 0.1, color = "blue", lty = "93133313")
ggsave('plots/tax-nox.pdf')
## Saving 7 x 5 in image
1.3 Many plotting options
Statistics can be added to the plot as an additional layer. Other layers are coordinates, facets, and scales.
ggplot(data = boston) +
geom_point(mapping = aes(x = rm, y = medv, color = crim), alpha=0.75) +
geom_smooth(mapping = aes(x = rm, y = medv)) +
coord_cartesian(xlim = c(4.5, 7.5)) +
scale_y_log10() +
scale_color_gradient(low = "yellow", high = "blue") +
labs(x = "average rooms / house", y = "median house price ($K)",
title = "Boston median house prices vs. average house size")
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Maybe more useful if colored by quantile of crim
value.
boston %>%
mutate(crim = cume_dist(crim)) %>%
ggplot() +
geom_point(mapping = aes(x = rm, y = medv, color = crim), alpha=0.75) +
geom_smooth(mapping = aes(x = rm, y = medv)) +
coord_cartesian(xlim = c(4.5, 7.5)) +
scale_y_log10() +
scale_color_gradient(low = "yellow", high = "blue") +
labs(x = "average rooms / house", y = "median house price ($K)",
title = "Boston median house prices, house size, and crime")
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Now color by rad
but change all 24’s to NA’s.
boston %>%
mutate(rad = ifelse(rad == 24, NA, rad)) %>%
ggplot() +
geom_point(mapping = aes(x = rm, y = medv, color = rad), alpha=0.75) +
geom_smooth(mapping = aes(x = rm, y = medv)) +
coord_cartesian(xlim = c(4.5, 7.5)) +
scale_y_log10() +
scale_color_gradient(low = "yellow", high = "red", na.value = "black") +
labs(x = "average rooms / house", y = "median house price ($K)",
title = "Boston median house prices and access to radial highways")
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Maybe excluding newly-NA’ed rad
values helps the crime plot.
boston %>%
filter(!rad == 24) %>%
mutate(crim = cume_dist(crim)) %>%
ggplot() +
geom_point(mapping = aes(x = rm, y = medv, color = crim), size = 1) +
geom_smooth(mapping = aes(x = rm, y = medv), lwd = 0.5) +
scale_y_log10() +
scale_color_gradient(low = "yellow", high = "blue") +
labs(x = "average rooms / house", y = "median house price ($K)",
title = "Boston median house prices, house size, and crime")
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
A grid of nox
vs. dis
plots according to chas
(rows) and binned level (ntile) of rad
.
boston %>%
mutate(rad = ifelse(rad == 24, NA, rad)) %>%
filter(!is.na(rad)) %>%
ggplot(aes(nox, dis, color = medv)) +
geom_jitter() +
facet_grid(chas ~ ntile(rad, 3)) +
geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Multiplots available with gridExtra
, used by ggplot2.
require(gridExtra)
## Loading required package: gridExtra
##
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
##
## combine
p1 <- ggplot(boston) +
geom_point(aes(nox, medv, shape = chas, alpha = cume_dist(lstat)),
color = 'red', size = 2) +
labs(title = 'using aes(alpha, shape)')
p2 <- boston %>%
mutate(lstat_gr = ntile(lstat, 3)) %>%
ggplot(aes(tax, medv, color = lstat_gr, size = nox)) +
geom_point(shape = 16, alpha = 0.75) +
geom_smooth(aes(group = lstat_gr), lwd = 0.8) +
labs(title = 'using aes(group, size)')
p1
p2
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
ggsave('plots/two-plot.pdf', arrangeGrob(p1, p2))
## Saving 7 x 5 in image
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'


"{{query}}" matched {{res_count}}/{{all_posts}} jobposts in the last 6 weeks across the US. Highest occuring skills in the results: