Interactive Atlas Viewer
Interactive Atlas Viewer is an frontend module wrapping around nehuba. It provides additional features, such as metadata integration, data visualisation and a robust plugin system.
Getting Started
A live version of the Interactive Atlas Viewer is available at https://kg.humanbrainproject.org/viewer/. This section is useful for developers who would like to develop this project.
Interactive atlas viewer is built with Angular (v6.0), Bootstrap (v4), and fontawesome icons. Some other notable packages used are: ng2-charts for charts visualisation, ngx-bootstrap for UI and ngrx/store for state management.
Prerequisites
Develop Interactive Viewer
To run a dev server, run:
git clone https://github.com/HumanBrainProject/interactive-viewer
cd interactive-viewer
npm i
npm run dev-server
Develop Plugins
To develop plugins for the interactive viewer, run:
git clone https://github.com/HumanBrainProject/interactive-viewer
cd interactive-viewer
npm i
npm run dev-plugin
/* or define your own endpoint that returns string of manifests */
PLUGINDEV=http://mycustom.io/allPluginmanifest npm run dev-server
The contents inside the folder in ./src/plugin_examples
will be automatically fetched by the dev instance of the interactive-viewer on load.
plugin readme
plugin api
plugin migration guide
Deployment
package.json
provide with two ways of building the interactive atlas viewer, JIT
or AOT
compilation. In general, AOT
compilation produces a smaller package and has better performance.
AOT compilation
Define BUNDLEDPLUGINS
as a comma separated environment variables to bundle the plugins.
[BUNDLEDPLUGINS=pluginDir1[,pluginDir2...]] npm run build-aot
JIT Compilation
npm run build
/* OR */
npm run build-min
Contributing
Feel free to raise an issue in this repo and/or file a PR.
Versioning
Commit history prior to v0.2.0 is available in the legacy-v0.2.0 branch. The repo was rewritten to remove its dependency on neuroglancer and nehuba. This allowed for simpler webpack config, faster build time and AOT compilation.
License
MIT
URL State
Interactive Atlas Viewer could be run with already selected state. It is possible to create or save application URL so, that it will contain specific data which will usefull to run application with already defined state. In URL, this specific data, is saved as URL query parameters.
URL query parameters in Interactive Atlas Viewer
URL query parameters are variables which are located after URL and separated from the URL with "?" mark. URL query parameter variable contains variable name and value. Url query parameters are divided by "&" symbol. it is not possible to use whitespaces in the URL query. In Interactive Atlas Viewer, URL query parameters are used to save or create an application state. There are 6 main parameters which are used to save the application state. They are: navigation, niftiLayers, parcellationSelected, pluginState, regionsSelected and templateSelected.
Example of already filled URL looks like this:
https://dev-next-interactive-viewer.apps-dev.hbp.eu/?templateSelected=MNI+152+ICBM+2009c+Nonlinear+Asymmetric&parcellationSelected=Fibre+Bundle+Atlas+-+Long+Bundle&navigation=0_0_0_1__0.11092895269393921_0.8756000399589539_-0.44895267486572266_-0.13950254023075104__2500000__1430285_13076858_4495181__204326.41684726204®ionsSelected=31_51_32
4 parameters are mentioned inside the example URL:
- templateSelected
- parcellationSelected
- navigation
- regionsSelected
Template Selected - parameter
Template Selected parameter, is used to or select the template with using URL. From the given example we can see the parameter:
templateSelected=MNI+152+ICBM+2009c+Nonlinear+Asymmetric
In parameter value, whitespaces should be replaced with "+" symbol. So, actually, the selected template name is:
MNI 152 ICBM 2009c Nonlinear Asymmetric
To select a template from URL it is not required to have any other parameter. "Parcellation Selected" and "Navigation" parameters will be automatically added by default values. So, before the application automatically adds parameters, the URL will look like this:
https://dev-next-interactive-viewer.apps-dev.hbp.eu/?templateSelected=MNI+152+ICBM+2009c+Nonlinear+Asymmetric
Parcellation Selected - parameter
Given parameter is used to select parcellation on the template. As in template selection parameter value, whitespaces are changed with "+" symbol. To use Parcellation parameter, selection template should be in URL parameters too. Navigation parameter will be automatically added by default values. So, before the application automatically adds parameters, the URL will look like this:
https://dev-next-interactive-viewer.apps-dev.hbp.eu/?templateSelected=MNI+152+ICBM+2009c+Nonlinear+Asymmetric&parcellationSelected=Fibre+Bundle+Atlas+-+Long+Bundle
From this example selected parcellation name is
Fibre Bundle Atlas - Long Bundle
Navigation - parameter
Navigation parameter is to determine orientation, position and zoom of 2d and 3d parts of the selected template. It does not depend on selected parcellation, but it depends on the selected template.
Navigation parameter itself includes 5 fields - orientation, perspectiveOrientation, perspectiveZoom, position and zoom. They are sorted appropriate and divided by "__" symbol.
This is the navigation parameters part from the example
navigation=0_0_0_1__0.11092895269393921_0.8756000399589539_-0.44895267486572266_-0.13950254023075104__2500000__1430285_13076858_4495181__204326.41684726204
orientation - the field is used to determine an orientation of the 2D part in atlas viewer. The field contains with 4 numbers, divided by " " symbol. 3 of these numbers should have value "0" and one should have value "1". Value 1 will determine the orientation of the 2D image. In the example orientation is a first element - "0 0_0_1".
perspectiveOrientation - the field is used to determine an orientation of the 3D part in atlas viewer. The field contains with 4 numbers, divided by "_" symbol. In the example perspective orientation is the second element
0.11092895269393921_0.8756000399589539_-0.44895267486572266_-0.13950254023075104"
perspectiveZoom - the field is used to determine zoom in 3D pard in atlas viewer. It is the single number and is the third element - "2500000"
position - the field is used to determine the position of the dot where the camera is oriented in both 2D and 3D parts of atlas viewer. Field contains with 3 numbers, divided by " " symbol - "1430285 13076858_4495181".
zoom - the field is used to determine zoom in 2D pard in atlas viewer. It is the single number and is the last element - "204326.41684726204"
Regions Selected - parameter
Every region of selected parcellation has its own integer number as id. To select the region from URL, with templateSelected and parcellationSelected parameters, URL should contain the regionSelected parameter. In this parameter. In the given example, we can see the region parameter part.
regionsSelected=31_51_32
in parameter, different regions are divided with "_" symbol. It meant that in the given example, there are 3 selected parameters - 31, 51 and 32.
The region belongs to parcellation, so user can not add regionsSelected without templateSelected and parcellationSelected parameters. Navigation parameter will be automatically added by default values.
Nifti Layers - parameter
Nifti Layers parameter adds to the application URL, when the user selects the nifti layer of selected regions. The value of this parameter is text. Especially, it is a link where the nifti file is located.
Example
https://dev-next-interactive-viewer.apps-dev.hbp.eu/?niftiLayers=https%3A%2F%2Fneuroglancer.humanbrainproject.org%2Fprecomputed%2FJuBrain%2Fv2.2c%2FPMaps%2FIPL_PF.nii&templateSelected=MNI+Colin+27&parcellationSelected=JuBrain+Cytoarchitectonic+Atlas
You see, that value of parameter "niftiLayers" is
https%3A%2F%2Fneuroglancer.humanbrainproject.org%2Fprecomputed%2FJuBrain%2Fv2.2c%2FPMaps%2FIPL_PF.nii
This is the encoded text for URL where %3A is for ":" and %2F is for "/". So, nifti file's URL is
https://Fneuroglancer.humanbrainproject.org/Fprecomputed/JuBrain/v2.2c/PMaps/IPL_PF.nii
Contributing
Feel free to raise an issue in this repo and/or file a PR.


Combine Effective Volume Simulations¶
In this example we will illustrate a set of files with effective volume data can be combined to produce a high-statistics effective volume curve. This code can be found in the combining_simulations.py script in the examples directory. A typical set of arguments for the script might look like the following:
python combining_simulations.py /path/to/output/directory/ ara02_ENERGY_INDEX.h5
Warning
This script is intended to be run on the files output by the script in the previous example, Distributed Effective Volume Simulation.
"""A script for combining the outputs of multiple effective volume simulations"""
import argparse
import os, os.path
import re
import numpy as np
import matplotlib.pyplot as plt
import pyrex
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('directory',
help="directory containing simulation output files")
parser.add_argument('filename_pattern',
help=("pattern of file names to use, where 'ENERGY' will "+
"be replaced by the GeV energy in scientific "+
"notation (e.g. '1e9') and 'INDEX' will be replaced "+
"an incrementing index"))
args = parser.parse_args()
# Get a list of all of the files to read in
files = []
energies = []
full_pattern = re.compile(args.filename_pattern.replace("ENERGY", ".*").replace("INDEX", ".*"))
for filename in sorted(os.listdir(args.directory)):
if full_pattern.match(filename):
files.append(filename)
e_start = args.filename_pattern.index("ENERGY")
e_stop = -len(filename[e_start:].lstrip("1234567890e"))
energy = filename[e_start:e_stop]
if energy not in energies:
energies.append(energy)
energies.sort(key=lambda e: float(e))
# Iterate over the files of each energy, calculating the total effective volume
veffs = []
veff_errs = []
for energy in energies:
energy_pattern = re.compile(args.filename_pattern.replace("ENERGY", energy).replace("INDEX", ".*"))
energy_veffs = []
energy_veff_errs = []
for filename in files:
if energy_pattern.match(filename):
with pyrex.File(os.path.join(args.directory, filename)) as file:
energy_veffs.append(file['effective_volume'][0][0])
energy_veff_errs.append(file['effective_volume'][0][1])
# Note that averaging the effective volumes like this is only valid when
# each file (in a given energy) has the same number of events thrown as
# well as the same generation volume. If these conditions aren't met, each
# event in the files would need to be iterated in order to calculate the
# effective volume for the files as a whole.
veffs.append(np.mean(energy_veffs))
veff_errs.append(np.sqrt(np.sum(np.array(energy_veff_errs)**2))/len(energy_veff_errs))
energies = np.array([float(e) for e in energies])
veffs = np.array(veffs)/1e9
veff_errs = np.array(veff_errs)/1e9
print("Energy [GeV] \tVeff [km^3] \tError [km^3]")
for energy, veff, err in zip(energies, veffs, veff_errs):
print(f"{energy:.0e} \t{veff:.5e} \t{err:.5e}")
plt.loglog(energies, veffs)
plt.fill_between(energies, [v-e for v, e in zip(veffs, veff_errs)],
[v+e for v, e in zip(veffs, veff_errs)],
color='C0', alpha=0.2)
plt.xlabel("Neutrino Energy [GeV]")
plt.ylabel("Effective Volume [km^3]")
plt.tight_layout()
plt.show()


About
My Cv
Projects
Final-Project
To-Do-React
Lorem ipsum
Lorem ipsum
Lorem ipsum
Lorem ipsum
Hello World


Dogs
Cats
Reptiles
Birds
And more!
Lula is the sweetest Corgi you'll ever meet.
She loves to bark to show affection, and she is never too tired to play.
Uno is the most gentle kitten, who loves to squeak like Gizmo from the movie Gremlins.
He'd be happy to snuggle and boop YOU on the nose, and even plays fetch.
Chirp is the oldest member of the Pet Protectors family and is waiting to find his forever home.
He loves snacking on seeds and mimicking his favorite phrases.
Do you have a perch in your heart for Chirp to rest on?


{% extends "requests_list.html" %} {% block content %} {% if pager.total == 0 %}
{% if current_user.has_permission(PermissionType.submit) %} {# TRANS: Message shown when a user has not submitted any requests yet, asking them to try submitting one. #} {% trans %}You have not submitted any requests. Try submitting some with the Submit button above.{% endtrans %} {% else %} {# TRANS: Message shown when a user has not submitted any requests, but is also unable to submit any. This could happen if a user logs in but it was not intended for them to log in. #} {% trans %}You do not have permission to submit requests.{% endtrans %} {% endif %}
{% else %} {{ super() }} {% endif %} {% endblock content %}


Greeting!
Hello World!
Second Page
Jinja Page
Expressions Page
Data Structures Page
Conditional Statements Page
Looping Statements Page


"In lab, you will learn how to design and program effective graphical user interfaces, and how to perform user tests. We will cover a number of prototyping tools and require prototypes to be constructed in each, ranging from animated mock-ups to fully functional programs. Assignments will require implementing UIs, testing that interface with users, and then modifying the interface based on findings. Some class sessions will feature design reviews of student work." - CMU course description
Wednesdays 10:30-11:50am Newell Simon Hall 3002, taught by mkery phd student
Q/A on Piazza . Grades on Canvas
Direct message via email mkery [at] cs.cmu.edu
When your project and code is poorly structured, the world is a sadder place.


App ID links the sample mobile app to a project in on2t platform.
To set the App ID open the /scripts/app/settings.js file and replace $TELERIK_APP_ID$ with the App ID of your 'Friends' project.


We strive to have continuous opportunities to prepare our members for law school, beginning with the big question: is law school really for you? Following the Leadership Development Program, we offer at minimum three events and workshops for members every semester to further prepare them for law school. These events include round-table discussions with Deans of top law schools, workshops on the law school admissions process, and provide other useful resources to our members.
Through our exclusive contract with TestMasters, all Kappa Alpha Pi members receive $500 off TestMasters LSAT test preparation courses.
We are committed to maintaining strong bonds with every professional we work with. These esteemed individuals include top consultants, private and public attorneys, and top law school deans. By maintaining relationships with firms, companies, public entities, non-profit organizations and more, we ensure continuous and unique opportunities for our members.
The Kappa Alpha Pi alumni network runs deep. Our members have attended the nation’s top law schools and currently hold high-level positions both in government and the private sector. With such a diverse membership, we also have members in top business and graduate school programs. Each new member has the opportunity to connect with and learn from an alumni mentor working in their particular field of interest.
Our academic support resources include peer reviews of courses across a wide array of majors. We offer group study hours on a weekly basis and test banks for our active members. We also maintain strong relationships with elite test prep companies such as TestMasters and Blueprint. Membership will receive additional advantages, which include discounted prep courses.
We are committed to improving the quality of legal access and advocacy in the Bay Area. By partnering with organizations such as the East Bay Community Law Center, our members make impactful strides toward equality for underserved populations. Our philanthropic history also includes working with the Bay Area Urban Debate League and other similar causes.


Ponta do Sol lies on Madeira’s south west coast.
A new marina was built here in 2004 but has been destroyed twice by southerly winds in February 2006 and 2007. This should have been the biggest marina in Madeira with the capacity to receive up to 370 boats.
The marina is now closed without any forecast of re-opening for at least 3 years. The proposed project is to build an inside wall, to protect the marina, therefore reducing the marina to 1/3 of its original size. A hotel associated to the marina is also planned.
No further information available as at January 2013.


Assistant Professor, Department of Ecology & Evolutionary Biology, University of Toronto 2021 -
Postdoc, Center for Population Biology & Banting Fellow, University of California - Davis 2018 - 2020
- with Graham Coop, Sebastian Schreiber, & Andrew Whitehead
Ph.D., Zoology, University of British Columbia 2013 − 2018
- with Sally Otto
Postmaster, Michigan State University 2013
- with Chris Klausmeier
M.Sc., Biology, McGill University 2010 − 2012
- with Claire de Mazancourt
B.Sc.H., Biology & Mathematics, Queens University 2004 − 2008
- honours thesis with Laurene Ratcliffe and Matt Reudink


You can add your own markers from your own database. Each marker contains your own title and HTML for the popup info window. Each database group has a default marker icon, or you can define an individual icon per poi point. In this example, the Parking and Playground markers are database driven with a standard marker for each group.


#include <ATTimeOrDerived.hpp>
Public Types | |
| typedef RefCountPointer< const ATTimeOrDerived > | Ptr |
Public Member Functions | |
| virtual const XMLCh * | getPrimitiveTypeName () const =0 |
| virtual const XMLCh * | getTypeURI () const =0 |
| virtual const XMLCh * | getTypeName () const =0 |
| virtual const XMLCh * | asString (const DynamicContext *context) const =0 |
| virtual bool | equals (const AnyAtomicType::Ptr &target, const DynamicContext *context) const =0 |
| virtual int | compare (const ATTimeOrDerived::Ptr &other, const DynamicContext *context) const =0 |
| Returns less than 0 if this is less that other, 0 if they are the same, and greater than 0 otherwise. | |
| virtual ATDecimalOrDerived::Ptr | getHours (const DynamicContext *context) const =0 |
| Returns an integer representing the hour component of this object. | |
| virtual ATDecimalOrDerived::Ptr | getMinutes (const DynamicContext *context) const =0 |
| Returns an integer representing the minute component of this object. | |
| virtual ATDecimalOrDerived::Ptr | getSeconds (const DynamicContext *context) const =0 |
| Returns an decimal representing the second component of this object. | |
| virtual const Timezone::Ptr & | getTimezone () const =0 |
| Returns a timezone object representing the timezone component of this object. | |
| virtual bool | hasTimezone () const =0 |
| Returns true if the timezone is defined for this object, false otherwise. | |
| virtual ATTimeOrDerived::Ptr | setTimezone (const Timezone::Ptr &timezone, const DynamicContext *context) const =0 |
| Setter for timezone. | |
| virtual ATTimeOrDerived::Ptr | addTimezone (const ATDurationOrDerived::Ptr &timezone, const DynamicContext *context) const =0 |
| Returns an ATTimeOrDerived with a timezone added to it. | |
| virtual ATTimeOrDerived::Ptr | addDayTimeDuration (const ATDurationOrDerived::Ptr &dayTime, const DynamicContext *context) const =0 |
| Returns a time with the given dayTimeDuration added to it. | |
| virtual ATTimeOrDerived::Ptr | subtractDayTimeDuration (const ATDurationOrDerived::Ptr &dayTime, const DynamicContext *context) const =0 |
| Returns a time with the given dayTimeDuration subtracted from it. | |
| virtual ATDurationOrDerived::Ptr | subtractTime (const ATTimeOrDerived::Ptr &time, const DynamicContext *context) const =0 |
| Returns a dayTimeDuration corresponding to the difference between this and the given ATTimeOrDerived*. | |
| virtual AnyAtomicType::AtomicObjectType | getPrimitiveTypeIndex () const =0 |
| typedef RefCountPointer<const ATTimeOrDerived> ATTimeOrDerived::Ptr |
Reimplemented from DateOrTimeType.
| virtual ATTimeOrDerived::Ptr ATTimeOrDerived::addDayTimeDuration | ( | const ATDurationOrDerived::Ptr & | dayTime, | |
| const DynamicContext * | context | |||
| ) | const [pure virtual] |
Returns a time with the given dayTimeDuration added to it.
| virtual ATTimeOrDerived::Ptr ATTimeOrDerived::addTimezone | ( | const ATDurationOrDerived::Ptr & | timezone, | |
| const DynamicContext * | context | |||
| ) | const [pure virtual] |
Returns an ATTimeOrDerived with a timezone added to it.
| virtual const XMLCh* ATTimeOrDerived::asString | ( | const DynamicContext * | context | ) | const [pure virtual] |
Implements AnyAtomicType.
| virtual int ATTimeOrDerived::compare | ( | const ATTimeOrDerived::Ptr & | other, | |
| const DynamicContext * | context | |||
| ) | const [pure virtual] |
Returns less than 0 if this is less that other, 0 if they are the same, and greater than 0 otherwise.
| virtual bool ATTimeOrDerived::equals | ( | const AnyAtomicType::Ptr & | target, | |
| const DynamicContext * | context | |||
| ) | const [pure virtual] |
Implements AnyAtomicType.
| virtual ATDecimalOrDerived::Ptr ATTimeOrDerived::getHours | ( | const DynamicContext * | context | ) | const [pure virtual] |
Returns an integer representing the hour component of this object.
| virtual ATDecimalOrDerived::Ptr ATTimeOrDerived::getMinutes | ( | const DynamicContext * | context | ) | const [pure virtual] |
Returns an integer representing the minute component of this object.
| virtual AnyAtomicType::AtomicObjectType ATTimeOrDerived::getPrimitiveTypeIndex | ( | ) | const [pure virtual] |
Implements AnyAtomicType.
| virtual const XMLCh* ATTimeOrDerived::getPrimitiveTypeName | ( | ) | const [pure virtual] |
Implements AnyAtomicType.
| virtual ATDecimalOrDerived::Ptr ATTimeOrDerived::getSeconds | ( | const DynamicContext * | context | ) | const [pure virtual] |
Returns an decimal representing the second component of this object.
| virtual const Timezone::Ptr& ATTimeOrDerived::getTimezone | ( | ) | const [pure virtual] |
Returns a timezone object representing the timezone component of this object.
| virtual const XMLCh* ATTimeOrDerived::getTypeName | ( | ) | const [pure virtual] |
Implements AnyAtomicType.
| virtual const XMLCh* ATTimeOrDerived::getTypeURI | ( | ) | const [pure virtual] |
Implements AnyAtomicType.
| virtual bool ATTimeOrDerived::hasTimezone | ( | ) | const [pure virtual] |
Returns true if the timezone is defined for this object, false otherwise.
Implements DateOrTimeType.
| virtual ATTimeOrDerived::Ptr ATTimeOrDerived::setTimezone | ( | const Timezone::Ptr & | timezone, | |
| const DynamicContext * | context | |||
| ) | const [pure virtual] |
Setter for timezone.
Overrides the current timezone. (Not to be confused with addTimezone().
| virtual ATTimeOrDerived::Ptr ATTimeOrDerived::subtractDayTimeDuration | ( | const ATDurationOrDerived::Ptr & | dayTime, | |
| const DynamicContext * | context | |||
| ) | const [pure virtual] |
Returns a time with the given dayTimeDuration subtracted from it.
| virtual ATDurationOrDerived::Ptr ATTimeOrDerived::subtractTime | ( | const ATTimeOrDerived::Ptr & | time, | |
| const DynamicContext * | context | |||
| ) | const [pure virtual] |
Returns a dayTimeDuration corresponding to the difference between this and the given ATTimeOrDerived*.


Overview
Package
Class
Deprecated
Index
Help
Groovy Documentation
PREV NEXT
FRAMES
NO FRAMES
All Classes
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
_
A
a
- Property in
Bar
AbstractParent
- Class in
grails-app.domain.test
AbstractParent
()
- Constructor in
AbstractParent
abstractParentMethod
(String, int, def)
- Method in
AbstractParent
abstractParentProp
- Property in
AbstractParent
addRegexpWildcardsWhereNeeded
(String)
- Method in
ClassDiagramService
Add regexp wildcards (.*) before and after s, and before and after every '|' (regexp or).
address
- Property in
FooBar
age
- Property in
Bar
anotherProperty
- Property in
MoreFooBar
author
- Property in
ClassDiagramGrailsPlugin
authorEmail
- Property in
ClassDiagramGrailsPlugin
autoUpdate
- Property in
ClassDiagramPreferences
B
BAD
- Enum Constant in
BarStatus
Bar
- Class in
grails-app.domain.test
Bar
()
- Constructor in
Bar
barIt
()
- Method in
Bar
BarStatus
- Enum in
grails-app.domain.test
belongsTo
- Property in
Child
belongsTo
- Property in
Foo
belongsTo
- Property in
Many
BETTER
- Enum Constant in
RootStatus
buildDomainClasses
(def, def, def)
- Method in
ClassDiagramService
buildEmbeddedClasses
(def, def, def)
- Method in
ClassDiagramService
buildEnumClasses
(def, def, def)
- Method in
ClassDiagramService
buildGraphDefaults
(def, def, def)
- Method in
ClassDiagramService
buildLegendItem
(def, int, String, String, String, String, String, String)
- Method in
ClassDiagramLegendService
buildRelations
(def, def, def)
- Method in
ClassDiagramService
C
Child
- Class in
grails-app.domain.test
Child
()
- Constructor in
Child
child
- Property in
Foo
class1
- Property in
SimpleClass2
class2
- Property in
SimpleClass1
ClassDiagramConfig
- Class in
grails-app.conf
ClassDiagramConfig
()
- Constructor in
ClassDiagramConfig
classDiagramConfig
- Property in
GrailsLigthTestCase
ClassDiagramController
- Class in
grails-app.controllers
Create a class diagram from grails domain model.
ClassDiagramController
()
- Constructor in
ClassDiagramController
ClassDiagramControllerTests
- Class in
test.integration
ClassDiagramControllerTests
()
- Constructor in
ClassDiagramControllerTests
ClassDiagramGrailsPlugin
- Class in
DefaultPackage
ClassDiagramGrailsPlugin
()
- Constructor in
ClassDiagramGrailsPlugin
ClassDiagramLegendService
- Class in
grails-app.services
classDiagramLegendService
- Property in
ClassDiagramController
ClassDiagramLegendService
()
- Constructor in
ClassDiagramLegendService
ClassDiagramPreferences
- Class in
grails-app.controllers
Preferences for class diagram.
ClassDiagramPreferences
()
- Constructor in
ClassDiagramPreferences
ClassDiagramService
- Class in
grails-app.services
Service that takes grails domain classes and turns them into a domain class diagram.
classDiagramService
- Property in
ClassDiagramController
classDiagramService
- Property in
ClassDiagramControllerTests
ClassDiagramService
()
- Constructor in
ClassDiagramService
classNamesToShow
- Property in
ClassDiagramPreferences
classSelection
- Property in
ClassDiagramPreferences
classSelection
(def, def)
- Method in
ClassDiagramService
find subset of classes according to preferences
classSelectionIsRegexp
- Property in
ClassDiagramPreferences
Config
- Class in
grails-app.conf
Config
()
- Constructor in
Config
connect
()
- Method in
DotBuilder
createAssociation
(def, def, def)
- Method in
DotBuilder
createDiagram
(def, def)
- Method in
ClassDiagramService
createDiagram
(String)
- Method in
DotBuilder
createDotDiagram
(def, def)
- Method in
ClassDiagramService
createDotLegend
()
- Method in
ClassDiagramLegendService
createLegend
()
- Method in
ClassDiagramLegendService
createNode
(Object, Map, Object)
- Method in
DotBuilder
D
defaults
- Property in
ClassDiagramPreferences
dependsOn
- Property in
ClassDiagramGrailsPlugin
description
- Property in
ClassDiagramGrailsPlugin
description
- Property in
Foo
directional
- Property in
DotBuilder
documentation
- Property in
ClassDiagramGrailsPlugin
doIt
(def, def, def)
- Method in
Foo
DotBuilder
- Class in
src.groovy
A simple builder for creating graphviz dot files.
DotBuilder
()
- Constructor in
DotBuilder
DotBuilderTests
- Class in
test.unit
DotBuilderTests
()
- Constructor in
DotBuilderTests
doWithApplicationContext
- Property in
ClassDiagramGrailsPlugin
doWithSpring
- Property in
ClassDiagramGrailsPlugin
E
EARTH
- Enum Constant in
Planet
embedded
- Property in
Foo
embedded
- Property in
Many
embedded
- Property in
RootPackagedClass
embedded
- Property in
SimpleClass1
EmbeddedPart
- Class in
grails-app.domain.test
EmbeddedPart
()
- Constructor in
EmbeddedPart
embeddedPart
- Property in
Foo
embeddedPart
- Property in
Many
embeddedPart
- Property in
SimpleClass1
EmbeddedTests
- Class in
test.unit
EmbeddedTests
()
- Constructor in
EmbeddedTests
embeddedValue
- Property in
EmbeddedPart
EnumTests
- Class in
test.unit
EnumTests
()
- Constructor in
EnumTests
F
fontsize
- Property in
ClassDiagramPreferences
Foo
- Class in
grails-app.domain.test
Foo
()
- Constructor in
Foo
FooBar
- Class in
grails-app.domain.test
FooBar
()
- Constructor in
FooBar
foobar
- Property in
MoreFooBar
fooBar
- Property in
RootPackagedClass
foobar
()
- Method in
SimpleClass1
foobar
()
- Method in
SimpleClass2
formatAttributes
(def)
- Method in
DotBuilder
formatEnumProperty
(def, def)
- Method in
ClassDiagramService
formatMethod
(def, def)
- Method in
ClassDiagramService
formatMethods
(def, def)
- Method in
ClassDiagramService
formatName
(def)
- Method in
DotBuilder
formatNodeLabel
(def, def)
- Method in
ClassDiagramService
formatProperties
(def, def)
- Method in
ClassDiagramService
formatProperty
(def, def)
- Method in
ClassDiagramService
from
- Property in
DotBuilder
G
G
- Property in
Planet
getAssociationProps
(def, def)
- Method in
ClassDiagramService
getDeclaredMethods
(def, def)
- Method in
ClassDiagramService
Get methods declared in a class, filtering out all inherited and meta-added stuff.
getDeclaredProperties
()
- Method in
ClassDiagramPreferences
getDotString
()
- Method in
DotBuilder
getFooBarMethod
()
- Method in
Parent
getInterestingAssociations
(GrailsDomainClass, def)
- Method in
ClassDiagramService
getInterestingMethods
(def, def)
- Method in
ClassDiagramService
Get methods declared in a class, filtering out all inherited and meta-added stuff.
getInterestingProperties
(def, def)
- Method in
ClassDiagramService
getNotAProperty
(String)
- Method in
Foo
getPackageName
(def)
- Method in
ClassDiagramService
getPropertyDeclaredAsGetterMethod
()
- Method in
Foo
getSkinProperty
(def, def, def)
- Method in
ClassDiagramPreferences
getVerticalOrientation
()
- Method in
ClassDiagramPreferences
GOOD
- Enum Constant in
BarStatus
GOOD
- Enum Constant in
RootStatus
grailsApplication
- Property in
GrailsLigthTestCase
GrailsLigthTestCase
- Class in
test.unit
GrailsLigthTestCase
()
- Constructor in
GrailsLigthTestCase
grailsVersion
- Property in
ClassDiagramGrailsPlugin
Grandfather
- Class in
grails-app.domain.test
Grandfather
()
- Constructor in
Grandfather
graphOrientation
- Property in
ClassDiagramPreferences
H
hasMany
- Property in
Bar
hasMany
- Property in
Foo
hasMany
- Property in
Many
hasMany
- Property in
Parent
hasSameSignature
(def, def)
- Method in
ClassDiagramService
I
image
- Property in
ClassDiagramController
index
- Property in
ClassDiagramController
initCap
(String)
- Method in
ClassDiagramService
J
JUPITER
- Enum Constant in
Planet
K
L
legend
- Property in
ClassDiagramController
log
- Property in
DotBuilder
M
Many
- Class in
grails-app.domain.test
Many
()
- Constructor in
Many
mappings
- Property in
UrlMappings
MARS
- Enum Constant in
Planet
mass
- Property in
Planet
MERCURY
- Enum Constant in
Planet
MIME_TYPE
- Property in
ClassDiagramController
mimeTypeFor
(def)
- Method in
ClassDiagramController
model
- Property in
ClassDiagramController
more
- Property in
FooBar
MoreFooBar
- Class in
grails-app.domain.test
MoreFooBar
()
- Constructor in
MoreFooBar
N
name
- Property in
Bar
name
- Property in
Child
name
- Property in
EmbeddedPart
name
- Property in
Parent
name
- Property in
RootEmbedded
name
- Property in
SimpleClass1
NEPTUNE
- Enum Constant in
Planet
nodeCompleted
(Object, Object)
- Method in
DotBuilder
O
out
- Property in
DotBuilder
outputFormat
- Property in
ClassDiagramPreferences
outTarget
- Property in
DotBuilder
P
PackageTests
- Class in
test.unit
PackageTests
()
- Constructor in
PackageTests
Parent
- Class in
grails-app.domain.test
Parent
()
- Constructor in
Parent
Planet
- Enum in
grails-app.domain.test
planet
- Property in
Bar
Planet
(double, double)
- Constructor in
Planet
pluginExcludes
- Property in
ClassDiagramGrailsPlugin
PLUTO
- Enum Constant in
Planet
Q
R
radius
- Property in
Planet
random
- Property in
ClassDiagramPreferences
randomizeOrder
- Property in
ClassDiagramPreferences
randomizeOrder
(def, def)
- Method in
ClassDiagramService
Order package names according to preferences
RootEmbedded
- Class in
grails-app.domain
RootEmbedded
()
- Constructor in
RootEmbedded
rootEmbedded
- Property in
RootPackagedClass
RootPackagedClass
- Class in
grails-app.domain
RootPackagedClass
()
- Constructor in
RootPackagedClass
RootStatus
- Enum in
grails-app.domain
S
SATURN
- Enum Constant in
Planet
setParent
(Object, Object)
- Method in
DotBuilder
setUp
()
- Method in
ClassDiagramControllerTests
setUp
()
- Method in
GrailsLigthTestCase
setupGrailsApplicationClasses
(GroovyClassLoader)
- Method in
EmbeddedTests
setupGrailsApplicationClasses
(GroovyClassLoader)
- Method in
EnumTests
setupGrailsApplicationClasses
(GroovyClassLoader)
- Method in
GrailsLigthTestCase
setupGrailsApplicationClasses
(GroovyClassLoader)
- Method in
PackageTests
show
- Property in
ClassDiagramController
showAssociationNames
- Property in
ClassDiagramPreferences
showEmbeddedAsProperty
- Property in
ClassDiagramPreferences
showEnumAsProperty
- Property in
ClassDiagramPreferences
showMethodReturnType
- Property in
ClassDiagramPreferences
showMethods
- Property in
ClassDiagramPreferences
showMethodSignature
- Property in
ClassDiagramPreferences
showPackages
- Property in
ClassDiagramPreferences
showProperties
- Property in
ClassDiagramPreferences
showPropertyType
- Property in
ClassDiagramPreferences
SimpleClass1
- Class in
grails-app.domain.test.subpackage
SimpleClass1
()
- Constructor in
SimpleClass1
SimpleClass2
- Class in
grails-app.domain.test.subpackage
SimpleClass2
()
- Constructor in
SimpleClass2
skin
- Property in
ClassDiagramPreferences
someEmbeddedMethod
(String)
- Method in
EmbeddedPart
status
- Property in
Bar
status
- Property in
RootPackagedClass
string
- Property in
Many
stripWildcardsOnEnds
(String)
- Method in
ClassDiagramService
strip preceeding and succeeding wildcards (*) from string
surfaceGravity
()
- Method in
Planet
surfaceWeight
(double)
- Method in
Planet
T
testDigraph
()
- Method in
DotBuilderTests
testNoShowPackage
()
- Method in
PackageTests
testPdf
()
- Method in
ClassDiagramControllerTests
testPngImage
()
- Method in
ClassDiagramControllerTests
testShowEmbeddedAsNode
()
- Method in
EmbeddedTests
testShowEmbeddedAsProperty
()
- Method in
EmbeddedTests
testShowEnumAsNode
()
- Method in
EnumTests
testShowEnumAsProperty
()
- Method in
EnumTests
testShowPackage
()
- Method in
PackageTests
testSimpleDigraph
()
- Method in
DotBuilderTests
testSimpleUndirectionalGraph
()
- Method in
DotBuilderTests
title
- Property in
ClassDiagramGrailsPlugin
to
(Object)
- Method in
DotBuilder
transactional
- Property in
ClassDiagramControllerTests
transactional
- Property in
ClassDiagramLegendService
transactional
- Property in
ClassDiagramService
U
UGLY
- Enum Constant in
BarStatus
URANUS
- Enum Constant in
Planet
UrlMappings
- Class in
grails-app.conf
UrlMappings
()
- Constructor in
UrlMappings
V
valueOf
(String)
- Method in
BarStatus
Returns the enum constant of this type with the specified name.
valueOf
(String)
- Method in
Planet
Returns the enum constant of this type with the specified name.
valueOf
(String)
- Method in
RootStatus
Returns the enum constant of this type with the specified name.
values
()
- Method in
BarStatus
Returns an array containing the constants of this enum type, in the order they are declared.
values
()
- Method in
Planet
Returns an array containing the constants of this enum type, in the order they are declared.
values
()
- Method in
RootStatus
Returns an array containing the constants of this enum type, in the order they are declared.
VENUS
- Enum Constant in
Planet
version
- Property in
ClassDiagramGrailsPlugin
W
whiteHair
- Property in
Grandfather
WORSE
- Enum Constant in
RootStatus
X
Y
Z
_
_Install
- Class in
scripts
_Install
()
- Constructor in
_Install
_Uninstall
- Class in
scripts
_Uninstall
()
- Constructor in
_Uninstall
_Upgrade
- Class in
scripts
_Upgrade
()
- Constructor in
_Upgrade
Groovy Documentation


{% extends "base.html" %} {% block title %}Group Tinder{% endblock %} {% block content %}
What is this? A way to find people you'd be willing to meet and hang with as a group. Why does it look so janky? Because it's a prototype. I purposefully spent 0 time worrying about how it looks. I want to see if it's a good idea and can help you meet and connect with new people.
How's it work? Flip through a stack of suggested people. Click yes or no if you'd meet this person in a group setting. When 3 or more people click yes for eachother, a group is made. Then you can chat with this group and figure out if you all want to meet up or not.
Register to get started.
{% endblock %}


{% extends "usernav.html" %} {% block content %}
| Movie | Borrower | Date Loaned | Due Date | Options |
|
The Bourne Identity |
Thur, April 17, 2014 |
Thur, May 1, 2014 |
||
|
Frozen |
Sun, April 20, 2014 |
Sun, May 4, 2014 |


MCTTappingSample
public struct MCTTappingSample : RSDSampleRecord, Codable
The MCTTappingSample
class represents a single tap on a button.
The tapping sample object records the location of the tap, the
button that was tapped, and the time at which the event occurred. A tapping sample is
included in an MCTTappingResultObject
object, and is recorded by the
step view controller for the corresponding task when a tap is
recognized.
A tapping sample is typically generated by the framework as the task proceeds. When the task completes, it may be appropriate to serialize the sample for transmission to a server, or to immediately perform analysis on it.
-
Clock time for the sample.
Declaration
Swift
public let uptime: TimeInterval
-
A relative timestamp indicating the time of the tap event.
The timestamp is relative to the value of
startDate
in theRSDResult
object that includes this sample.Declaration
Swift
public let timestamp: TimeInterval?
-
The current step path.
Declaration
Swift
public let stepPath: String
-
An enumerated value that indicates which button was tapped, if any.
If the value of this property is
.none
, it indicates that the tap was near, but not inside, one of the target buttons.Declaration
Swift
public let buttonIdentifier: MCTTappingButtonIdentifier
-
The location of the tap within the step’s view.
The location coordinates are relative to a rectangle whose size corresponds to the
stepViewSize
in the enclosingMCTTappingResultObject
object.Declaration
Swift
public let location: CGPoint
-
A duration of the tap event.
The duration store time interval between touch down and touch release events.
Declaration
Swift
public internal(set) var duration: TimeInterval
-
Ignored.
Declaration
Swift
public var timestampDate: Date? { get }


{% extends "_post.html" %}
{% hyde
title: "The Caves of Clojure: Part 3.4"
snip: "Refactoring."
created: 2012-07-11 12:02:00
flattr: true
%}
{% block article %}
This post is part of an ongoing series. If you haven't already done so, you
should probably start at [the beginning][].
This entry (kind of) corresponds to [post three in Trystan's
tutorial][trystan-tut].
If you want to follow along, the code for the series is [on Bitbucket][bb] and
[on GitHub][gh]. Update to the `entry-03-4` tag to see the code as it stands
after this post.
[the beginning]: /blog/2012/07/caves-of-clojure-01/
[trystan-tut]: http://trystans.blogspot.com/2011/08/roguelike-tutorial-03-scrolling-through.html
[bb]: http://bitbucket.org/sjl/caves/
[gh]: http://github.com/sjl/caves/
[TOC]
Summary
-------
In the last post I said that the next post would be about Trystan's fourth
entry. I lied. I'm going to do a short entry about refactoring before I move
on, because I don't want to clutter up later ones with this stuff.
Record Creation
---------------
Hacker News user bitsai [told me about][hn] a new syntax for creating records in
Clojure 1.3, so I updated all the `(new Foo)` calls to use that.
One example is the `new-game` function. Before:
[hn]: https://news.ycombinator.com/item?id=4220141
:::clojure
(defn new-game []
(assoc (new Game nil [(new UI :start)] nil)
:location [40 20]))
After:
:::clojure
(defn new-game []
(assoc (->Game nil [(->UI :start)] nil)
:location [40 20]))
It's certainly not too impressive from a "characters saved" point of view. But
this little change matters more than it might appear at first glance.
Imagine you define a record in Clojure:
:::clojure
(ns a)
(defrecord Foo [])
And then in another namespace you want to use it:
:::clojure
(ns b
(:use a))
(new Foo)
This will explode, because `Foo` is actually a Java class, so you need to import
it:
:::clojure
(ns b
(:import a.Foo)
(:use a))
(new Foo)
This is one example of Clojure's Java underpinnings leaking through.
In Clojure 1.3, `defrecord` will automatically generate a "factory function"
that creates the record, and you can `require` or `use` *that* like any other
function, so you don't need to screw around with a Java interop feature
(`import`) to use a pure Clojure feature.
This is a good thing. It means that progress is being made toward patching the
places that Java leaks into Clojure. It gives me hope that some day I'll feel
okay recommending Clojure to people without Java experience.
I updated all the `(new ...)` calls to use the new-style factory functions.
I won't paste them all here, but if you're following along you'll want to `grep
-R 'new ' .` and update the rest now.
update-in
---------
Next is a tiny change that's just a bit cleaner. Alan Malloy [told me][] about
it. In the `process-input` function for the `:play` UI, the code to handle
smoothing the world looked like this:
[told me]: https://twitter.com/alanmalloy/status/222748536595423232
:::clojure
\s (assoc game :world (smooth-world (:world game)))
This can be done much more cleanly using `update-in`:
:::clojure
\s (update-in game [:world] smooth-world)
Nice.
Namespaces
----------
I said in an earlier post that I tend to leave things in one file until I feel
like they need to be pulled out. Well, that time has come.
First I pulled the UI drawing code into its own file: `ui/drawing.clj`. It
looks like this (nothing has changed, it's just in a file of its own now):
:::clojure
(ns caves.ui.drawing
(:require [lanterna.screen :as s]))
(def screen-size [80 24])
(defn clear-screen [screen]
(let [[cols rows] screen-size
blank (apply str (repeat cols \space))]
(doseq [row (range rows)]
(s/put-string screen 0 row blank))))
(defmulti draw-ui
(fn [ui game screen]
(:kind ui)))
(defmethod draw-ui :start [ui game screen]
(s/put-string screen 0 0 "Welcome to the Caves of Clojure!")
(s/put-string screen 0 1 "Press any key to continue.")
(s/put-string screen 0 2 "")
(s/put-string screen 0 3 "Once in the game, you can use enter to win,")
(s/put-string screen 0 4 "and backspace to lose."))
(defmethod draw-ui :win [ui game screen]
(s/put-string screen 0 0 "Congratulations, you win!")
(s/put-string screen 0 1 "Press escape to exit, anything else to restart."))
(defmethod draw-ui :lose [ui game screen]
(s/put-string screen 0 0 "Sorry, better luck next time.")
(s/put-string screen 0 1 "Press escape to exit, anything else to restart."))
(defn get-viewport-coords [game vcols vrows]
(let [location (:location game)
[center-x center-y] location
tiles (:tiles (:world game))
map-rows (count tiles)
map-cols (count (first tiles))
start-x (- center-x (int (/ vcols 2)))
start-x (max 0 start-x)
start-y (- center-y (int (/ vrows 2)))
start-y (max 0 start-y)
end-x (+ start-x vcols)
end-x (min end-x map-cols)
end-y (+ start-y vrows)
end-y (min end-y map-rows)
start-x (- end-x vcols)
start-y (- end-y vrows)]
[start-x start-y end-x end-y]))
(defn draw-crosshairs [screen vcols vrows]
(let [crosshair-x (int (/ vcols 2))
crosshair-y (int (/ vrows 2))]
(s/put-string screen crosshair-x crosshair-y "X" {:fg :red})
(s/move-cursor screen crosshair-x crosshair-y)))
(defn draw-world [screen vrows vcols start-x start-y end-x end-y tiles]
(doseq [[vrow-idx mrow-idx] (map vector
(range 0 vrows)
(range start-y end-y))
:let [row-tiles (subvec (tiles mrow-idx) start-x end-x)]]
(doseq [vcol-idx (range vcols)
:let [{:keys [glyph color]} (row-tiles vcol-idx)]]
(s/put-string screen vcol-idx vrow-idx glyph {:fg color}))))
(defmethod draw-ui :play [ui game screen]
(let [world (:world game)
tiles (:tiles world)
[cols rows] screen-size
vcols cols
vrows (dec rows)
[start-x start-y end-x end-y] (get-viewport-coords game vcols vrows)]
(draw-world screen vrows vcols start-x start-y end-x end-y tiles)
(draw-crosshairs screen vcols vrows)))
(defn draw-game [game screen]
(clear-screen screen)
(doseq [ui (:uis game)]
(draw-ui ui game screen))
(s/redraw screen))
And now I need to `use` the `draw-game` function back in `core.clj`:
:::clojure
(ns caves.core
(:use [caves.world :only [random-world smooth-world]]
[caves.ui.drawing :only [draw-game]])
(:require [lanterna.screen :as s]))
The fact that I moved eleven top-level symbols into a new namespace and only had
to bring one of them back into the original is a pretty clear sign that this
chunk of code was ready to be moved into its own file.
I also did the same for the input processing code, moving it into
`ui/input.clj`:
:::clojure
(ns caves.ui.input
(:use [caves.world :only [random-world smooth-world]])
(:require [lanterna.screen :as s]))
(defmulti process-input
(fn [game input]
(:kind (last (:uis game)))))
(defmethod process-input :start [game input]
(-> game
(assoc :world (random-world))
(assoc :uis [(->UI :play)])))
(defn move [[x y] [dx dy]]
[(+ x dx) (+ y dy)])
(defmethod process-input :play [game input]
(case input
:enter (assoc game :uis [(->UI :win)])
:backspace (assoc game :uis [(->UI :lose)])
\q (assoc game :uis [])
\s (update-in game [:world] smooth-world)
\h (update-in game [:location] move [-1 0])
\j (update-in game [:location] move [0 1])
\k (update-in game [:location] move [0 -1])
\l (update-in game [:location] move [1 0])
\H (update-in game [:location] move [-5 0])
\J (update-in game [:location] move [0 5])
\K (update-in game [:location] move [0 -5])
\L (update-in game [:location] move [5 0])
game))
(defmethod process-input :win [game input]
(if (= input :escape)
(assoc game :uis [])
(assoc game :uis [(->UI :start)])))
(defmethod process-input :lose [game input]
(if (= input :escape)
(assoc game :uis [])
(assoc game :uis [(->UI :start)])))
(defn get-input [game screen]
(assoc game :input (s/get-key-blocking screen)))
This isn't quite functional yet, because it needs the `->UI` factory function,
which is created by the `(defrecord UI [...])` that's still in `core.clj`.
I can't just `use` that in this file, because `core` is going to need to `use`
some functions from this, so I'd have circular imports.
The solution is to move the `(defrecord UI [...])` into a separate file.
I chose to put it in `ui/core.clj`:
:::clojure
(ns caves.ui.core)
(defrecord UI [kind])
And now I can pull its creation function back into the `input` namespace:
:::clojure
(ns caves.ui.input
(:use [caves.world :only [random-world smooth-world]]
[caves.ui.core :only [->UI]])
(:require [lanterna.screen :as s]))
Finally I can update the `ns` back in the original `core.clj` to pull in the
functions I need, and remove the ones I don't:
:::clojure
(ns caves.core
(:use [caves.ui.core :only [->UI]]
[caves.ui.drawing :only [draw-game]]
[caves.ui.input :only [get-input process-input]])
(:require [lanterna.screen :as s]))
Whew!
Results
-------
That was a lot of shuffling around, but now I've got five separate files, each
pertaining to one specific thing, instead of one big pile of code.
You can view the code [on GitHub][result-code] if you want to see the end
result.
[result-code]: https://github.com/sjl/caves/tree/entry-03-4/src/caves
Next post I swear I'll add the player so we'll have an actual game!
{% endblock article %}


£15,000 worth of new iPhones stolen from Plymouth Apple store
Police make appeal for witnesses as four men are arrested outside force area
by Carl EveFour men have been arrested on suspicion of shoplifting more than £15,000 worth of the latest iPhones.
Investigators say four men raced into the Apple store, located on the first floor of Drake Circus shopping mall in Plymouth, at 11.24am this morning.
They snagged around 15 brand new iPhones which were on display before running from the store. It is believed the men then ran down Old Town Street towards the Barcode complex. They were then believed to have gotten into a silver BMW waiting for them in How Street before racing off.
Officers from Avon and Somerset Police later stopped a silver BMW - registered to a property in Essex - in their force area and arrested four men.
Plymouth police say they are very keen to hear from anyone who saw any part of the incident, from the theft in the Apple store, the men running through the mall or Old Town Street or them getting into a car in How Street.
Investigators have already benefited from dashcam footage provided to them by a local taxi driver but would be grateful if anyone else who spotted or filmed the suspects would come forward.
Plymouth detectives say they understand Avon and Somerset Police are currently investigating another similar incident at a phone store in a mall at the Cribbs Causeway area of Bristol which also took place on Saturday morning.


Aadhaar was established as a national Unique Identification number (UID) system. The Unique Identification Authority of India (UIDAI) falls under the purview of the Ministry of Electronics & Information Technology (MeitY), and is audited by the Comptroller & Auditor General (CAG).
This post attempts to review Aadhaar as the verifiable identification and authentication system in India based on a review of relevant provisions within the Aadhaar Act, 2016 and its Regulations.
The next post covers data security.
Authentication & Working
Penalties
Did you know?
Aadhaar Entities
Aadhaar Act, 2016
Grievance Redressal
References
Authentication & Working
Authentication — the ability to know that you are who you say you are before giving you access to something — is a fundamental tenet in information security. Credibility is infinitely improved when an authorized service provider can genuinely validate you, compared to receiving a photocopy of your passport. In return, you are guaranteed no one else is receiving a service or benefit to which you are entitled.
With this understanding, we explore the Aadhaar concept — a one-way authentication service. A service provider can authenticate you on a) your Aadhaar number and b) either OTP or biometrics, and deliver a service or a subsidy to you. The Aadhaar network does not communicate out of turn with the service provider though, and is not aware of what service was provided to you¹. It only knows which service provider requested your authentication, and logs this for audit purposes.²
To use a specific example, here’s what a headline like ‘mobile phones will now be linked to Aadhaar’ means: instead of storing photocopies of your driver’s license or passport, the telecom provider (via an authorized service agency, explained below) requests authentication using Aadhaar, and upon receiving a ‘Yes’ issues you a SIM.
- Aadhaar logs when the telecom provider asked for your authentication, that it was successful
- The service agency logs the same details but does not save (by law) any other data
- The telecom provider logs the request and the result, and services that were delivered. It does not see any other data used for authentication.
This concept is similar to credit card payments, where the service provider requests to charge you via a payment gateway. The gateway collects & transmits your card details to the issuing bank, both of which only aware of the provider and the total charge. The service provider also does not see your credit card number.
Aadhaar data
Aadhaar’s core data infrastructure is called The Central Information Data Repository (CIDR). No details regarding its location or type of systems is available.
The CIDR is classified as a Protected System³ under the IT Act, 2000, a Critical Information Infrastructure (CII) by the NCIIPC⁴ and the UIDAI itself is ISO27001:2013 certified⁵.
Key facts regarding the data stored within the CIDR:
- Name, date of birth, address, gender, and (optional) mobile/email constitute demographic information.
- Race, religion, caste, tribe, ethnicity, language, records of entitlement (benefits/subsidies), income or medical history are excluded by law.⁶
- Photograph, fingerprints &/or iris scan constitute biometric information.
- Of this, fingerprints & eye scan data are core biometric data, and excluded by law from being shared with “anyone for any reason whatsoever”.⁷ ⁸
- Biometric data is also ‘sensitive personal data or information’ status per IT Act, 2000.⁹
- Demographic information and biometric information are partitioned into separate databases. A single database does not have all of a holder’s information.
For the Government to request anyone’s Aadhaar logs within the CIDR, it must be:
- in the “interest of national security”
- directed by an officer with minimum rank of Joint Secretary
- reviewed by an Oversight Committee consisting of 1 Cabinet Secretary and secretaries of the Department of Legal affairs & the Department of Electronics & Information Technology.¹⁰
- pursuant to an order of a court not lower than a District Judge.
Such an order is valid for a period of 3 months, with a possible 3 month extension which must be reviewed by the Oversight Committee.
De-duplication¹¹
During enrollment, an applicant’s data is validated against the CIDR to ensure that the holder was not previously issued an Aadhaar number, a process known as de-duplication.
Aadhaar de-duplication is mandated by Regulation and is performed using 3 different biometric algorithm softwares.¹²
Penalties
The penalty clauses under the Aadhaar Act provides for¹³:
- A 3-year term and/or a fine of Rs. 10,000 for impersonation, an attempt to impersonate during enrollment or to change identity information
- A 3-year term and/or Rs. 10,000 fine for individuals and Rs. 1,00,000 for companies for unauthorized collection of identity information, intentionally disclosing, transmitting, copying of information
- A 3-year term and a minimum fine of Rs. 10,00,000 for unauthorized access or attempt to access, download or any play with data within the CIDR
- For companies, each person in charge of, or responsible to the company are also considered guilty unless they can prove otherwise.
- All penalties apply over and above any other penalties charged (such as under the IT Act, 2000 or the Indian Penal Code)
Did you know?
Biometric Lock
An Aadhaar holder can place a permanent lock on biometric data after which it cannot be used for authentication. This lock can be temporarily removed ahead of a legitimate authentication request, and is automatically locked again once the request is completed or after a specific time, whichever is earlier.¹⁴ When locked, an authentication request results in a ‘No’ response.
Virtual ID
You can generate a 16-digit randomized Virtual ID to be used for authentication requests instead of your Aadhaar ID. This allows you to mask your original Aadhaar from the provider while still using it for identification. All providers must accept Virtual IDs for services by June 2018.
Consent
The Aadhaar Act mandates that consent of the holder must be taken and recorded for enrollment or an authentication request. The holder must be also be informed about the purpose for which authentication is being requested. Failure to do so is a violation of the Act and can be penalized.¹⁵
Entities
There are three types of entities which share a technology relationship with the CIDR:
- Authentication Service Agency (ASA), 27: Entities with established 1-to-1 secure leased line/MPLS connectivity with the CIDR, regulated directly by the UIDAI to provide authentication services.
- Authentication User Agency (AUA), 350: Entities that provide services based on Aadhaar-based authentication performed by a registered ASA¹⁶.
- Electronic Know Your Customer (e-KYC), 271: Entities that perform KYC using Aadhaar. e-KYC, upon successful authentication, receive a digitally signed response containing encrypted demographic information and photograph for instant, non-repudiable KYC.
The current live list of Aadhaar entities is available here, and seems to be updated once a month. Holders are encouraged to ensure they are providing consent to entities on this list alone.
A full breakdown of the ASA-AUA ecosystem, along with the framework to transmit data, is forthcoming.
Aadhaar Act, 2016
The Aadhaar (Targeted Delivery of Financial and Other Subsidies, Benefits & Services) Act, 2016 provides legislative backing to Aadhaar as the national unique identification mechanism in the Country¹⁷. The Act superceeds the The Bill for National Identification Authority of India, 2010.
The Aadhaar Act 2016 also provides clear definitions and processes for enrolment, core biometric data specifications, authentication, audits, overall protection of information and the responsibilities of the UIDAI.
As of the writing of this post, Aadhaar cards for non-residents and Overseas Citizens of India (OCI) holders is still in the works. No timeframe for this is yet available¹⁸.
Alternative ID
A person who does not have an Aadhaar card but is entitled to any benefit paid from the Consolidated Fund of India will not be denied this benefit until his Card is issued, provided an alternative means of identification is made available to the entity in question¹⁹.
As of the time of writing this post, 113 crore Aadhaar cards have been issued, and the last five years have witnessed over 400 crore authentication transactions²⁰.
Caution when it pertains to data privacy is both desirable and needed. Aadhaar is an ambitious program that seeks to provide a unified, unique, non-repudiable and verifiable form of identity to millions at a near incomparable scale. The world is taking clear notice of this development. As Vivek Wadhwa— distinguished fellow with Carnegie Mellon University — highlights, India is pioneering something the West can learn from:
The instant and non-repudiable proof of identity that Aadhaar’s know your customer technology, e-KYC, provides, gives India a big advantage. Most people in the US have drivers licenses and social security numbers. But these are not verifiable with biometrics or mobile numbers, so complex verification technologies need to be built into every financial system. Indian entrepreneurs building applications don’t need to worry about all this.
Beyond entrepreneurs, the fact that schemes or benefits can be rolled out by governments (both Centre and states) without the need to build separate complex infrastructures which then witness on-boarding delays clearly have numerous benefits.
Some of this is already visible, with Government estimates of Rs. 50,000 crore leakages being plugged so far. The system has helped root out ‘ghosts’ within the system as well, where 87 lakh unknown MNREGA job cards were removed or that 4.4 lakh students in just 3 states only existed on paper.
That said, we must look at the law and the implementation ecosystem to determine whether enough has been done to ensure security, and alleviate privacy concerns of the citizens who will need to subscribe to the national ID.
Legally, The Aadhaar Act, 2016 and expansive Regulations for Enrolment, Authentication, Data Security & Sharing of Information, are serious attempts to tighten legislation and processes related to Aadhaar usage. A first-glance comparison indicates that the 2016 Act is a far cry away — particularly in terms of handling of biometric data, and privacy — from the Bill that was tabled in 2010. For example, under the 2010 Bill, sharing biometric data outside the CIDR would have been perfectly legal.
In some (perhaps, many) ways, the attention and eyeballs on Aadhaar is a good thing, where even the smallest flaw would put the credibility of Aadhaar at stake, and should keep the men and women behind Aadhaar on their toes, as they should be.
Thoughts
- What happens to Aadhaar data upon death? While logs and data itself should be maintained pursuant to legal requirements, a straightforward way to permanently lock (with no option for temporary unlock thereafter) a deceased person’s biometric data should be made available.
- There is ample protection under law for violation by any entity — authorized or unauthorized — that performs unauthorized actions within the Aadhaar framework. No statistics around timeframe to resolving grievances is available at the moment. Beyond grievance redressal, should a special Court or Tribunal be instituted specifically for Aadhaar?
- It makes logistical sense that that UIDAI has engaged with enrollment agencies to help with Aadhaar dispensation. Now that enrolment has crossed 95%, should the UIDAI consolidate the enrolment ecosystem and annex it within direct control of the UIDAI?
Grievance Redressal
As of today, online grievances may be submitted via the Centralized Public Grievance Redressal System.
Additionally, a contact centre has been established:
- Voice: 1947
- Email<EMAIL_ADDRESS>- PO Box 1947, GPO Bengaluru 560 001
Grievances can also be addressed through regional offices in Bengaluru, Chandigarh, New Delhi, Guwahati, Hyderabad, Lucknow, Mumbai & Ranchi.
Updated 10 Jan 2018 to include information about Virtual ID and limited KYC.
Notes
[1] The Aadhaar (Targeted Delivery of Financial and Other Subsidies, Benefits and Services) Act, 2016 Section 32 (3). See also Lok Sabha Unstarred Question 1281, answered 23 Nov 2016.
[2] Logs must be maintained by the service provider & the authentication agency for (2) years during which the holder may request the logs, followed by an archive for 5 years. The UIDAI maintains logs for a period of (6) months during which they can be accessed by the holder, followed by archiving them for 5 years. Ref: Aadhaar (Authentication) Regulations, 2016 (No. 3 of 2016) Chapters III, IV
[3] Protected System or a Critical Information Infrastructure (CII), per The Information Technology Act, 2000 Section 70, is a computer resource, the incapacitation or destruction of which, shall have a debilitating impact on national security, economy, public health of safety. Accessing or even attempting to access a Protected System is punishable with a 10 year term and/or a fine.
[4] Any attack on information assets classified as CII is considered an act of cyber terrorism. Ref: Datta, Saiket: The NCIIPC & its evolving framework
[5] The ISO/IEC 27001:2013 Information Security Management System (ISMS) Certification is the latest version of the global information security standard covering information security controls and their management systems. The UIDAI is certified by the Standarisation Testing & Quality Certification (STQC), a Directorate of the MeitY, an internationally recognized Assurance Service. Ref: Lok Sabha Unstarred Question № 1777, answered 4 May 2016.
[6] Aadhaar Act, 2016 Section 2 (k)
[7] Aadhaar Act, 2016 Section 29 (1)(a)
[8] In August 2016, the State Government of Rajasthan requested the UIDAI for demographic information of residents with the Government, which was refused by the UIDAI. The UIDAI suggested the Government could request to become an authorized eKYC provider to allow for authentication/KYC with necessary consent of the holder but not as a demographic data collector. Ref: Unstarred Question № 2369, answered 30 Nov 2016.
[9] Aadhaar Act, 2016 Section 30 (c)
[10] Aadhaar Act, 2016 Section 33. The order, if issued, is valid for 3 months, and may be extended by a further 3 months if approved by the Oversight Committee.
[11] Aadhaar (Enrolment & Update) Regulations, 2016 Section 13 (2)
[12] UIDAI: Facts about Aadhaar
[13] Aadhaar Act, 2016 Sections 39–42, Section 43(1), Section 46 for penalties
[14] Aadhaar (Authentication) Regulations, 2016 Section 11
[15] Aadhaar Act, 2016 Sections 3 (2), 8 (2)
[16] The exception being an AUA that is also an ASA, but then they’d be undergoing the same authorization and certification as other ASAs.
[17] Except in Jammu & Kashmir
[18] Lok Sabha Unstarred Question № 18, answered 24 Feb 2016
[19] Aadhaar Act, 2016 Section 7


|
| | __init__ () |
| |
| | __init__ (const LQuaterniond) |
| |
| | __init__ (const LVecBase4d copy) |
| |
| | __init__ (double r, const LVecBase3d copy) |
| |
| | __init__ (double r, double i, double j, double k) |
| |
| LQuaterniond | __pow__ (double) |
| | Returns a new quaternion that represents this quaternion raised to the given power. More...
|
| |
| bool | almostEqual (const LQuaterniond other) |
| | Returns true if two quaternions are memberwise equal within a default tolerance based on the numeric type. More...
|
| |
| bool | almostEqual (const LQuaterniond other, double threshold) |
| | Returns true if two quaternions are memberwise equal within a specified tolerance. More...
|
| |
| bool | almostSameDirection (const LQuaterniond other, double threshold) |
| | Returns true if two quaternions represent the same rotation within a specified tolerance. More...
|
| |
| double | angleDeg (const LQuaterniond other) |
| | Returns the angle between the orientation represented by this quaternion and the other one, expressed in degrees. More...
|
| |
| double | angleRad (const LQuaterniond other) |
| | Returns the angle between the orientation represented by this quaternion and the other one, expressed in radians. More...
|
| |
| LQuaterniond | conjugate () |
| | Returns the complex conjugate of this quat. More...
|
| |
| bool | conjugateFrom (const LQuaterniond other) |
| | Computes the conjugate of the other quat, and stores the result in this quat. More...
|
| |
| bool | conjugateInPlace () |
| | Sets this to be the conjugate of the current quat. More...
|
| |
| | extractToMatrix (LMatrix3d m) |
| | Based on the quat lib from VRPN. More...
|
| |
| | extractToMatrix (LMatrix4d m) |
| | Based on the quat lib from VRPN. More...
|
| |
| double | getAngle () |
| | This, along with get_axis(), returns the rotation represented by the quaternion as an angle about an arbitrary axis. More...
|
| |
| double | getAngleRad () |
| | This, along with get_axis(), returns the rotation represented by the quaternion as an angle about an arbitrary axis. More...
|
| |
| LVector3d | getAxis () |
| | This, along with get_angle(), returns the rotation represented by the quaternion as an angle about an arbitrary axis. More...
|
| |
| LVector3d | getAxisNormalized () |
| | This, along with get_angle(), returns the rotation represented by the quaternion as an angle about an arbitrary axis. More...
|
| |
| LVector3d | getForward (CoordinateSystem cs) |
| | Returns the orientation represented by this quaternion, expressed as a forward vector. More...
|
| |
| LVecBase3d | getHpr (CoordinateSystem cs) |
| | Extracts the equivalent Euler angles from the unit quaternion. More...
|
| |
| double | getI () |
| |
| double | getJ () |
| |
| double | getK () |
| |
| double | getR () |
| |
| LVector3d | getRight (CoordinateSystem cs) |
| | Returns the orientation represented by this quaternion, expressed as a right vector. More...
|
| |
| LVector3d | getUp (CoordinateSystem cs) |
| | Returns the orientation represented by this quaternion, expressed as an up vector. More...
|
| |
| bool | invertFrom (const LQuaterniond other) |
| | Computes the inverse of the other quat, and stores the result in this quat. More...
|
| |
| bool | invertInPlace () |
| | Inverts the current quat. More...
|
| |
| bool | isAlmostIdentity (double tolerance) |
| | Returns true if this quaternion represents the identity transformation within a given tolerance. More...
|
| |
| bool | isIdentity () |
| | Returns true if this quaternion represents the identity transformation: no rotation. More...
|
| |
| bool | isSameDirection (const LQuaterniond other) |
| | Returns true if two quaternions represent the same rotation within a default tolerance based on the numeric type. More...
|
| |
| LQuaterniond | multiply (const LQuaterniond rhs) |
| | actual multiply call (non virtual) More...
|
| |
| bool | normalize () |
| |
| LMatrix3d | operator* (const LMatrix3d) |
| |
| LMatrix4d | operator* (const LMatrix4d) |
| |
| LQuaterniond | operator* (const LQuaterniond) |
| |
| LQuaterniond | operator* (double scalar) |
| |
| LQuaterniond | operator*= (const LQuaterniond) |
| |
| LQuaterniond | operator+ (const LQuaterniond other) |
| |
| LQuaterniond | operator- () |
| |
| LQuaterniond | operator- (const LQuaterniond other) |
| |
| LQuaterniond | operator/ (double scalar) |
| |
| | output (Ostream) |
| |
| | setFromAxisAngle (double angle_deg, const LVector3d axis) |
| | angle_deg is the angle about the axis in degrees. More...
|
| |
| | setFromAxisAngleRad (double angle_rad, const LVector3d axis) |
| | angle_rad is the angle about the axis in radians. More...
|
| |
| | setFromMatrix (const LMatrix3d m) |
| | Sets the quaternion according to the rotation represented by the matrix. More...
|
| |
| | setFromMatrix (const LMatrix4d m) |
| |
| | setHpr (const LVecBase3d hpr, CoordinateSystem cs) |
| | Sets the quaternion as the unit quaternion that is equivalent to these Euler angles.  More...
|
| |
| LVecBase4d | xform (const LVecBase4d v) |
| | Transforms a 4-d vector by the indicated rotation. More...
|
| |
| Public Member Functions inherited from LVecBase4d |
| object | __getattr__ (str attr_name) |
| |
| | __init__ () |
| |
| | __init__ (const LPoint3d point) |
| | Constructs an LVecBase4 from an LPoint3.  More...
|
| |
| | __init__ (const UnalignedLVecBase4d copy) |
| |
| | __init__ (double fill_value) |
| |
| | __init__ (double x, double y, double z, double w) |
| |
| object | __ipow__ (double exponent) |
| |
| LVecBase4d | __pow__ (double exponent) |
| |
| object | __reduce__ () |
| |
| str | __repr__ () |
| |
| int | __setattr__ (str attr_name, object assign) |
| |
| int | addHash (int hash) |
| | Adds the vector into the running hash. More...
|
| |
| int | addHash (int hash, double threshold) |
| | Adds the vector into the running hash. More...
|
| |
| | addToCell (int i, double value) |
| |
| | addW (double value) |
| |
| | addX (double value) |
| |
| | addY (double value) |
| |
| | addZ (double value) |
| |
| bool | almostEqual (const LVecBase4d other) |
| | Returns true if two vectors are memberwise equal within a default tolerance based on the numeric type. More...
|
| |
| bool | almostEqual (const LVecBase4d other, double threshold) |
| | Returns true if two vectors are memberwise equal within a specified tolerance. More...
|
| |
| int | compareTo (const LVecBase4d other) |
| | This flavor of compare_to uses a default threshold value based on the numeric type. More...
|
| |
| int | compareTo (const LVecBase4d other, double threshold) |
| | Sorts vectors lexicographically, componentwise. More...
|
| |
| | componentwiseMult (const LVecBase4d other) |
| |
| double | dot (const LVecBase4d other) |
| |
| | fill (double fill_value) |
| | Sets each element of the vector to the indicated fill_value. More...
|
| |
| LVecBase4d | fmax (const LVecBase4d other) |
| |
| LVecBase4d | fmin (const LVecBase4d other) |
| |
| | generateHash (ChecksumHashGenerator hashgen) |
| | Adds the vector to the indicated hash generator. More...
|
| |
| | generateHash (ChecksumHashGenerator hashgen, double threshold) |
| | Adds the vector to the indicated hash generator. More...
|
| |
| double | getCell (int i) |
| |
| | getData () |
| | Returns the address of the first of the four data elements in the vector. More...
|
| |
| int | getHash () |
| | Returns a suitable hash for phash_map. More...
|
| |
| int | getHash (double threshold) |
| | Returns a suitable hash for phash_map. More...
|
| |
| double | getW () |
| |
| double | getX () |
| |
| LVecBase2d | getXy () |
| | Returns the x and y component of this vector. More...
|
| |
| LVecBase3d | getXyz () |
| | Returns the x, y and z component of this vector. More...
|
| |
| double | getY () |
| |
| double | getZ () |
| |
| bool | isNan () |
| | Returns true if any component of the vector is not-a-number, false otherwise. More...
|
| |
| double | length () |
| | Returns the length of the vector, by the Pythagorean theorem. More...
|
| |
| double | lengthSquared () |
| | Returns the square of the vector's length, cheap and easy. More...
|
| |
| bool | normalize () |
| | Normalizes the vector in place. More...
|
| |
| LVecBase4d | normalized () |
| | Normalizes the vector and returns the normalized vector as a copy. More...
|
| |
| | operator new (int size) |
| |
| bool | operator!= (const LVecBase4d other) |
| |
| LVecBase4d | operator* (double scalar) |
| |
| LVecBase4d | operator*= (double scalar) |
| |
| LVecBase4d | operator+ (const LVecBase4d other) |
| |
| LVecBase4d | operator+= (const LVecBase4d other) |
| |
| LVecBase4d | operator- () |
| |
| LVecBase4d | operator- (const LVecBase4d other) |
| |
| LVecBase4d | operator-= (const LVecBase4d other) |
| |
| LVecBase4d | operator/ (double scalar) |
| |
| LVecBase4d | operator/= (double scalar) |
| |
| bool | operator< (const LVecBase4d other) |
| |
| LVecBase4d | operator= (const LVecBase4d copy) |
| |
| LVecBase4d | operator= (double fill_value) |
| |
| bool | operator== (const LVecBase4d other) |
| |
| double | operator[] (int i) |
| |
| | operator[] (int i, double assign_val) |
| |
| | output (Ostream out) |
| |
| LVecBase4d | project (const LVecBase4d onto) |
| | Returns a new vector representing the projection of this vector onto another one. More...
|
| |
| | readDatagram (DatagramIterator source) |
| | Reads the vector from the Datagram using get_stdfloat(). More...
|
| |
| | readDatagramFixed (DatagramIterator source) |
| | Reads the vector from the Datagram using get_float32() or get_float64().  More...
|
| |
| | writeDatagramFixed (Datagram destination) |
| | Writes the vector to the Datagram using add_float32() or add_float64(), depending on the type of floats in the vector, regardless of the setting of Datagram::set_stdfloat_double(). More...
|
| |
This is the base quaternion class.


Kaitlin Kriska, a sophomore studying integrated social studies education, has always cherished her hometown but is ready to come back to OU where she enjoys having everything she needs closeby on Court Street.
Kriska’s excitement to return to college life doesn’t come without her concerns about how the university handled the racially-motivated hate crimes that were committed in residence halls at the end of the last spring semester.
“I think the university really thought that if they just kind of pushed it under the rug, that we were gonna leave for summer and then forget about it,” Kriska said.
A previous Post article details the events of last semester and explains what OU administration and students have planned to prevent future hate crimes on campus. But it will take time to see these steps make progress and they can’t prevent all students from feeling comfortable coming back to campus for a new semester.
“I am anxious about it,” Kriska said. “I think [the university] should think about returning students but also what about the incoming students that are going to have to constantly be anxious about like, what if this happens to me next?”
The university is working on creating more spaces for racial, ethnic, gender and sexual minority students. Part of the action steps university administration laid out include renovating the Multicultural Center and offering, through the Office of Multicultural Success and Retention, a new living opportunity for students in the LINKS program.
Christina Parker, a sophomore majoring in journalism and women, gender and sexuality studies, wanted to see immediate action after the hate crimes and was confused about the lack of it.
“I feel like people will not feel safe until there’s a promise of immediate action,” Parker said.
Parker also has concerns regarding the lack of communication and spreading of information from university administration about their plans for this year.
“It makes you think like, how many other people were passive and it’s like they didn’t really take a stance on it,” Parker said.
And while there are plans in development, Kriska feels the university should be doing something more consistently.
“They should be the ones protecting us and we should be able to feel protected by them,” Kriska said.
Students can also be aware of the different emotions and experiences their peers will have at the beginning of the school year, Kriska said. She also said people can be open and communicate with each other to feel more comfortable.
Students will begin the process of returning to campus and preparing for fall semester this month and incoming freshmen and new students will navigate a new environment. But every student, no matter how long they’ve been on campus, has choices to make on how they will treat each other.
“I just wish more people wanted to make (OU) a safe space,” Parker said. “Life is way too hard for everyone. Just be kind.”


Linear search is a very basic and simple search algorithm.
In Linear search, we search an element or value in a given array by traversing the array from the starting,
till the desired element or value is found.
For example, consider an array of integers of size N
You should find and print the position of all the elements with value.
Here, the linear search is based on the idea of matching each element from the beginning of the list to the end of the list with the integer
and then printing the position of the element if the condition is `True'.
| A[0] | A[1] | A[2] | A[3] | A[4] | A[5] | A[6] | A[7] | A[8] | A[9] | A[10] |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
Linear Search Code in C:
#include <stdio.h>
int main()
{
int array[100], search, c, n;
printf("Enter number of elements in array\n");
scanf("%d", &n);
printf("Enter %d integer(s)\n", n);
for (c = 0; c < n; c++)
scanf("%d", &array[c]);
printf("Enter a number to search\n");
scanf("%d", &search);
for (c = 0; c < n; c++)
{
if (array[c] == search) /* If required element is found */
{
printf("%d is present at location %d.\n", search, c+1);
break;
}
}
if (c == n)
printf("%d isn't present in the array.\n", search);
return 0;
}


{% extends "base.html" %} {% block title %}JeffPD{% endblock %} {% block page_content %}
Hey {% if current_user.is_authenticated() %}{{ current_user.first_name }}{% else %}Stranger{% endif %}.
I've heard from many staff members who are feeling overwhelmed by the amount of emails in the Gmail inbox. They specifically feel overwhelmed by all the attendance emails they get everyday.
Never fear! There's a way to fix that!
Gmail filters allow you to automagically organize your emails into folders so that your inbox is more organized. After you setup a filter for your attendance emails, they will no longer show up in your inbox. They will be in your Gmail attendance email folder. Then, you'll only have important emails in your inbox, and you check your attendance folder if you want to see those attendance emails.
I made an amazing YouTube video tutorial to show you how to setup those filters. Check it out below!
If you want anymore extra help. checkout Google's official help page about using Filters


Drag this button to your bookmarks bar: OSM History
You can use it to navigate to the history page from OpenStreetMap.org and some other sites.


'Goofball' Dogs Rescued From Carrollton Storm Drain
by Holley FordA couple of "goofball" dogs are safe after finding themselves stuck in a storm drain in Carrollton.
City officials tweeted that these two pooches were likely following something when they ended up underground.
Thankfully, Carrollton Animal Services came to their rescue.
The pups are home safe with their family.


Performance
Eclipse vs. bake
Test Environement
Test-System |
CPU: RAM: OS : HDD: |
Intel Xeon W3520 (4x 2.67 GHz) 4 GB Windows XP Raid |
Test-Application |
~200 projects |
|
Ruby-Version |
ruby 1.9.2 |
|
Tests-Runs |
30 |
Test Results
Test |
Eclipse 3.6.1, CDT 6 |
bake |
|---|---|---|
Build whole workspace |
13:01 min |
7:19 min |
Rebuild without clean |
3:05 min |
0:50 min |
Clean whole workspace |
0:41 min |
0:08 min |
Clean the cleaned workspace |
0:35 min |
0:02 min |
Note
For the build Eclipse needs additional 300 MB of RAM, in contrast bake takes up 35 MB of RAM at it’s peak.
CMake with Unix makefiles vs. bake
Test Environement
Test-System |
CPU: RAM: OS : HDD: |
Intel Xeon W3520 (4x 2.67 GHz) 4 GB Windows XP Raid |
Test-Application |
~100 projects |
|
Ruby-Version |
- |
|
Tests-Runs |
- |
Test Results
Build whole workspace: bake is ~10% faster
Build again without clean: bake is ~50% faster
Clean whole workspace: bake is ~80% faster
Performance using different rubies
Test Environement
Test-System |
CPU: RAM: OS : HDD: |
Intel Xeon W3520 (4x 2.67 GHz) 4 GB Windows XP Raid |
Test-Application |
~200 projects |
|
Tests-Runs |
30 |
Test Results
ruby 1.8.6p398 |
ruby 1.8.7p352 |
ruby 1.9.2p180 |
ruby 1.9.3p0 |
|
|---|---|---|---|---|
Build whole workspace |
13:58 min |
8:07 min |
7:19 min |
7:28 min |
Build single file |
1,20 sec |
1,87 sec |
2,38 sec |
1,29 sec |
Note
ruby 1.8.6 uses only ONE native thread for multiple ruby threads.
ruby 1.9.2 for Windows needs very long to startup for complex applications, which is fixed in 1.9.3


${Customize your portal's title, logo and theme colors. Preview changes as you make them}
${Create and layout pages with drag-and-drop functionality. Preview pages as you make changes}
${Configure the properties of pages, containers and widgets from a map view}
${Create widgets from scratch or customize an existing one. Write HTML, CSS, and JavaScript with real-time preview}
${Create a new Service Portal}
${Browse guides, tutorials and videos to learn how to set up, configure and customize your portals}


‘Hitman’ linked with MQM-L held in Karachi
by INPKARACHI: The Counter-Terrorism Department (CTD) has arrested Muttahida Qaumi Movement-London’s (MQM-L) alleged target killer from Karachi’s Pak Colony, media reports emerged on Friday.
Sources familiar with the matter revealed that the suspect has been identified as Kaleem alias Chikna. He was involved in the killing of two police officers and several other persons.
It has further been learnt that the accused is closely acquainted with Dilawar Khan alias Shah Jee who is MQM-L sector in-charge for Pak Colony.


{{username}}
Logout
Study All Verbs
Study Frequently Missed
Custom Study
My Groups
Frequently Missed Verbs
{{ulist freq-missed}}


General
Wallpaper
Addons
Use 24-hour time
Timer Sound
Analysis
Argon
Carbon
Copernicium
Curium
Departure
FireDrill
Helium
Neon
Osmium
Platinum
Plutonium
Timing
Use Custom wallpaper
Custom Wallpaper URL
Google Search
Countdown Timer
Light Fonts
Chrome Apps
Countdown
Follow @tabbedio
© Copyright Tabbed.io (v1.4.2)
Current wallpaper by
Design by
Dan Bovey


Alive and kicking
- Basic project setup
- Basic working and tested implementation
- Speed up the Travis build process (max. 4 minutes)
- Test min/max browser versions per default
- Use semantic-release for automatic npm releases
- Make integration tests workable with phantomjs
- Add
gh-pages
deployed automatically by Travis
- Add interactive playground with live code editing for examples
- Make all examples integration tests
- Unit test documentation examples
- Implement stubbed HTMLElement.prototype.style for React integration
- Implement (configurable) matchMedia callbacks to read responsive styles correctly
Obsolute
Run browser tests only for code changes vs. documentation
Run full cross-browser tests for relase-builds
jogwheel v1.4.5
is built by Mario Nebl and contributors with :heart:
and released under the MIT License.


Good Meetups
Some good meetups to attend
https://www.meetup.com/Beer-Code-Seattle/events/dfmznnyzqbgb/
https://www.meetup.com/NewTechSeattle/events/265854784/
https://www.meetup.com/seattlejshackers/events/kxwqlryzqbtb/


RR - Rock
↳ Solid tile used as a wall
GG - Grass
↳ Walkable tile
SS - Sand
↳ Walkable tile often around water
WW - Water
↳ Non-walkable tile
== - Bridge
↳ Walkable tile for crossing water
*- - Lever
↳ Solid tile for opening and closing doors
|| - Door
↳ Solid tile that can be opened with levers (bridge when opened)
=> - Laser
↳ Solid tile that emits a laser to the right
== - Laser beam
↳ Beam that can activate levers
// - Mirror
↳ Redirects laser beams
88 - Teleport
↳ Tile which teleports you to the corresponding teleport tile


/* * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. * * @APPLE_LICENSE_HEADER_START@ * * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights * Reserved. This file contains Original Code and/or Modifications of * Original Code as defined in and that are subject to the Apple Public * Source License Version 1.1 (the "License"). You may not use this file * except in compliance with the License. Please obtain a copy of the * License at http://www.apple.com/publicsource and read it before using * this file.  Please see the * License for the specific language governing rights and limitations * under the License. * * @APPLE_LICENSE_HEADER_END@ */ /* error.h This file defines the interface to the exception raising scheme. Copyright (c) 1988-1996 NeXT Software, Inc. as an unpublished work. All rights reserved. */ #warning the API in this header is obsolete #ifndef _OBJC_ERROR_H_ #define _OBJC_ERROR_H_ #include <setjmp.h> #import <objc/objc-api.h> #if defined(__svr4__) #define _setjmp setjmp #define _longjmp longjmp #endif typedef struct _NXHandler { /* a node in the handler chain */ jmp_buf jumpState; /* place to longjmp to */ struct _NXHandler *next; /* ptr to next handler */ int code; /* error code of exception */ const void *data1, *data2; /* blind data for describing error */ } NXHandler; /* Handles RAISE's with nowhere to longjmp to */ typedef void NXUncaughtExceptionHandler(int code, const void *data1, const void *data2); OBJC_EXPORT NXUncaughtExceptionHandler *_NXUncaughtExceptionHandler; #define NXGetUncaughtExceptionHandler() _NXUncaughtExceptionHandler #define NXSetUncaughtExceptionHandler(proc) \ (_NXUncaughtExceptionHandler = (proc)) /* NX_DURING, NX_HANDLER and NX_ENDHANDLER are always used like: NX_DURING some code which might raise an error NX_HANDLER code that will be jumped to if an error occurs NX_ENDHANDLER If any error is raised within the first block of code, the second block of code will be jumped to. Typically, this code will clean up any resources allocated in the routine, possibly case on the error code and perform special processing, and default to RERAISE the error to the next handler. Within the scope of the handler, a local variable called NXLocalHandler of type NXHandler holds information about the error raised. It is illegal to exit the first block of code by any other means than NX_VALRETURN, NX_VOIDRETURN, or just falling out the bottom. */ /* private support routines. Do not call directly. */ OBJC_EXPORT void _NXAddHandler( NXHandler *handler ); OBJC_EXPORT void _NXRemoveHandler( NXHandler *handler ); #define NX_DURING { NXHandler NXLocalHandler; \ _NXAddHandler(&NXLocalHandler); \ if( !_setjmp(NXLocalHandler.jumpState) ) { #define NX_HANDLER _NXRemoveHandler(&NXLocalHandler); } else { #define NX_ENDHANDLER }} #define NX_VALRETURN(val) do { typeof(val) temp = (val); \ _NXRemoveHandler(&NXLocalHandler); \ return(temp); } while (0) #define NX_VOIDRETURN do { _NXRemoveHandler(&NXLocalHandler); \ return; } while (0) /* RAISE and RERAISE are called to indicate an error condition. They initiate the process of jumping up the chain of handlers. */ OBJC_EXPORT #if defined(__GNUC__) && !defined(__STRICT_ANSI__) && !defined(NeXT_PDO) volatile /* never returns */ #endif void _NXRaiseError(int code, const void *data1, const void *data2) #if defined(__GNUC__) __attribute__ ((noreturn)) #endif ; #define NX_RAISE( code, data1, data2 ) \ _NXRaiseError( (code), (data1), (data2) ) #define NX_RERAISE() _NXRaiseError( NXLocalHandler.code, \ NXLocalHandler.data1, NXLocalHandler.data2 ) /* These routines set and return the procedure which is called when exceptions are raised. This procedure must NEVER return. It will usually either longjmp, or call the uncaught exception handler. The default exception raiser is also declared */ typedef volatile void NXExceptionRaiser(int code, const void *data1, const void *data2); OBJC_EXPORT void NXSetExceptionRaiser(NXExceptionRaiser *proc); OBJC_EXPORT NXExceptionRaiser *NXGetExceptionRaiser(void); OBJC_EXPORT NXExceptionRaiser NXDefaultExceptionRaiser; /* The error buffer is used to allocate data which is passed up to other handlers. Clients should clear the error buffer in their top level handler. The Application Kit does this. */ OBJC_EXPORT void NXAllocErrorData(int size, void **data); OBJC_EXPORT void NXResetErrorData(void); #endif /* _OBJC_ERROR_H_ */


Finish projects on the cheap
Don't let lack of tools stand in your way of finishing your project.
With Use My Tools you can:
- Gain access to niche and expensive tools
- Try new tools before buying your own
- Save money by not buying a tool you only need once
- Save space, no need to store bulky tools