The symbolic ring#
- class sage.symbolic.ring.NumpyToSRMorphism#
Bases:
Morphism
A morphism from numpy types to the symbolic ring.
- class sage.symbolic.ring.SymbolicRing#
Bases:
SymbolicRing
Symbolic Ring, parent object for all symbolic expressions.
- I()#
The imaginary unit, viewed as an element of the symbolic ring.
EXAMPLES:
sage: SR.I()^2 -1 sage: SR.I().parent() Symbolic Ring
- characteristic()#
Return the characteristic of the symbolic ring, which is 0.
OUTPUT:
a Sage integer
EXAMPLES:
sage: c = SR.characteristic(); c 0 sage: type(c) <class 'sage.rings.integer.Integer'>
- cleanup_var(symbol)#
Cleans up a variable, removing assumptions about the variable and allowing for it to be garbage collected
INPUT:
symbol
– a variable or a list of variables
- is_exact()#
Return False, because there are approximate elements in the symbolic ring.
EXAMPLES:
sage: SR.is_exact() False
Here is an inexact element.
sage: SR(1.9393) 1.93930000000000
- is_field(proof=True)#
Returns True, since the symbolic expression ring is (for the most part) a field.
EXAMPLES:
sage: SR.is_field() True
- is_finite()#
Return False, since the Symbolic Ring is infinite.
EXAMPLES:
sage: SR.is_finite() False
- pi()#
EXAMPLES:
sage: SR.pi() is pi True
- subring(*args, **kwds)#
Create a subring of this symbolic ring.
INPUT:
Choose one of the following keywords to create a subring.
accepting_variables
(default:None
) – a tuple or other iterable of variables. If specified, then a symbolic subring of expressions in only these variables is created.rejecting_variables
(default:None
) – a tuple or other iterable of variables. If specified, then a symbolic subring of expressions in variables distinct to these variables is created.no_variables
(default:False
) – a boolean. If set, then a symbolic subring of constant expressions (i.e., expressions without a variable) is created.
OUTPUT:
A ring.
EXAMPLES:
Let us create a couple of symbolic variables first:
sage: V = var('a, b, r, s, x, y')
Now we create a symbolic subring only accepting expressions in the variables \(a\) and \(b\):
sage: A = SR.subring(accepting_variables=(a, b)); A Symbolic Subring accepting the variables a, b
An element is
sage: A.an_element() a
From our variables in \(V\) the following are valid in \(A\):
sage: tuple(v for v in V if v in A) (a, b)
Next, we create a symbolic subring rejecting expressions with given variables:
sage: R = SR.subring(rejecting_variables=(r, s)); R Symbolic Subring rejecting the variables r, s
An element is
sage: R.an_element() some_variable
From our variables in \(V\) the following are valid in \(R\):
sage: tuple(v for v in V if v in R) (a, b, x, y)
We have a third kind of subring, namely the subring of symbolic constants:
sage: C = SR.subring(no_variables=True); C Symbolic Constants Subring
Note that this subring can be considered as a special accepting subring; one without any variables.
An element is
sage: C.an_element() I*pi*e
None of our variables in \(V\) is valid in \(C\):
sage: tuple(v for v in V if v in C) ()
See also
- symbol(name=None, latex_name=None, domain=None)#
EXAMPLES:
sage: t0 = SR.symbol("t0") sage: t0.conjugate() conjugate(t0) sage: t1 = SR.symbol("t1", domain='real') sage: t1.conjugate() t1 sage: t0.abs() abs(t0) sage: t0_2 = SR.symbol("t0", domain='positive') sage: t0_2.abs() t0 sage: bool(t0_2 == t0) True sage: t0.conjugate() t0 sage: SR.symbol() # temporary variable symbol...
We propagate the domain to the assumptions database:
sage: n = var('n', domain='integer') sage: solve([n^2 == 3],n) []
- symbols#
- temp_var(n=None, domain=None)#
Return one or multiple new unique symbolic variables as an element of the symbolic ring. Use this instead of SR.var() if there is a possibility of name clashes occuring. Call SR.cleanup_var() once the variables are no longer needed or use a \(with SR.temp_var() as ...\) construct.
INPUT:
n
– (optional) positive integer; number of symbolic variablesdomain
– (optional) specify the domain of the variable(s);
EXAMPLES:
Simple definition of a functional derivative:
sage: def functional_derivative(expr,f,x): ....: with SR.temp_var() as a: ....: return expr.subs({f(x):a}).diff(a).subs({a:f(x)}) sage: f = function('f') sage: a = var('a') sage: functional_derivative(f(a)^2+a,f,a) 2*f(a)
Contrast this to a similar implementation using SR.var(), which gives a wrong result in our example:
sage: def functional_derivative(expr,f,x): ....: a = SR.var('a') ....: return expr.subs({f(x):a}).diff(a).subs({a:f(x)}) sage: f = function('f') sage: a = var('a') sage: functional_derivative(f(a)^2+a,f,a) 2*f(a) + 1
- var(name, latex_name=None, n=None, domain=None)#
Return a symbolic variable as an element of the symbolic ring.
INPUT:
name
– string or list of strings with the name(s) of the symbolic variable(s)latex_name
– (optional) string used when printing in latex mode, if not specified use'name'
n
– (optional) positive integer; number of symbolic variables, indexed from \(0\) to \(n-1\)domain
– (optional) specify the domain of the variable(s); it is the complex plane by default, and possible options are (non-exhaustive list, see note below):'real'
,'complex'
,'positive'
,'integer'
and'noninteger'
OUTPUT:
Symbolic expression or tuple of symbolic expressions.
See also
This function does not inject the variable(s) into the global namespace. For that purpose see
var()
.Note
For a comprehensive list of acceptable features type
'maxima('features')'
, and see also the documentation of Assumptions.EXAMPLES:
Create a variable \(zz\) (complex by default):
sage: zz = SR.var('zz'); zz zz
The return type is a symbolic expression:
sage: type(zz) <class 'sage.symbolic.expression.Expression'>
We can specify the domain as well:
sage: zz = SR.var('zz', domain='real') sage: zz.is_real() True
The real domain is also set with the integer domain:
sage: SR.var('x', domain='integer').is_real() True
The
name
argument does not have to match the left-hand side variable:sage: t = SR.var('theta2'); t theta2
Automatic indexing is available as well:
sage: x = SR.var('x', 4) sage: x[0], x[3] (x0, x3) sage: sum(x) x0 + x1 + x2 + x3
- wild(n=0)#
Return the n-th wild-card for pattern matching and substitution.
INPUT:
n
- a nonnegative integer
OUTPUT:
n
-th wildcard expression
EXAMPLES:
sage: x,y = var('x,y') sage: w0 = SR.wild(0); w1 = SR.wild(1) sage: pattern = sin(x)*w0*w1^2; pattern $1^2*$0*sin(x) sage: f = atan(sin(x)*3*x^2); f arctan(3*x^2*sin(x)) sage: f.has(pattern) True sage: f.subs(pattern == x^2) arctan(x^2)
- class sage.symbolic.ring.TemporaryVariables(iterable=(), /)#
Bases:
tuple
Instances of this class can be used with Python \(with\) to automatically clean up after themselves.
- class sage.symbolic.ring.UnderscoreSageMorphism#
Bases:
Morphism
A Morphism which constructs Expressions from an arbitrary Python object by calling the
_sage_()
method on the object.EXAMPLES:
sage: import sympy sage: from sage.symbolic.ring import UnderscoreSageMorphism sage: b = sympy.var('b') sage: f = UnderscoreSageMorphism(type(b), SR) sage: f(b) b sage: _.parent() Symbolic Ring
- sage.symbolic.ring.is_SymbolicExpressionRing(R)#
Return True if
R
is the symbolic expression ring.This function is deprecated. Instead, either use
R is SR
(to test whetherR
is the unique symbolic ringSR
); orisinstance
withSymbolicRing
(when also symbolic subrings and callable symbolic rings should be accepted).EXAMPLES:
sage: from sage.symbolic.ring import is_SymbolicExpressionRing sage: is_SymbolicExpressionRing(ZZ) doctest:warning... DeprecationWarning: is_SymbolicExpressionRing is deprecated; use "... is SR" or isinstance(..., sage.rings.abc.SymbolicRing instead See https://github.com/sagemath/sage/issues/32665 for details. False sage: is_SymbolicExpressionRing(SR) True
- sage.symbolic.ring.isidentifier(x)#
Return whether
x
is a valid identifier.INPUT:
x
– a string
OUTPUT:
Boolean. Whether the string
x
can be used as a variable name.This function should return
False
for keywords, so we can not just use theisidentifier
method of strings, because, for example, it returnsTrue
for “def” and for “None”.EXAMPLES:
sage: from sage.symbolic.ring import isidentifier sage: isidentifier('x') True sage: isidentifier(' x') # can't start with space False sage: isidentifier('ceci_n_est_pas_une_pipe') True sage: isidentifier('1 + x') False sage: isidentifier('2good') False sage: isidentifier('good2') True sage: isidentifier('lambda s:s+1') False sage: isidentifier('None') False sage: isidentifier('lambda') False sage: isidentifier('def') False
- sage.symbolic.ring.the_SymbolicRing()#
Return the unique symbolic ring object.
(This is mainly used for unpickling.)
EXAMPLES:
sage: sage.symbolic.ring.the_SymbolicRing() Symbolic Ring sage: sage.symbolic.ring.the_SymbolicRing() is sage.symbolic.ring.the_SymbolicRing() True sage: sage.symbolic.ring.the_SymbolicRing() is SR True
- sage.symbolic.ring.var(name, **kwds)#
EXAMPLES:
sage: from sage.symbolic.ring import var sage: var("x y z") (x, y, z) sage: var("x,y,z") (x, y, z) sage: var("x , y , z") (x, y, z) sage: var("z") z


login
logout
get data
add
get mongo data
note:
tags:
save
by Tags
tag
get
by text
text
get
by author
get
data


Sets the value of blocked thread check period, in ms.
Set the hostname to be used for clustering.
Set the value of cluster ping interval, in ms.
Set the value of cluster ping reply interval, in ms.
Set the port to be used for clustering.
Set the public facing hostname to be used for clustering. Sometimes, e.g. when running on certain clouds, the local address the server listens on for clustering is not the same address that other nodes connect to it at, as the OS / cloud infrastructure does some kind of proxying. If this is the case you can specify a public hostname which is different from the hostname the server listens at. The default value is null which means use the same as the cluster hostname.
See {@link #setClusterPublicHost(String)} for an explanation.
Set whether or not the Vert.x instance will be clustered.
Sets the event bus configuration to configure the host, port, ssl...
Set the number of event loop threads to be used by the Vert.x instance.
Set wether the Vert.x file resolver uses caching for classpath resources.
Set whether HA will be enabled on the Vert.x instance.
Set the HA group to be used when HA is enabled.
Set the value of internal blocking pool size
Sets the value of max event loop execute time, in ns.
Sets the value of max worker execute time, in ns.
Set the metrics options
Set wether to prefer the native transport to the JDK transport.
Set the quorum size to be used when HA is enabled.
Set the threshold value above this, the blocked warning contains a stack trace.
Set the maximum number of worker threads to be used by the Vert.x instance.
Generated using TypeDoc
Sets the address resolver configuration to configure resolving DNS servers, cache TTL, etc...
the address resolver options
a reference to this, so the API can be used fluently


{# Twig HTML Component Macros Miscellaneous reusable HTML snippets that are more than an include. #} {# Contact Form Honeypot Limits spam messages by populating a hidden email contact field with a known value. If the value changes, the message is ignored. #} {% macro contactHoneypot() %} {# Keep the inline style to hide the honeypot #}
{% endmacro contactHoneypot %}


ErrorController.Rd
Reactive R6Class that returns HTML according to a test function. Modules like
checked_text_input
or observed_vector_input
provide an argument accepting an ErrorController or ErrorControllerList
that expands the module's default tests.
error_controller <- shiny::isolate({ErrorController$new( fun = function(x) purrr::is_null(x), ui_true = "x is NULL", ui_false = "x is not NULL", error = TRUE )})
new(fun, ui_true = NULL, ui_false = NULL, priority = 0, error = NULL)
Initialize the error controller.
fun | Function with exactly one
argument returning TRUE or
FALSE . |
ui_true | HTML-like tag to be
returned by this$get_ui() , if this$fun(this$value) == TRUE . |
ui_false | HTML-like tag to be
returned by this$get_ui() , if this$fun(this$value) == FALSE . |
priority | Numeric which is used
by ErrorControllerList to determine the order in which
to display the UIs of their error controllers. |
error | Determine which result of this$fun(this$value) shall
be counted as an error or use NULL if either
result produces no error, which is useful for displaying warnings or
help messages based on user input. |
get_priority()
Get the error controller's priority.
get_ui()
Get the error controller's ui.
has_error()
Get a logical
indicating
whether this$fun(this$value) equals this$error. If error = NULL
in this$new(), this method always returns false.
set_priority(priority)
Set the priority of the error controller.
set_value
Set the value which is checked by this$fun().


My Work
Lorem ipsum dolor sit amet, tempor prodesset eos no. Temporibus necessitatibus sea ei, at tantas oporteat nam. Lorem ipsum dolor sit amet, tempor prodesset eos no.
I am a Freshman at Marist college looking to major in Economics and minor in Computer Science
I live in Westchester New York
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
Lorem ipsum dolor sit amet, tempor prodesset eos no. Temporibus necessitatibus sea ei, at tantas oporteat nam. Lorem ipsum dolor sit amet, tempor prodesset eos no.
Lorem ipsum dolor sit amet, tempor prodesset eos no. Temporibus necessitatibus sea ei, at tantas oporteat nam. Lorem ipsum dolor sit amet, tempor prodesset eos no.
Lorem ipsum dolor sit amet, tempor prodesset eos no. Temporibus necessitatibus sea ei, at tantas oporteat nam. Lorem ipsum dolor sit amet, tempor prodesset eos no.
Lorem ipsum dolor sit amet, tempor prodesset eos no. Temporibus necessitatibus sea ei, at tantas oporteat nam. Lorem ipsum dolor sit amet, tempor prodesset eos no.
HTML
CSS
JavaScript
PHP


{% load i18n %}
{% trans "Instance resource and resource pool must belong to the same network or subnet." %}
{% trans "A port number is required." %}
{% trans "Port number range: 1~65535" %}
{% trans "A weight is required." %}
{% trans "Weight range: 1~100" %}


Libraw is a library for reading RAW files obtained from digital photo cameras (CRW/CR2, NEF, RAF, DNG, and others).
This package is known to build and work properly using an LFS-7.7 platform.
Download (HTTP): http://www.libraw.org/data/LibRaw-0.16.0.tar.gz
Download MD5 sum: 21f569be043057b754d87e3062e2345a
Download size: 1.4 MB
Estimated disk space required: 21 MB
Estimated build time: 0.4 SBU
libjpeg-turbo-1.4.0, JasPer-1.900.1, and Little CMS-2.6
LibRaw-demosaic-pack-GPL2 and LibRaw-demosaic-pack-GPL3
User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libraw
Install libraw by running the following commands:
./configure --prefix=/usr \ --enable-jpeg \ --enable-jasper \ --enable-lcms \ --disable-static \ --docdir=/usr/share/doc/libraw-0.16.0 && make
This package does not come with a test suite.
Now, as the root
user:
make install
--enable-jpeg
: This switch enables
support for jpeg. Remove if you don't have libjpeg-turbo-1.4.0
installed.
--enable-jasper
: This switch enables
support for jasper. Remove if you don't have JasPer-1.900.1 installed.
--enable-lcms
: This switch enables
support for Little CMS2. Remove if you don't have Little CMS-2.6
installed.
--disable-static
: This
switch prevents installation of static versions of the libraries.
Last updated on 2014-02-20 08:45:35 -0600


getText(id)
is similar to getValue(id)
, except that it is designed for <select ...
lists where you need to get the displayed text rather than the value of the current option.
DWRUtil.getText
(
)
returns = " "
And for comparison:
DWRUtil.getValue
(
)
returns = " "
HTML Test Elements
| Text area (id="textarea"): | Selection list (id="select"): | ||
| Text input (id="text"): | Password input (id="password"): | ||
| Form button (id="formbutton"): | Fancy button (id="button"): |


You are logged as visiting scientist. You can view your datasets available after your visit.
Importing from aria
Status: ${importariastatus}
| id | name | status |
|---|---|---|
| ${proposal.pid} | ${proposal.status} |
| pid: ${selectedProposal.pid} title: ${selectedProposal.title} status: ${selectedProposal.status} | |
| ${field.title} | ${field.data} |


SSH Authorized Keys Access
ssh-keygen -t rsa -C<EMAIL_ADDRESS>generate a key
add your PUBLIC key to /home/user/.ssh/authorized_keys
ssh-copy-id
echo "" > authorized_keys
any other number of ways


April 2011, Buenos Aires, Argentina. Project community for Youth Integration prepared for World Bank.
Doncel is an Argentine non-profit that promotes practices that improve the processes of transition of youth living in foster homes and other institutions into adulthood and autonomy.
The Argentine non-profit Doncel hired me and a colleague to design and coordinate a project awarded by The Youth Innovation Fund (YlF).
Youth in the process of leaving foster care are most often vulnerable and isolated.The goal of the project was to expand their economic opportunities by creating a network of former and current care leavers and shelter residents. The network is meant to facilitate sharing of information and the development of technical, work and life skills.
Together with two anthropologists we enlisted the help of twelve youth who had already successfully passed from foster care into adult life. We interviewed youth and facilitated the content for the web platform through creative session techniques such as collage, peer-to-peer interviews, video recording, web design and prototyping.
Copyright Clara Gonzalez Sueyro 2014


Dear user
The given CockpitApplicationName
was not found in the provided authorization information.
Please contact a tenant administrator who can validate the installation.
For more information see also:
Deploying to MindSphere


Sign Up
FirstName
lastName
Username
Phone
Password
Confirm password
E-mail
Skills
Bio
Image URL
Have an account already?
Login


2.4.0 / 2016-09-15
Changed
- added optional support for
graceful-fs
[#62]
2.3.1 / 2016-05-13
2.3.0 / 2016-04-16
- add
throws
to readFile()
. See #39
- add support for any arbitrary
fs
module. Useful with mock-fs
2.2.3 / 2015-10-14
2.2.2 / 2015-09-16
2.2.1 / 2015-06-25
2.2.0 / 2015-06-25
- added
options.spaces
to writeFile()
and writeFileSync()
2.1.2 / 2015-06-22
2.1.1 / 2015-06-19
2.1.0 / 2015-06-19
- cleanup: JavaScript Standard Style, rename files, dropped terst for assert
- methods now support JSON revivers/replacers
2.0.1 / 2015-05-24
2.0.0 / 2014-07-28
- added
\n
to end of file on write. #14
- added
options.throws
to readFileSync()
- dropped support for Node v0.8
1.2.0 / 2014-06-29
- removed semicolons
- bugfix: passed
options
to fs.readFile
and fs.readFileSync
. This technically changes behavior, but
changes it according to docs. #12
1.1.1 / 2013-11-11
- fixed catching of callback bug (ffissore / #5)
1.1.0 / 2013-10-11
- added
options
param to methods, (seanodell / #4)
1.0.1 / 2013-09-05
- removed
homepage
field from package.json to remove NPM warning
1.0.0 / 2013-06-28
- added
.npmignore
, #1
- changed spacing default from
4
to 2
to follow Node conventions
0.0.1 / 2012-09-10


We examine platforms!
- reinvent vertical markets
- reinvent vertical partnerships
- generate frictionless eyeballs
- reintermediate granular content
- enable collaborative communities
- recontextualize ubiquitous solutions
- grow web-enabled e-business
- engineer plug-and-play content


#include <list>
#include <vector>
#include <algorithm>
Go to the source code of this file.
Namespaces | |
| namespace | uvm |
Data Structures | |
| struct | uvm::delete_object |
| class | uvm::uvm_callback_agent< Arg > |
| struct | uvm::uvm_callback_agent< Arg >::abstract_function |
| class | uvm::uvm_callback_agent< Arg >::callback< Fn > |
Generic callback agent for both functions/methods Allows subject to specify/enforce argument type required by observer callback function/method. The variable would be passed to the observer from the subject.
Limitations: 1. Currently supports one argument only for callback functions/methods 2. Does not support 'void' as the argument (requires template specialization) 3. Does not examine the return type from the function (callback)
Definition in file uvm_callback.h.


We have methodologies!
- redefine global infomediaries
- enhance collaborative infomediaries
- evolve scalable interfaces
- transform efficient synergies
- strategize collaborative architectures
- enable one-to-one experiences
- expedite interactive architectures
- utilize 24/7 portals
- facilitate next-generation markets
- extend turn-key partnerships
- orchestrate sticky eyeballs
- exploit granular communities
- embrace robust paradigms


| Modifier and Type | Field and Description |
|---|---|
private int |
age
Age range
|
private boolean |
bidded
Status, true if at least one bid is placed on the item
|
private java.util.ArrayList<Bid> |
bids
List of all bids on the item (empty when borrowed)
|
private boolean |
borrowed
Status, true if someone is borrowing the item
|
private java.lang.String |
borrower
Username of the User borrowing the item
|
private java.lang.String |
Id
The item id used for elastic search
|
private Photo |
image
The image for the item
|
private com.google.android.gms.maps.model.LatLng |
location
The location of item when borrowed is true.
|
private int |
maxPlayers
The maximum number of players
|
private int |
minPlayers
The minimum number of players
|
private java.lang.String |
name
The name of the item
|
private boolean |
newBid
True if a bid has been added since the last time the owner viewed the item
|
private java.lang.String |
owner
The owner's username
|
private java.lang.String |
platform
The platform
|
private double |
rate
The rate that the item will be borrowed at.
|
private int |
timeReq
The time required to play
|
private java.lang.Boolean |
updatedWhenOffline |
| Constructor and Description |
|---|
Item(java.lang.String name,
java.lang.String owner)
Constructor
|
Item(java.lang.String name,
java.lang.String owner,
int minPlayers,
int maxPlayers,
int age,
int timeReq,
java.lang.String platform)
Constructor
|
| Modifier and Type | Method and Description |
|---|---|
void |
acceptBid(Bid bid)
Accept a bid on the item, all bids will be cleared and item set as borrowed
|
void |
addBid(Bid bid)
Adds a bid on the item
|
void |
addImage(Photo newImage)
Takes in a new Photo image and replaces existing image with the new value.
|
void |
clearBids()
clears bids on item
|
void |
declineBid(Bid bid)
Decline a bid made by a user, bid will be removed
|
boolean |
equals(java.lang.Object o)
Compares an Item with the current Item
|
int |
getAge()
Gets the age range
|
java.util.ArrayList<Bid> |
getBids()
Gets the bids on the item
|
java.lang.String |
getBorrower()
Gets the person borrowing the item
|
java.lang.String |
getId()
Gets the item's ID
|
android.graphics.Bitmap |
getImage()
Returns the decoded bitmap image based on the base64 string associated
|
com.google.android.gms.maps.model.LatLng |
getLocation()
Gets the geoLocation coordinates
|
int |
getMaxPlayers()
Gets the maximum number of players
|
int |
getMinPlayers()
Gets the minimum number of players
|
java.lang.String |
getName()
Gets the item's name
|
java.lang.String |
getOwner()
Gets the item's owner
|
java.lang.String |
getPlatform()
Gets the platform
|
double |
getRate()
Gets the rate of the borrowed item.
|
java.lang.String |
getStatus()
Gets the item's current status
|
int |
getTimeReq()
Gets the time requirement
|
java.lang.Boolean |
getUpdatedWhenOffline()
Gets updatedWhenOffline
|
int |
hashCode()
Generates a unique id for the item.
|
boolean |
hasImage()
Returns a boolean value indicating whether the current photo object contains any real image
|
boolean |
hasNewBid()
Checks if item has a new bid
|
boolean |
isBidded()
Checks if the item has been bidded on
|
boolean |
isBorrowed()
Checks if someone is borrowing the item
|
void |
setAge(int age)
Sets the age range
|
void |
setAvailable()
sets the item's status to available
|
void |
setBidded()
sets the item's status to bidded
|
void |
setBidded(boolean bidded)
Deprecated.
|
void |
setBidsViewed()
Sets bids as viewed
|
void |
setBorrowed()
sets the item's status to borrowed
|
void |
setBorrowed(boolean borrowed)
Deprecated.
|
void |
setId(java.lang.String ID)
sets the item's ID
|
void |
setLocation(com.google.android.gms.maps.model.LatLng location)
Sets the geoLocation given the LatLng in (lat, long) format
|
void |
setMaxPlayers(int players)
Sets the maximum number of players
|
void |
setMinPlayers(int players)
Sets the minimum number of players
|
void |
setName(java.lang.String name)
sets the item's name
|
void |
setPlatform(java.lang.String platform)
Sets the platform
|
void |
setRate(double rate)
Sets the rate of item to be borrowed.
|
void |
setTimeReq(int timeReq)
Sets the time requirement
|
void |
setUpdatedWhenOffline(java.lang.Boolean updatedWhenOffline)
Sets the updatedWhenOffline
|
java.lang.String |
toString()
Returns basic information in a readable form
|
private java.lang.String Id
private java.lang.String name
private int minPlayers
private int maxPlayers
private int age
private int timeReq
private java.lang.String platform
private boolean bidded
borrowed
private boolean borrowed
bidded
private boolean newBid
private java.lang.String owner
private double rate
private java.lang.String borrower
private java.util.ArrayList<Bid> bids
private com.google.android.gms.maps.model.LatLng location
private Photo image
private java.lang.Boolean updatedWhenOffline
public Item(java.lang.String name, java.lang.String owner, int minPlayers, int maxPlayers, int age, int timeReq, java.lang.String platform)
name
- the item's nameowner
- the owner's usernameminPlayers
- the minimum number of playersmaxPlayers
- the maximum number of playersage
- the minimum recommended agetimeReq
- the minimum time requirementplatform
- the platformpublic Item(java.lang.String name, java.lang.String owner)
name
- the item's nameowner
- the owner's usernamepublic void setRate(double rate)
public boolean hasNewBid()
public void setBidsViewed()
public java.util.ArrayList<Bid> getBids()
public void clearBids()
public boolean isBorrowed()
public void setBorrowed(boolean borrowed)
public java.lang.String getOwner()
public void addBid(Bid bid)
bid
- the bid to be addedpublic void setAvailable()
public void setBorrowed()
public void setBidded()
public void declineBid(Bid bid)
bid
- the bid to declinepublic java.lang.String getBorrower()
public double getRate()
public java.lang.String getStatus()
public void acceptBid(Bid bid)
bid
- the bid to acceptpublic boolean isBidded()
public void setBidded(boolean bidded)
public java.lang.String getName()
public void setName(java.lang.String name)
name
- the new namepublic void setId(java.lang.String ID)
ID
- the item's IDpublic java.lang.String getId()
public void setMinPlayers(int players)
players
- the minimum number of playerspublic void setMaxPlayers(int players)
players
- the maximum number of playerspublic void setAge(int age)
age
- the age rangepublic void setTimeReq(int timeReq)
timeReq
- the time requirementpublic void setPlatform(java.lang.String platform)
platform
- the platformpublic com.google.android.gms.maps.model.LatLng getLocation()
public void setLocation(com.google.android.gms.maps.model.LatLng location)
location
- the locationpublic int getMinPlayers()
public int getMaxPlayers()
public int getAge()
public int getTimeReq()
public java.lang.String getPlatform()
public void addImage(Photo newImage)
newImage
- the new Photo to replace this item's picturepublic android.graphics.Bitmap getImage()
public boolean hasImage()
public java.lang.String toString()
toString
in class java.lang.Object
public boolean equals(java.lang.Object o)
equals
in class java.lang.Object
o
- the ObjectObject.hashCode()
public int hashCode()
hashCode
in class java.lang.Object
Object.equals(java.lang.Object)
public java.lang.Boolean getUpdatedWhenOffline()
public void setUpdatedWhenOffline(java.lang.Boolean updatedWhenOffline)
updatedWhenOffline
-


Generate New Array
Size of Array
5
10
15
20
30
40
50
60
70
80
90
100
Choose Algorithm
Merge Sort
Quick Sort
Heap Sort
Bubble Sort
Selection Sort
Insertion Sort
Linear Search
Binary Search
Speed
0.50x
0.75x
1.00x
2.00x
4.00x
Start!


RAT RACE A film review by Steve Rhodes Copyright 2001 Steve Rhodes RATING (0 TO ****): ***
The opening credits for RAT RACE perfectly serve their purpose of putting the audience into a suitably silly mood. Each of the movie's long list of stars appears with his or her real head attached to a cartoon figure body that waddles by the titles like a drunk duck.
Working from a wonderfully wacky script by Andy Breckman (SGT. BILKO), director Jerry Zucker (AIRPLANE!) throws in everything but the kitchen sink -- or maybe the sink was there -- in order to make us laugh, and the miracle is that most of it works. Frequently the film falls back on old slapstick gags, but, more often than not, the jokes manage to be funny even you've seen similar moments before. The movie is a delightful throwback to old screwball comedies. There's some funny bathroom humor in the movie, but the majority of the jokes are so clean that they could be in G-rated comedy. (The movie is PG-13.)
The setup is that billionaire hotel owner Donald Sinclair offers six randomly chosen guests in his Las Vegas hotel something with great odds -- one in six to be precise. Each is given a key to a locker in New Mexico in which he has placed two million dollars. The game is incredibly simple. The first one there gets the cash. Sinclair has a bunch of super wealthy gamblers on hand who have placed bets on who will get to the money first. It is "the gambling experience of a lifetime," Sinclair explains. The inspired script has the participants initially not participating. They can't believe it, so nobody moves. It seems as if the race will be a bust without even getting started.
John Cleese, in a small but essential part, hams it up as Sinclair. The film's best subplot has the bored gamblers wagering on a series of crazy things in order to kill the time as they wait for the big race to finish.
ROAD TRIP's Breckin Meyer and Amy Smart play Nick Shaffer and Tracy Faucet. Nick is a lawyer who has never gambled on anything in his life, and Tracy is a daredevil helicopter pilot with whom he hitches a ride.
In the most underutilized pairing, Whoopi Goldberg and Lanei Chapman play a mother and daughter who are going for the gold. The mother is kind of cautious, and the daughter is just the opposite.
Seth Green plays Duane Cody, a guy who is ready to utilize the game's one rule -- "There are no rules." -- to its maximum advantage.
Cuba Gooding Jr. plays a widely loathed football referee who recently became infamous for a bad call on the coin toss. The ref probably needs the money since he may never be able to show his face again on the gridiron.
Jon Lovitz plays a plump man with any equally pudgy family, whom he is willing to put through any amount of grief on the way to capturing the loot. Kathy Najimy, Brody Smith and Jillian Marie play the other family members.
Only Rowan Atkinson, who acts like Mr. Bean channeling Roberto Benigni, is uniformly disappointing. His annoying character, who suffers from narcolepsy, is a klutz. One scene involving a heart could have been eliminated entirely.

The fast paced film has lots of hilarious incidents, large and small, but to mention even their setup would diminish their impact. To be fair the film does run out of gas every now and then, but it just keeps plugging away, happy to run on fumes. "Who Let The Dogs Out" and many other well known songs are used to maximum effect in the film.
As our contestants approach the finish line, every member of the audience will probably have their mental money on one of the teams and their hopes riding on another. The ending is something of a disappointment, but at least it is a surprise.
RAT RACE runs 1:50. It is rated PG-13 for "sexual references, crude humor, partial nudity and language" and would be acceptable for kids around 10 and up.
My son Jeffrey, age 12, thought the film was hilarious and gave it *** 1/2. He thought the acting was good, the story was imaginative and the ending was surprising.
The film opens nationwide in the United States on Friday, August 17, 2001. In the Silicon Valley, it will be showing at the AMC and the Century theaters.
Web: http://www.InternetReviews.com Email<EMAIL_ADDRESS>Want free reviews and weekly movie and video recommendations via Email? Just send me a letter with the word "subscribe" in the subject line.
========== X-RAMR-ID: 29276 X-Language: en X-RT-ReviewID: 244303 X-RT-TitleID: 1108085 X-RT-AuthorID: 1271 X-RT-RatingText: 3/4
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


Planet Mercury passes across the face of the Sun
Mercury has made a rare transit, where the planet passes across the face of the Sun as seen from Earth.
During the transit, Mercury appeared as a dark silhouetted disc against the bright surface of our star.
There are 14 transits in this century; the last before this was in 2016, but the next event will not occur until 2032.
The transit began at 12:35 GMT, when the edge of Mercury appeared to touch the curvature of the Sun.
It ended at 18:04 GMT when the edge of the silhouetted planet appeared to leave the Sun's disc.
Professor Mike Cruise, president of the UK's Royal Astronomical Society (RAS), said: "This is a rare event, and we'll have to wait 13 years until it happens again. Transits are a visible demonstration of how the planets move around the Sun."
The entire event was visible from the eastern US and Canada, the south-western tip of Greenland, most of the Caribbean, Central America, the whole of South America and some of West Africa.
In Europe (including the UK), the Middle East, and most of Africa, the Sun set before the transit ended, and so the latter part of the event was not visible.
In most of the US and Canada, and New Zealand, the transit was in progress as the Sun rose. Observers in eastern Asia, southern and south-eastern Asia, and Australia were not able to see the transit.
Mercury is the smallest and innermost planet in the Solar System.
It completes each orbit around the Sun every 88 days, and passes between the Earth and Sun every 116 days. As the orbit of Mercury around the Sun is tilted compared with the orbit of the Earth around the Sun, the planet normally appears to pass above or below our nearest star.
A transit can only take place when the Earth, Mercury and the Sun are exactly in line in three dimensions.


# Internet of Dingus
Ryan Parsley
Notes:
I hope to demystify the internet of things by creating an example to illustrate all the parts that make it work.
> The Internet of Things (IOT) is the network of physical devices, vehicles, home appliances and other items embedded with electronics, software, sensors, actuators, and connectivity which enables these objects to connect and exchange data. Each thing is uniquely identifiable through its embedded computing system but is able to inter-operate within the existing Internet infrastructure.  So, a thing can be a device, or a car, or an appliance or... well... anything.
 Sensor (input), actuators (output) and connectivity (internet).
Uniquely Identifiable
Able to inter-operate withing the existing internet infrastructure.
* Sensors (Input)
* Actuators (output)
* Uniquely Identifiable
* Connectivity (internet).
* Able to inter-operate withing the existing internet infrastructure. (yes, *that* internet)
Note:
* Sensors can be buttons or components that sense thinks like heat, humidity, light, proximity
* Actuators can be thought of as components that create output. Motors, Speakers, lights, relays.
* Uniquely Identifiable, we need to know which thing we're talking too or hearing from.
* The last two go together. The "thing" needs to be on the internet and not in too novel of a way.
# Enter the dingus
Note:
A dingus is... a kind of a thing. For the rest of this talk, when I say "dingus" I'm talking about this hardware profile.
## A Dingus
![A Dingus](img/dingus.png)
Note:
A dingus has:
* Wifi
* One actuator
* One sensor
The reference dingus is a Huzzah Feather from a company called Adafruit. It's compatible with Arduino, but has wifi built in.
## Internet of Dingus
![Internet of Dingus](img/internetOfDingus.jpg)
## Internet of Dingus
![Internet of Dingus](img/internetOfDingus.jpg)
Note:
3 servers come together to provide a specific piece of the puzzle.
Each dingus only interacts with one of the servers directly.
You don't *need* this level of separation, but I think it helps distil the conversation.
## Drupal backend
* Plain ol' web services
* Decoupled (headless) CMS
* Enables users to register a dingus and add meta data around it.

The de facto way for *things* to talk to each other.
* Publisher(s)
* Subscriber(s)
* Broker
Note:
It's a standard way of enabling publishing and subscribing messages.
If you think about MQTT as chat for things, the broker is the buddy list.
## The Frontend
![Frontend](img/Internet_of_Dingus_view.png)
Note:
The frontend ties together real-time data from MQTT to the less dynamic meta data served via API that Drupal is responsible.
# All this to turn on a light bulb!?
Note:
That's just the start. Any pairing of sensor and actuator works on this system
* Turn on a fan when it gets too hot
* Sound an alarm if the keg gets too light
* Water a plant if it gets too dry
![Internet All The Things](img/internetAllTheThings.png)
## Links
* [Drupal Server](http://iod-server.herokuapp.com/)
* [Frontend Client](https://iod-client.herokuapp.com/)
* [Adafruit's Broker Service](https://io.adafruit.com/ryanparsley/dashboards)
* [Reveal.js (tool I built my slides with)](https://github.com/hakimel/reveal.js)
* [Source of this presentation](https://github.com/RyanParsley/iod-technicallySpeaking)


New number plates enforcement to begin January 2020
Nduka Chiejina (Assistant Editor) and Clinton Njama
The enforcement of the new vehicle number plates will begin on January 1, 2020.
The Joint Tax Board announced this in a communique issued at the end of its 14th meeting in Abuja.
The board said: “The enforcement of the new vehicle number plates shall commence with effect from January 1, 2020, upon the expiration of the one-year period of grace granted for the replacement of old vehicle number plates.”
The communique explained that, in line with the provisions of the Personal Income Tax Act (as amended), the board had mandated the state revenue authorities, under the aegis of the State Joint Revenue Committee, to engage with the relevant authorities of local government councils and all relevant stakeholders to elicit the buy-in on the implementation of the unified sticker/emblem and ultimate eradication of all forms of unauthorised sale of stickers/emblem nationwide.
Read Also: National Identity Card: Gawuna urges mass registrations
The board resolved that states should make every effort to implement the Class ‘A’ driver’s licence and ensure that all motor vehicles, motorcycles and tricycles are duly registered.
The JTB added: “States should ensure that data derived from the registration of motor vehicles, motorcycles and tricycles are regularly uploaded on to the National Vehicle Identification Scheme (NVIS) platform.”


CryptoTracky gathers information through the API of the Exchange (like Bittrex, Binance, Cryptopia) and transforms this for optimal use in CryptoTracky.
CryptoTracky at this points support Bittrex, Binance and Cryptopia and planning to more if there is demand for it.
Used the address found on most pages, LTC is used because the transaction fees are pretty low compared to BTC. If you would like to donate spending most of your money on fees is a bit crazy. Still want to use a different currency just let me know.
Listing a price per second in real-time! gives you the opportunity to see what is really going on. The information on Bittrex listed in the candlestick charts is delayed and sometimes not accurate. It has happened that a buy or sell order was executed while in the charts a CryptoCurrency never hit the exact number. This happens because the candlestick chart's interval can only be set to a minute as the shortest time interval, never ever really displaying the maximum or minimum price of the CryptoCurrency at that time.


Note
Click here to download the full example code
Get Started with TVM¶
Author: Tianqi Chen
This is an introduction tutorial to TVM. TVM is a domain specific language for efficient kernel construction.
In this tutorial, we will demonstrate the basic workflow in TVM.
from __future__ import absolute_import, print_function
import tvm
import numpy as np
# Global declarations of environment.
tgt_host="llvm"
# Change it to respective GPU if gpu is enabled Ex: cuda, opencl
tgt="cuda"
Vector Add Example¶
In this tutorial, we will use a vector addition example to demonstrate the workflow.
Describe the Computation¶
As a first step, we need to describe our computation. TVM adopts tensor semantics, with each intermediate result represented as multi-dimensional array. The user need to describe the computation rule that generate the tensors.
We first define a symbolic variable n to represent the shape. We then define two placeholder Tensors, A and B, with given shape (n,)
We then describe the result tensor C, with a compute operation. The compute function takes the shape of the tensor, as well as a lambda function that describes the computation rule for each position of the tensor.
No computation happens during this phase, as we are only declaring how the computation should be done.
n = tvm.var("n")
A = tvm.placeholder((n,), name='A')
B = tvm.placeholder((n,), name='B')
C = tvm.compute(A.shape, lambda i: A[i] + B[i], name="C")
print(type(C))
Schedule the Computation¶
While the above lines describes the computation rule, we can compute C in many ways since the axis of C can be computed in data parallel manner. TVM asks user to provide a description of computation called schedule.
A schedule is a set of transformation of computation that transforms the loop of computations in the program.
After we construct the schedule, by default the schedule computes C in a serial manner in a row-major order.
for (int i = 0; i < n; ++i) {
C[i] = A[i] + B[i];
}
s = tvm.create_schedule(C.op)
We used the split construct to split the first axis of C, this will split the original iteration axis into product of two iterations. This is equivalent to the following code.
for (int bx = 0; bx < ceil(n / 64); ++bx) {
for (int tx = 0; tx < 64; ++tx) {
int i = bx * 64 + tx;
if (i < n) {
C[i] = A[i] + B[i];
}
}
}
bx, tx = s[C].split(C.op.axis[0], factor=64)
Finally we bind the iteration axis bx and tx to threads in the GPU compute grid. These are GPU specific constructs that allows us to generate code that runs on GPU.
if tgt == "cuda":
s[C].bind(bx, tvm.thread_axis("blockIdx.x"))
s[C].bind(tx, tvm.thread_axis("threadIdx.x"))
Compilation¶
After we have finished specifying the schedule, we can compile it into a TVM function. By default TVM compiles into a type-erased function that can be directly called from python side.
In the following line, we use tvm.build to create a function. The build function takes the schedule, the desired signature of the function(including the inputs and outputs) as well as target language we want to compile to.
The result of compilation fadd is a GPU device function(if GPU is involved) that can as well as a host wrapper that calls into the GPU function. fadd is the generated host wrapper function, it contains reference to the generated device function internally.
fadd = tvm.build(s, [A, B, C], tgt, target_host=tgt_host, name="myadd")
Run the Function¶
The compiled function TVM function is designed to be a concise C API that can be invoked from any languages.
We provide an minimum array API in python to aid quick testing and prototyping. The array API is based on DLPack standard.
We first create a gpu context.
Then tvm.nd.array copies the data to gpu.
fadd runs the actual computation.
asnumpy() copies the gpu array back to cpu and we can use this to verify correctness
ctx = tvm.context(tgt, 0)
n = 1024
a = tvm.nd.array(np.random.uniform(size=n).astype(A.dtype), ctx)
b = tvm.nd.array(np.random.uniform(size=n).astype(B.dtype), ctx)
c = tvm.nd.array(np.zeros(n, dtype=C.dtype), ctx)
fadd(a, b, c)
np.testing.assert_allclose(c.asnumpy(), a.asnumpy() + b.asnumpy())
Inspect the Generated Code¶
You can inspect the generated code in TVM. The result of tvm.build is a tvm Module. fadd is the host module that contains the host wrapper, it also contains a device module for the CUDA (GPU) function.
The following code fetches the device module and prints the content code.
if tgt == "cuda":
dev_module = fadd.imported_modules[0]
print("-----GPU code-----")
print(dev_module.get_source())
else:
print(fadd.get_source())
Note
Code Specialization
As you may noticed, during the declaration, A, B and C both takes the same shape argument n. TVM will take advantage of this to pass only single shape argument to the kernel, as you will find in the printed device code. This is one form of specialization.
On the host side, TVM will automatically generate check code that checks the constraints in the parameters. So if you pass arrays with different shapes into the fadd, an error will be raised.
We can do more specializations. For example, we can write
n = tvm.convert(1024)
instead of n = tvm.var("n")
,
in the computation declaration. The generated function will
only take vectors with length 1024.
Save Compiled Module¶
Besides runtime compilation, we can save the compiled modules into file and load them back later. This is called ahead of time compilation.
The following code first does the following step:
It saves the compiled host module into an object file.
Then it saves the device module into a ptx file.
cc.create_shared calls a env compiler(gcc) to create a shared library
from tvm.contrib import cc
from tvm.contrib import util
temp = util.tempdir()
fadd.save(temp.relpath("myadd.o"))
if tgt == "cuda":
fadd.imported_modules[0].save(temp.relpath("myadd.ptx"))
cc.create_shared(temp.relpath("myadd.so"), [temp.relpath("myadd.o")])
print(temp.listdir())
Note
Module Storage Format
The CPU(host) module is directly saved as a shared library(so). There can be multiple customed format on the device code. In our example, device code is stored in ptx, as well as a meta data json file. They can be loaded and linked seperatedly via import.
Load Compiled Module¶
We can load the compiled module from the file system and run the code. The following code load the host and device module seperatedly and re-link them together. We can verify that the newly loaded function works.
fadd1 = tvm.module.load(temp.relpath("myadd.so"))
if tgt == "cuda":
fadd1_dev = tvm.module.load(temp.relpath("myadd.ptx"))
fadd1.import_module(fadd1_dev)
fadd1(a, b, c)
np.testing.assert_allclose(c.asnumpy(), a.asnumpy() + b.asnumpy())
Pack Everything into One Library¶
In the above example, we store the device and host code seperatedly. TVM also supports export everything as one shared library. Under the hood, we pack the device modules into binary blobs and link them together with the host code. Currently we support packing of Metal, OpenCL and CUDA modules.
fadd.export_library(temp.relpath("myadd_pack.so"))
fadd2 = tvm.module.load(temp.relpath("myadd_pack.so"))
fadd2(a, b, c)
np.testing.assert_allclose(c.asnumpy(), a.asnumpy() + b.asnumpy())
Note
Runtime API and Thread-Safety
The compiled modules of TVM do not depend on the TVM compiler. Instead, it only depends on a minimum runtime library. TVM runtime library wraps the device drivers and provides thread-safe and device agnostic call into the compiled functions.
This means you can call the compiled TVM function from any thread, on any GPUs.
Generate OpenCL Code¶
TVM provides code generation features into multiple backends, we can also generate OpenCL code or LLVM code that runs on CPU backends.
The following codeblocks generate opencl code, creates array on opencl device, and verifies the correctness of the code.
if tgt == "opencl":
fadd_cl = tvm.build(s, [A, B, C], "opencl", name="myadd")
print("------opencl code------")
print(fadd_cl.imported_modules[0].get_source())
ctx = tvm.cl(0)
n = 1024
a = tvm.nd.array(np.random.uniform(size=n).astype(A.dtype), ctx)
b = tvm.nd.array(np.random.uniform(size=n).astype(B.dtype), ctx)
c = tvm.nd.array(np.zeros(n, dtype=C.dtype), ctx)
fadd_cl(a, b, c)
np.testing.assert_allclose(c.asnumpy(), a.asnumpy() + b.asnumpy())
Summary¶
This tutorial provides a walk through of TVM workflow using a vector add example. The general workflow is
Describe your computation via series of operations.
Describe how we want to compute use schedule primitives.
Compile to the target function we want.
Optionally, save the function to be loaded later.
You are more than welcomed to checkout other examples and tutorials to learn more about the supported operations, schedule primitives and other features in TVM.
Total running time of the script: ( 0 minutes 0.000 seconds)


A problem solver a coder and an opportunist. Always looking forward to good projects. Engineer in making.
Taught Computer Science to students appearing for (10+2) exams. Introduced them to concepts of OOPs and taught Java Programming. Taught the art of programming and problem solving.
GPA: 7.5
Percentage: 91%
Percentage: 85%
Apart from coding, I enjoy most of my time reading about new achievements in Machine Learning & Android Development on Medium.
When forced indoors, I follow a number of sci-fi and fantasy genre movies and television shows, a huge fan of Marvel Cinematic Universe.


<<<<<<< HEAD ======= <<<<<<< HEAD >>>>>>> c5a9556fafce9bc142b085491cecf01aaaf9aa88 ======= >>>>>>> 28451bb251bd2647c3b7884e66c41566544ef8bf >>>>>>> b2c53944c8045af815bb72f49bece4ac6b87654f


Please take a look around to find out more about me, my skills, and some projects I've worked on.
Do you have any projects I can help you with?
Contact MeI'm an engineer who's always interested in the inner workings of a piece of equipment. I love to troubleshoot, improve, and create designs to develop and integrate the latest technologies with increased performance or functionality. I continually look to improve my technical knowledge, which drove me to pursue software and web development as a means of approaching design from a new perspective and diving into a deep pool of ever expanding technologies.
I thrive in a team environment by leading by example through hard work and patience. I demonstrated project management skills as a mechanical project engineer, quality engineer, and most recently as team-lead on a mobile application project. I bring an engineering mindset and project management expertise to my future endeavors. I have experience solving complex problems by collecting information and measuring performance characteristics, analyzing data, implementing corrective/preventitive actions and ensuring the problem is solved.
I like to travel when I can as visiting new places and meeting new people really expands your viewpoint. I also enjoy jogging (after I'm done), skiing (mostly falling) and spicy food. I'm also an avid hockey fan who loves to watch and play 'Go Sharks'!
These are just a few examples of projects I've built and experience. Please visit my LinkedIn and GitHub profile for more information or contact me below.


Behance solves the problem of organizing, searching, and displaying designer and artist portfolios. To do this effectively a lot of meta data about each project has to be displayed attractively and succinctly. I believe they have accomplished this difficulty with the judicious use of filters, views, categories, and buttons while also encouraging others to join the community as well.


Fortinet - Network Security Expert
A free professional certification
Fortinet NSE is the program designed for technical professionals who has four levels, but now the first level of certification is for free.
All you must to do is join the program, watch the videos and do some quiz.
The content of NSE1 is basically abording ethical hacking and threat landscape.
Join the program by clicking here


Education
2012
2017
Massachusetts Institute of Technology
Cambridge, MA
GPA: 4.5/5.0
Leadership + Work Experience
Projects