SparkR (R on Spark)
- Overview
- SparkDataFrame
- Machine Learning
- Data type mapping between R and Spark
- Structured Streaming
- R Function Name Conflicts
- Migration Guide
Overview
SparkR is an R package that provides a light-weight frontend to use Apache Spark from R. In Spark 2.3.0, SparkR provides a distributed data frame implementation that supports operations like selection, filtering, aggregation etc. (similar to R data frames, dplyr) but on large datasets. SparkR also supports distributed machine learning using MLlib.
SparkDataFrame
A SparkDataFrame is a distributed collection of data organized into named columns. It is conceptually equivalent to a table in a relational database or a data frame in R, but with richer optimizations under the hood. SparkDataFrames can be constructed from a wide array of sources such as: structured data files, tables in Hive, external databases, or existing local R data frames.
All of the examples on this page use sample data included in R or the Spark distribution and can be run using the ./bin/sparkR
shell.
Starting Up: SparkSession
The entry point into SparkR is the SparkSession
which connects your R program to a Spark cluster.
You can create a SparkSession
using sparkR.session
and pass in options such as the application name, any spark packages depended on, etc. Further, you can also work with SparkDataFrames via SparkSession
. If you are working from the sparkR
shell, the SparkSession
should already be created for you, and you would not need to call sparkR.session
.
Starting Up from RStudio
You can also start SparkR from RStudio. You can connect your R program to a Spark cluster from
RStudio, R shell, Rscript or other R IDEs. To start, make sure SPARK_HOME is set in environment
(you can check Sys.getenv),
load the SparkR package, and call sparkR.session
as below. It will check for the Spark installation, and, if not found, it will be downloaded and cached automatically. Alternatively, you can also run install.spark
manually.
In addition to calling sparkR.session
,
you could also specify certain Spark driver properties. Normally these
Application properties and
Runtime Environment cannot be set programmatically, as the
driver JVM process would have been started, in this case SparkR takes care of this for you. To set
them, pass them as you would other configuration properties in the sparkConfig
argument to
sparkR.session()
.
The following Spark driver properties can be set in sparkConfig
with sparkR.session
from RStudio:
| Property Name | Property group | spark-submit equivalent |
|---|---|---|
spark.master |
Application Properties | --master |
spark.yarn.keytab |
Application Properties | --keytab |
spark.yarn.principal |
Application Properties | --principal |
spark.driver.memory |
Application Properties | --driver-memory |
spark.driver.extraClassPath |
Runtime Environment | --driver-class-path |
spark.driver.extraJavaOptions |
Runtime Environment | --driver-java-options |
spark.driver.extraLibraryPath |
Runtime Environment | --driver-library-path |
Creating SparkDataFrames
With a SparkSession
, applications can create SparkDataFrame
s from a local R data frame, from a Hive table, or from other data sources.
From local data frames
The simplest way to create a data frame is to convert a local R data frame into a SparkDataFrame. Specifically we can use as.DataFrame
or createDataFrame
and pass in the local R data frame to create a SparkDataFrame. As an example, the following creates a SparkDataFrame
based using the faithful
dataset from R.
From Data Sources
SparkR supports operating on a variety of data sources through the SparkDataFrame
interface. This section describes the general methods for loading and saving data using Data Sources. You can check the Spark SQL programming guide for more specific options that are available for the built-in data sources.
The general method for creating SparkDataFrames from data sources is read.df
. This method takes in the path for the file to load and the type of data source, and the currently active SparkSession will be used automatically.
SparkR supports reading JSON, CSV and Parquet files natively, and through packages available from sources like Third Party Projects, you can find data source connectors for popular file formats like Avro. These packages can either be added by
specifying --packages
with spark-submit
or sparkR
commands, or if initializing SparkSession with sparkPackages
parameter when in an interactive R shell or from RStudio.
We can see how to use data sources using an example JSON input file. Note that the file that is used here is not a typical JSON file. Each line in the file must contain a separate, self-contained valid JSON object. For more information, please see JSON Lines text format, also called newline-delimited JSON. As a consequence, a regular multi-line JSON file will most often fail.
The data sources API natively supports CSV formatted input files. For more information please refer to SparkR read.df API documentation.
The data sources API can also be used to save out SparkDataFrames into multiple file formats. For example we can save the SparkDataFrame from the previous example
to a Parquet file using write.df
.
From Hive tables
You can also create SparkDataFrames from Hive tables. To do this we will need to create a SparkSession with Hive support which can access tables in the Hive MetaStore. Note that Spark should have been built with Hive support and more details can be found in the SQL programming guide. In SparkR, by default it will attempt to create a SparkSession with Hive support enabled (enableHiveSupport = TRUE
).
SparkDataFrame Operations
SparkDataFrames support a number of functions to do structured data processing. Here we include some basic examples and a complete list can be found in the API docs:
Selecting rows, columns
Grouping, Aggregation
SparkR data frames support a number of commonly used functions to aggregate data after grouping. For example we can compute a histogram of the waiting
time in the faithful
dataset as shown below
In addition to standard aggregations, SparkR supports OLAP cube operators cube
:
and rollup
:
Operating on Columns
SparkR also provides a number of functions that can directly applied to columns for data processing and during aggregation. The example below shows the use of basic arithmetic functions.
Applying User-Defined Function
In SparkR, we support several kinds of User-Defined Functions:
Run a given function on a large dataset using dapply
or dapplyCollect
dapply
Apply a function to each partition of a SparkDataFrame
. The function to be applied to each partition of the SparkDataFrame
and should have only one parameter, to which a data.frame
corresponds to each partition will be passed. The output of function should be a data.frame
. Schema specifies the row format of the resulting a SparkDataFrame
. It must match to data types of returned value.
dapplyCollect
Like dapply
, apply a function to each partition of a SparkDataFrame
and collect the result back. The output of function
should be a data.frame
. But, Schema is not required to be passed. Note that dapplyCollect
can fail if the output of UDF run on all the partition cannot be pulled to the driver and fit in driver memory.
Run a given function on a large dataset grouping by input column(s) and using gapply
or gapplyCollect
gapply
Apply a function to each group of a SparkDataFrame
. The function is to be applied to each group of the SparkDataFrame
and should have only two parameters: grouping key and R data.frame
corresponding to
that key. The groups are chosen from SparkDataFrame
s column(s).
The output of function should be a data.frame
. Schema specifies the row format of the resulting
SparkDataFrame
. It must represent R function’s output schema on the basis of Spark data types. The column names of the returned data.frame
are set by user.
gapplyCollect
Like gapply
, applies a function to each partition of a SparkDataFrame
and collect the result back to R data.frame. The output of the function should be a data.frame
. But, the schema is not required to be passed. Note that gapplyCollect
can fail if the output of UDF run on all the partition cannot be pulled to the driver and fit in driver memory.
Run local R functions distributed using spark.lapply
spark.lapply
Similar to lapply
in native R, spark.lapply
runs a function over a list of elements and distributes the computations with Spark.
Applies a function in a manner that is similar to doParallel
or lapply
to elements of a list. The results of all the computations
should fit in a single machine. If that is not the case they can do something like df <- createDataFrame(list)
and then use
dapply
Running SQL Queries from SparkR
A SparkDataFrame can also be registered as a temporary view in Spark SQL and that allows you to run SQL queries over its data.
The sql
function enables applications to run SQL queries programmatically and returns the result as a SparkDataFrame
.
Machine Learning
Algorithms
SparkR supports the following machine learning algorithms currently:
Classification
spark.logit
:Logistic Regression
spark.mlp
:Multilayer Perceptron (MLP)
spark.naiveBayes
:Naive Bayes
spark.svmLinear
:Linear Support Vector Machine
Regression
spark.survreg
:Accelerated Failure Time (AFT) Survival Model
spark.glm
orglm
:Generalized Linear Model (GLM)
spark.isoreg
:Isotonic Regression
Tree
spark.decisionTree
:Decision Tree for
Regression
and
Classification
spark.gbt
:Gradient Boosted Trees for
Regression
and
Classification
spark.randomForest
:Random Forest for
Regression
and
Classification
Clustering
spark.bisectingKmeans
:Bisecting k-means
spark.gaussianMixture
:Gaussian Mixture Model (GMM)
spark.kmeans
:K-Means
spark.lda
:Latent Dirichlet Allocation (LDA)
Collaborative Filtering
Frequent Pattern Mining
Statistics
spark.kstest
:Kolmogorov-Smirnov Test
Under the hood, SparkR uses MLlib to train the model. Please refer to the corresponding section of MLlib user guide for example code.
Users can call summary
to print a summary of the fitted model, predict to make predictions on new data, and write.ml/read.ml to save/load fitted models.
SparkR supports a subset of the available R formula operators for model fitting, including ‘~’, ‘.’, ‘:’, ‘+’, and ‘-‘.
Model persistence
The following example shows how to save/load a MLlib model by SparkR.
training <- read.df("data/mllib/sample_multiclass_classification_data.txt", source = "libsvm")
# Fit a generalized linear model of family "gaussian" with spark.glm
df_list <- randomSplit(training, c(7,3), 2)
gaussianDF <- df_list[[1]]
gaussianTestDF <- df_list[[2]]
gaussianGLM <- spark.glm(gaussianDF, label ~ features, family = "gaussian")
# Save and then load a fitted MLlib model
modelPath <- tempfile(pattern = "ml", fileext = ".tmp")
write.ml(gaussianGLM, modelPath)
gaussianGLM2 <- read.ml(modelPath)
# Check model summary
summary(gaussianGLM2)
# Check model prediction
gaussianPredictions <- predict(gaussianGLM2, gaussianTestDF)
head(gaussianPredictions)
unlink(modelPath)
Data type mapping between R and Spark
| R | Spark |
|---|---|
| byte | byte |
| integer | integer |
| float | float |
| double | double |
| numeric | double |
| character | string |
| string | string |
| binary | binary |
| raw | binary |
| logical | boolean |
| POSIXct | timestamp |
| POSIXlt | timestamp |
| Date | date |
| array | array |
| list | array |
| env | map |
Structured Streaming
SparkR supports the Structured Streaming API. Structured Streaming is a scalable and fault-tolerant stream processing engine built on the Spark SQL engine. For more information see the R API on the Structured Streaming Programming Guide
R Function Name Conflicts
When loading and attaching a new package in R, it is possible to have a name conflict, where a function is masking another function.
The following functions are masked by the SparkR package:
| Masked function | How to Access |
|---|---|
cov in package:stats |
|
filter in package:stats |
|
sample in package:base |
base::sample(x, size, replace = FALSE, prob = NULL) |
Since part of SparkR is modeled on the dplyr
package, certain functions in SparkR share the same names with those in dplyr
. Depending on the load order of the two packages, some functions from the package loaded first are masked by those in the package loaded after. In such case, prefix such calls with the package name, for instance, SparkR::cume_dist(x)
or dplyr::cume_dist(x)
.
You can inspect the search path in R with search()
Migration Guide
Upgrading From SparkR 1.5.x to 1.6.x
- Before Spark 1.6.0, the default mode for writes was
append
. It was changed in Spark 1.6.0 toerror
to match the Scala API. - SparkSQL converts
NA
in R tonull
and vice-versa.
Upgrading From SparkR 1.6.x to 2.0
- The method
table
has been removed and replaced bytableToDF
. - The class
DataFrame
has been renamed toSparkDataFrame
to avoid name conflicts. - Spark’s
SQLContext
andHiveContext
have been deprecated to be replaced bySparkSession
. Instead ofsparkR.init()
, callsparkR.session()
in its place to instantiate the SparkSession. Once that is done, that currently active SparkSession will be used for SparkDataFrame operations. - The parameter
sparkExecutorEnv
is not supported bysparkR.session
. To set environment for the executors, set Spark config properties with the prefix “spark.executorEnv.VAR_NAME”, for example, “spark.executorEnv.PATH” - The
sqlContext
parameter is no longer required for these functions:createDataFrame
,as.DataFrame
,read.json
,jsonFile
,read.parquet
,parquetFile
,read.text
,sql
,tables
,tableNames
,cacheTable
,uncacheTable
,clearCache
,dropTempTable
,read.df
,loadDF
,createExternalTable
. - The method
registerTempTable
has been deprecated to be replaced bycreateOrReplaceTempView
. - The method
dropTempTable
has been deprecated to be replaced bydropTempView
. - The
sc
SparkContext parameter is no longer required for these functions:setJobGroup
,clearJobGroup
,cancelJobGroup
Upgrading to SparkR 2.1.0
join
no longer performs Cartesian Product by default, usecrossJoin
instead.
Upgrading to SparkR 2.2.0
- A
numPartitions
parameter has been added tocreateDataFrame
andas.DataFrame
. When splitting the data, the partition position calculation has been made to match the one in Scala. - The method
createExternalTable
has been deprecated to be replaced bycreateTable
. Either methods can be called to create external or managed table. Additional catalog methods have also been added. - By default, derby.log is now saved to
tempdir()
. This will be created when instantiating the SparkSession withenableHiveSupport
set toTRUE
. spark.lda
was not setting the optimizer correctly. It has been corrected.- Several model summary outputs are updated to have
coefficients
asmatrix
. This includesspark.logit
,spark.kmeans
,spark.glm
. Model summary outputs forspark.gaussianMixture
have added log-likelihood asloglik
.
Upgrading to SparkR 2.3.0
- The
stringsAsFactors
parameter was previously ignored withcollect
, for example, incollect(createDataFrame(iris), stringsAsFactors = TRUE))
. It has been corrected. - For
summary
, option for statistics to compute has been added. Its output is changed from that fromdescribe
. - A warning can be raised if versions of SparkR package and the Spark JVM do not match.


livingsocial
Businessmodel of LivingSocial
Customer Segments
The LivingSocial platform, as well as providing a service to its network of merchant partners, is targeted at general consumers. According to the Company’s own information, LivingSocial’s audience predominantly comprises affluent, educated, female consumers. Around 70% of its user base, totalling more than 40 million, is female. Approximately 70% are also aged between 25 and 54, while 56% are reported to earn more than $75,00 per year.
The US represents LivingSocial’s largest market, accounting for just under 86% of the Company’s total web traffic. The UK is the Company’s accounts for the second largest segment of user traffic with 7.3%. followed by Ireland and Canada each with around 2%.
LivingSocial also serves a range of brand marketers and advertising agencies through its various advertising and marketing solutions. The Company lists household names such as Starbucks, Visa, Hyundai, Burger King and Champion among its advertising customers.
Value Propositions
LivingSocial’s value to consumers is that it provides a catalogue of varied products and activities all in one place and targeted by locality. The platform makes it easier for users to discover interesting events and offers that are available nearby, often at discounted prices.
The platform can be accessed from anywhere via web browsers and mobile apps, allowing users to make plans and purchases while on the go.
The Company’s marketplace increases the marketing reach of its merchant partners, ultimately increasing their sales revenue. The Company also claims to increase repeat business and referrals for its partners.
According to LivingSocial’s own information, 70% of its consumers plan to return to businesses discovered through the Company’s marketplace, while 55% refer others to local businesses they have visited.
Channels
The LivingSocial marketplace can be accessed through its mobile and desktop websites at www.livingsocial.com. A separate site for merchants is located at www.merchant.livingsocial.com.
The Company also has mobile apps for iOS and Android, which can be found in the Apple App Store or the Google Play marketplace, as well as on the LivingSocial website.
Customer Relationships
For its consumers, the LivingSocial platform is entirely self-service with users able to browse the Company’s catalogue of products and activities and complete purchases all from the LivingSocial website and apps.
Merchant and affiliate partners are able to apply to become part of the LivingSocial network through the Company’s website, following which they are able to negotiate the details of their partnerships directly with LivingSocial representatives.
Similarly advertising customers are able to negotiate deals directly with the Company. LivingSocial customers receive support from the Company via its help site which hosts user guides and FAQs.
The Company also interacts with its customers via its Facebook, Twitter, Pinterest, Instagram and Google+ accounts.
Key Activities
LivingSocial is a technology company that develops and operates an online marketplace that enables users to discover, share and purchase locally-sourced experiences, activities and products.
The Company sells products from third-party merchants across a variety of categories, including from bars and restaurants, events and activities organisers, sports and fitness facilities, health and beauty boutiques, and travel and tour operators.
LivingSocial also provides a range of advertising solutions to major national and international brands, including site-wide advertisements and amplifier advertisements.
Key Partners
LivingSocial manages a network of merchant partners that contribute the products, activities and experiences sold through the Company’s online marketplace. These partners primarily comprise small, local businesses such as restaurants, bars, hotels, travel and tour operators, craft shops and independent retailers.
Merchant partners are not charged any upfront fees, with LivingSocial instead taking a commission on sales made through its online marketplace.
Among LivingSocial’s merchant partners are local restaurants such as the Motor Bar and Restaurant in Milwaukee and the Edge Bar and Restaurant in Denver, local attractions like the Maryland Science Centre and the Day Block Brewing Company in Minneapolis, and national operators such as Delta Airlines.
The Company also operates an affiliate partner program for blogs and websites, through which it provides audience specific daily deals.
Key Resources
LivingSocial’s key resources are its software platform, its IT infrastructure, its network of merchant partners and its personnel. The Company has two patent applications filed with the US Patent and Trademark Office, both of which are titled ‘Ranking interactions between users on the internet’.
Cost Structure
LivingSocial incurs costs relating to the development and operation of its online marketplace, the maintenance of its IT infrastructure, the retention of its personnel and the management of its partnerships.
LivingSocial recently laid off around 280 employees in a bid to reduce costs. These layoffs accounted for between 50% and 60% of the Company’s workforce, which now numbers 200 to 225 employees. LivingSocial has reportedly cut almost 900 jobs since Thakar took over as Chief Executive Officer in 2014.
The Company also operates a network of regional offices which accrue costs in the form of rent and utilities.
Revenue Streams
LivingSocial generates revenue primarily through the sale of vouchers, products and experiences listed on its website. For each sale the Company takes a commission, described by the Company as a marketing fee. The size of these commissions varies from deal to deal, with marketing fee thresholds negotiated with sales representatives directly.
Comments from LivingSocial customers across the internet cite commission rates of between 20% and 50%, with the average rate appearing to be around 30% to 35% of each sale. Merchants receive their share of revenue generated by their products once LivingSocial has deducted its marketing fee. For fiscal year 2014 the Company generated a total of $231 million.
LivingSocial’s secondary revenue stream is advertising. The Company provides a range of advertising solutions to brand marketers and advertising agencies that are negotiated on a deal-by-deal basis.


by Max Scheinin Read more of Max's reviews at http://www.garfieldlib.com/yanews/july97/max/max.html
We see the dorsal fin slide gracefully through the water. It nears the shore. And then we see...red...blood! One more life has been stolen and this cannot happen again. Three brave men must set out into the ocean to kill this monster.
It's a frightening premise, isn't it? Jaws is a movie about a series of killings made by a shark and the men who set out to stop it. Like Steven Spielberg's more recent ( and far inferior ) The Lost World: Jurassic Park, it manipulates you so completely that you often feel as if you could faint ( though you just shudder. TLW: JP, though good, was never so scary. ) Every time I see it it works on some level. It's a wonderfully entertaining mix of crisp dialogue, terrific performances, and first rate direction. ( I have not mentioned the special effects because they are not very special. )
I recently heard that there will probably be a Jaws: Special Edition. Apperantly the shark was never as scary as Mr. Spielberg intended it to be. I don't remember it that way. Technology might be getting better. Movies aren't.  Star Wars is based on a story cycle and so is Jaws. Steven Spielberg knows - as his equally wonderful Raiders Of The Lost Ark shows as well - that you can't substitute effects for a script and dialogue for a character. He is a great director - the best of any kind to do this sort of movie. ( Close runner-up: James Cameron. ) Jaws is - as a friend of mine pointed out - not so much a summer blockbuster as a Hitchcock thriller.
Examine it again. The entire film is so smashingly scary and wonderfully engaging that it would take alot of effort not to be totally enthralled. Take another look at the scene in which a main character goes undewater to examine something which may or may not be important. The direction is as elegant and the editing as crisp as in, for example, the climax of Strangers On A Train. You are never allowed the relief of looking away from the screen. When, at the end, you see an image as frightening as the horse's head in The Godfather - on the other hand this is a shark eating a man - you might want to close your eyes. But you can't. It's a nightmarish image and, in some sick way, it holds your attention relentlessly. Mr. Spielberg has learned the most important of cinematic tricks: if you make hints, to the audience, of what is going to happen - in other words, make them apprehensive in advance - and then carefully build layer upon layer of unbearable suspense, when it does happen it will be all the more frightening. He also knows that - with rare exceptions - images can not live up to our fears and beliefs. ( In the original trailer for Psycho there is a scene in which our host, Alfred Hitchcock, is exploring mother's room. He opens a closet door and looks in with a half suprised expression. He looks at the camera and slowly closes the door. "Shall we go on?", he asks. Nothing more is said on the subject. What is in that closet? ) He often cuts away when we want to look most. This only makes us want to see more. I am anxious to see Jaws on a big screen; even with out that extra element it's a masterpiece.
In both Jurassic Park films Spielberg showed us the dinos good and quick. Yeah, they were amazing. But if he had remembered what he learned while making Jaws - our imagination is more powerful then his camera - then he could have made two more great films.
Jaws: A+ Jurassic Park: C+ The Lost World: Jurassic Park: B+
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


{% extends 'core.html' %} {% load i18n %} {% load ahmia_custom %} {% load static %} {% block title %}{% trans "Add a hidden service" %} — Ahmia{% endblock %} {% block extra_js %} {% is_development_environment as is_dev %} {% if is_dev %} {% else %} {% endif %} {% endblock %} {% block body %}
{% blocktrans %} Add your site to the Ahmia index to help us learn more about hidden services. Adding your onion will allow users of Ahmia to find your hidden service and its content. Please do not add child abuse material; it will not be indexed and your hidden service will be blacklisted. {% endblocktrans %}
Info about hidden service indexing and crawling : Indexing
Ahmia blacklists child abuse content : Blacklist
{% trans "3LCFqc9NfMwNJA6TrudgHVdpfwxhn4JadY" as bitcoin_address %} {% blocktrans %} We extend a thank you to Ahmia's supporters. Bitcoin address: {{ bitcoin_address }}.
{% endblocktrans %}


The text layer is an optional, invisible layer above the PDF document, which is rendered as an image. You need it to
By default, the text layer is switched off in order to render the document faster. The drawback is that both the find menu and the select tool are disabled until you activate the text layer.
Demos:

into a boxThe demos show that the text layer isn't perfect. The positions are good enough for finding and marking text, but
they don't match the precise positions. Plus, sometime words are spread among several
tags.


 Engage your clients through compelling visuals that do
most of the marketing for you.
Learn more
Stand out to the right audience
Using a collaborative formula of designers, researchers,
photographers, videographers, and copywriters, we’ll build and
extend your brand in digital places.
Learn more
Graphic design
Great design makes you memorable. We deliver artwork that
underscores your brand message and captures potential clients’
attention.
Photography
Increase your credibility by getting the most stunning, high-quality
photos that improve your business image.


Before Change
subg_seeds = subg.map_to_subgraph_nid(seeds)
with mx.autograd.record():
logits = model_train(subg, subg_seeds.tousertensor())
batch_labels = mx.nd.array(labels[seeds.asnumpy()], ctx=logits.context)
loss = mx.nd.softmax_cross_entropy(logits, batch_labels)
loss.backward()
losses.append(loss)
After Change
rets = []
rets.append(all_hidden)
if args.neigh_expand <= 0:
neigh_expand = g.number_of_nodes()
else:
neigh_expand = args.neigh_expand
// initialize graph
dur = []
sampler = dgl.contrib.sampling.NeighborSampler(g, args.batch_size, neigh_expand,
neighbor_type="in", num_workers=args.num_parallel_subgraphs, seed_nodes=train_vs,
shuffle=True)


Bengaluru city has more than 12 thousand kilometers of roads within the BBMP limits, out of which 2 thousand kilometers are considered major roads. Safety for bicycles involves keeping them segregated from traffic on these corridors; most of which will need retrofitting of bicycle lanes on the carriageway. In order for bicycle lanes to be successful, they need to be physically segregated and yet allow water drainage via the curb drains. The barricades used for the purpose of physical segregation must allow visibility and prevent trespassing by motor vehicles. Apart from ensuring segregation and safety, they also need to be aesthetically-pleasing, and cost-wise, economical.
To design a visible barricade for cycle lanes which has a low footprint, is attractive and easy to install, prevents trespassing by motor vehicles, and ensures safety of cyclists. We are looking for turnkey solutions which include design, fabrication and installation.
You can be a product designer, architect, urban planner, civil engineer, professional, student, non profit or a company. If you do not bring all the skills needed to provide a turnkey solution please form a consortium before applying.
The selected design and prototype will be taken up and funded for implementation on a pilot stretch of one kilometer.
| Parameter | Description | Weightage |
|---|---|---|
| Design |
|
20% |
| Functionality |
|
20% |
| Deployability |
|
20% |
| Green points |
|
20% |
| Cost |
|
20% |


Installation OverviewNew SGI systems come pre-installed with a modern version of IRIX. Every three months, SGI releases a new IRIX 6.5.X update with which you can easily install or upgrade most SGI platforms. If you are new to IRIX 6.5.X, the following sections may be of interest to you: If you are new to IRIX 6.5, the following sections may also be of interest to you: If you are new to SGI and IRIX, the following sections may also be of interest to you: You may find the following links useful as well: |