Rails 2.3 delivers a variety of new and improved features, including pervasive Rack integration, refreshed support for Rails Engines, nested transactions for Active Record, dynamic and default scopes, unified rendering, more efficient routing, application templates, and quiet backtraces. This list covers the major upgrades, but doesn’t include every little bug fix and change. If you want to see everything, check out the list of commits in the main Rails repository on GitHub or review the CHANGELOG
files for the individual Rails components.
There are two major changes in the architecture of Rails applications: complete integration of the Rack modular web server interface, and renewed support for Rails Engines.
Rails has now broken with its CGI past, and uses Rack everywhere. This required and resulted in a tremendous number of internal changes (but if you use CGI, don’t worry; Rails now supports CGI through a proxy interface.) Still, this is a major change to Rails internals. After upgrading to 2.3, you should test on your local environment and your production environment. Some things to test:
Here’s a summary of the rack-related changes:
script/server
has been switched to use Rack, which means it supports any Rack compatible server. script/server
will also pick up a rackup configuration file if one exists. By default, it will look for a config.ru
file, but you can override this with the -c
switch.ActionController::Dispatcher
maintains its own default middleware stack. Middlewares can be injected in, reordered, and removed. The stack is compiled into a chain on boot. You can configure the middleware stack in environment.rb
.rake middleware
task has been added to inspect the middleware stack. This is useful for debugging the order of the middleware stack.ActionController::CGIHandler
is a backwards compatible CGI wrapper around Rack. The CGIHandler
is meant to take an old CGI object and convert its environment information into a Rack compatible form.CgiRequest
and CgiResponse
have been removed.CGI::Cookie.new
in your tests for setting a cookie value. Assigning a String
value to request.cookies[“foo”] now sets the cookie as expected.CGI::Session::CookieStore
has been replaced by ActionController::Session::CookieStore
.CGI::Session::MemCacheStore
has been replaced by ActionController::Session::MemCacheStore
.CGI::Session::ActiveRecordStore
has been replaced by ActiveRecord::SessionStore
.ActionController::Base.session_store = :active_record_store
.ActionController::Base.session = { :key => "..." }
. However, the :session_domain
option has been renamed to :domain
.ActionController::Lock
.ActionController::AbstractRequest
and ActionController::Request
have been unified. The new ActionController::Request
inherits from Rack::Request
. This affects access to response.headers['type']
in test requests. Use response.content_type
instead.ActiveRecord::QueryCache
middleware is automatically inserted onto the middleware stack if ActiveRecord
has been loaded. This middleware sets up and flushes the per-request Active Record query cache.SomeController.call(env)
. The router stores the routing parameters in rack.routing_args
.ActionController::Request
inherits from Rack::Request
.config.action_controller.session = { :session_key => 'foo', ...
use config.action_controller.session = { :key => 'foo', ...
.ParamsParser
middleware preprocesses any XML, JSON, or YAML requests so they can be read normally with any Rack::Request
object after it.After some versions without an upgrade, Rails 2.3 offers some new features for Rails Engines (Rails applications that can be embedded within other applications). First, routing files in engines are automatically loaded and reloaded now, just like your routes.rb file (this also applies to routing files in other plugins). Second, if your plugin has an app folder, then app/[models |
controllers | helpers] will automatically be added to the Rails load path. Engines also support adding view paths now, and Action Mailer as well as Action View will use views from engines and other plugins. |
The Ruby on Rails guides project has published several additional guides for Rails 2.3. In addition, a separate site maintains updated copies of the Guides for Edge Rails. Other documentation efforts include a relaunch of the Rails wiki and early planning for a Rails Book.
Rails 2.3 should pass all of its own tests whether you are running on Ruby 1.8 or the now-released Ruby 1.9.1. You should be aware, though, that moving to 1.9.1 entails checking all of the data adapters, plugins, and other code that you depend on for Ruby 1.9.1 compatibility, as well as Rails core.
Active Record gets quite a number of new features and bug fixes in Rails 2.3. The highlights include nested attributes, nested transactions, dynamic and default scopes, and batch processing.
Active Record can now update the attributes on nested models directly, provided you tell it to do so:
class Book < ActiveRecord::Base has_one :author has_many :pages accepts_nested_attributes_for :author, :pages end
Turning on nested attributes enables a number of things: automatic (and atomic) saving of a record together with its associated children, child-aware validations, and support for nested forms (discussed later).
You can also specify requirements for any new records that are added via nested attributes using the :reject_if
option:
accepts_nested_attributes_for :author, :reject_if => proc { |attributes| attributes['name'].blank? }
Active Record now supports nested transactions, a much-requested feature. Now you can write code like this:
User.transaction do User.create(:username => 'Admin') User.transaction(:requires_new => true) do User.create(:username => 'Regular') raise ActiveRecord::Rollback end end User.find(:all) # => Returns only Admin
Nested transactions let you roll back an inner transaction without affecting the state of the outer transaction. If you want a transaction to be nested, you must explicitly add the :requires_new
option; otherwise, a nested transaction simply becomes part of the parent transaction (as it does currently on Rails 2.2). Under the covers, nested transactions are using savepoints so they’re supported even on databases that don’t have true nested transactions. There is also a bit of magic going on to make these transactions play well with transactional fixtures during testing.
You know about dynamic finders in Rails (which allow you to concoct methods like find_by_color_and_flavor
on the fly) and named scopes (which allow you to encapsulate reusable query conditions into friendly names like currently_active
). Well, now you can have dynamic scope methods. The idea is to put together syntax that allows filtering on the fly and method chaining. For example:
Order.scoped_by_customer_id(12) Order.scoped_by_customer_id(12).find(:all, :conditions => "status = 'open'") Order.scoped_by_customer_id(12).scoped_by_status("open")
There’s nothing to define to use dynamic scopes: they just work.
Rails 2.3 will introduce the notion of default scopes similar to named scopes, but applying to all named scopes or find methods within the model. For example, you can write default_scope :order => 'name ASC'
and any time you retrieve records from that model they’ll come out sorted by name (unless you override the option, of course).
You can now process large numbers of records from an Active Record model with less pressure on memory by using find_in_batches
:
Customer.find_in_batches(:conditions => {:active => true}) do |customer_group| customer_group.each { |customer| customer.update_account_balance! } end
You can pass most of the find
options into find_in_batches
. However, you cannot specify the order that records will be returned in (they will always be returned in ascending order of primary key, which must be an integer), or use the :limit
option. Instead, use the :batch_size
option, which defaults to 1000, to set the number of records that will be returned in each batch.
The new find_each
method provides a wrapper around find_in_batches
that returns individual records, with the find itself being done in batches (of 1000 by default):
Customer.find_each do |customer| customer.update_account_balance! end
Note that you should only use this method for batch processing: for small numbers of records (less than 1000), you should just use the regular find methods with your own loop.
each
):
When using Active Record callbacks, you can now combine :if
and :unless
options on the same callback, and supply multiple conditions as an array:
before_save :update_credit_rating, :if => :active, :unless => [:admin, :cash_only]
Rails now has a :having
option on find (as well as on has_many
and has_and_belongs_to_many
associations) for filtering records in grouped finds. As those with heavy SQL backgrounds know, this allows filtering based on grouped results:
developers = Developer.find(:all, :group => "salary", :having => "sum(salary) > 10000", :select => "salary")
MySQL supports a reconnect flag in its connections - if set to true, then the client will try reconnecting to the server before giving up in case of a lost connection. You can now set reconnect = true
for your MySQL connections in database.yml
to get this behavior from a Rails application. The default is false
, so the behavior of existing applications doesn’t change.
AS
was removed from the generated SQL for has_and_belongs_to_many
preloading, making it work better for some databases.ActiveRecord::Base#new_record?
now returns false
rather than nil
when confronted with an existing record.has_many :through
associations was fixed.updated_at
timestamps: cust = Customer.create(:name => "ABC Industries", :updated_at => 1.day.ago)
find_by_attribute!
calls.to_xml
support gets just a little bit more flexible with the addition of a :camelize
option.before_update
or before_create
was fixed.validates_length_of
will use a custom error message with the :in
or :within
options (if one is supplied).Account.scoped(:select => "DISTINCT credit_limit").count
.ActiveRecord::Base#invalid?
now works as the opposite of ActiveRecord::Base#valid?
.Action Controller rolls out some significant changes to rendering, as well as improvements in routing and other areas, in this release.
ActionController::Base#render
is a lot smarter about deciding what to render. Now you can just tell it what to render and expect to get the right results. In older versions of Rails, you often need to supply explicit information to render:
render :file => '/tmp/random_file.erb' render :template => 'other_controller/action' render :action => 'show'
Now in Rails 2.3, you can just supply what you want to render:
render '/tmp/random_file.erb' render 'other_controller/action' render 'show' render :show
Rails chooses between file, template, and action depending on whether there is a leading slash, an embedded slash, or no slash at all in what’s to be rendered. Note that you can also use a symbol instead of a string when rendering an action. Other rendering styles (:inline
, :text
, :update
, :nothing
, :json
, :xml
, :js
) still require an explicit option.
If you’re one of the people who has always been bothered by the special-case naming of application.rb
, rejoice! It’s been reworked to be application_controller.rb in Rails 2.3. In addition, there’s a new rake task, rake rails:update:application_controller
to do this automatically for you - and it will be run as part of the normal rake rails:update
process.
Rails now has built-in support for HTTP digest authentication. To use it, you call authenticate_or_request_with_http_digest
with a block that returns the user’s password (which is then hashed and compared against the transmitted credentials):
class PostsController < ApplicationController Users = {"dhh" => "secret"} before_filter :authenticate def secret render :text => "Password Required!" end private def authenticate realm = "Application" authenticate_or_request_with_http_digest(realm) do |name| Users[name] end end end
There are a couple of significant routing changes in Rails 2.3. The formatted_
route helpers are gone, in favor just passing in :format
as an option. This cuts down the route generation process by 50% for any resource - and can save a substantial amount of memory (up to 100MB on large applications). If your code uses the formatted_
helpers, it will still work for the time being - but that behavior is deprecated and your application will be more efficient if you rewrite those routes using the new standard. Another big change is that Rails now supports multiple routing files, not just routes.rb
. You can use RouteSet#add_configuration_file
to bring in more routes at any time - without clearing the currently-loaded routes. While this change is most useful for Engines, you can use it in any application that needs to load routes in batches.
A big change pushed the underpinnings of Action Controller session storage down to the Rack level. This involved a good deal of work in the code, though it should be completely transparent to your Rails applications (as a bonus, some icky patches around the old CGI session handler got removed). It’s still significant, though, for one simple reason: non-Rails Rack applications have access to the same session storage handlers (and therefore the same session) as your Rails applications. In addition, sessions are now lazy-loaded (in line with the loading improvements to the rest of the framework). This means that you no longer need to explicitly disable sessions if you don’t want them; just don’t refer to them and they won’t load.
There are a couple of changes to the code for handling MIME types in Rails. First, MIME::Type
now implements the =~
operator, making things much cleaner when you need to check for the presence of a type that has synonyms:
if content_type && Mime::JS =~ content_type # do something cool end Mime::JS =~ "text/javascript" => true Mime::JS =~ "application/javascript" => true
The other change is that the framework now uses the Mime::JS
when checking for JavaScript in various spots, making it handle those alternatives cleanly.
respond_to
In some of the first fruits of the Rails-Merb team merger, Rails 2.3 includes some optimizations for the respond_to
method, which is of course heavily used in many Rails applications to allow your controller to format results differently based on the MIME type of the incoming request. After eliminating a call to method_missing
and some profiling and tweaking, we’re seeing an 8% improvement in the number of requests per second served with a simple respond_to
that switches between three formats. The best part? No change at all required to the code of your application to take advantage of this speedup.
Rails now keeps a per-request local cache of read from the remote cache stores, cutting down on unnecessary reads and leading to better site performance. While this work was originally limited to MemCacheStore
, it is available to any remote store than implements the required methods.
Rails can now provide localized views, depending on the locale that you have set. For example, suppose you have a Posts
controller with a show
action. By default, this will render app/views/posts/show.html.erb
. But if you set I18n.locale = :da
, it will render app/views/posts/show.da.html.erb
. If the localized template isn’t present, the undecorated version will be used. Rails also includes I18n#available_locales
and I18n::SimpleBackend#available_locales
, which return an array of the translations that are available in the current Rails project.
In addition, you can use the same scheme to localize the rescue files in the public
directory: public/500.da.html
or public/404.en.html
work, for example.
A change to the translation API makes things easier and less repetitive to write key translations within partials. If you call translate(".foo")
from the people/index.html.erb
template, you’ll actually be calling I18n.translate("people.index.foo")
If you don’t prepend the key with a period, then the API doesn’t scope, just as before.
send_file
.ActionController::Base.ip_spoofing_check = false
to disable the check entirely.ActionController::Dispatcher
now implements its own middleware stack, which you can see by running rake middleware
.:type
option of send_file
and send_data
, like this: send_file("fabulous.png", :type => :png)
.:only
and :except
options for map.resources
are no longer inherited by nested resources.expires_in
, stale?
, and fresh_when
methods now accept a :public
option to make them work well with proxy caching.:requirements
option now works properly with additional RESTful member routes.polymorphic_url
does a better job of handling objects with irregular plural names.Action View in Rails 2.3 picks up nested model forms, improvements to render
, more flexible prompts for the date select helpers, and a speedup in asset caching, among other things.
Provided the parent model accepts nested attributes for the child objects (as discussed in the Active Record section), you can create nested forms using form_for
and field_for
. These forms can be nested arbitrarily deep, allowing you to edit complex object hierarchies on a single view without excessive code. For example, given this model:
class Customer < ActiveRecord::Base has_many :orders accepts_nested_attributes_for :orders, :allow_destroy => true end
You can write this view in Rails 2.3:
~~~html+erb <% form_for @customer do |customer_form| %>
<% customer_form.fields_for :orders do |order_form| %> <p> <div> <%= order_form.label :number, ‘Order Number:’ %> <%= order_form.text_field :number %> </div>
<% unless order_form.object.new_record? %> <div> <%= order_form.label :_delete, ‘Remove:’ %> <%= order_form.check_box :_delete %> </div> <% end %> </p> <% end %>
<%= customer_form.submit %> <% end %> ~~~
The render method has been getting smarter over the years, and it’s even smarter now. If you have an object or a collection and an appropriate partial, and the naming matches up, you can now just render the object and things will work. For example, in Rails 2.3, these render calls will work in your view (assuming sensible naming):
# Equivalent of render :partial => 'articles/_article', # :object => @article render @article # Equivalent of render :partial => 'articles/_article', # :collection => @articles render @articles
In Rails 2.3, you can supply custom prompts for the various date select helpers (date_select
, time_select
, and datetime_select
), the same way you can with collection select helpers. You can supply a prompt string or a hash of individual prompt strings for the various components. You can also just set :prompt
to true
to use the custom generic prompt:
select_datetime(DateTime.now, :prompt => true) select_datetime(DateTime.now, :prompt => "Choose date and time") select_datetime(DateTime.now, :prompt => {:day => 'Choose day', :month => 'Choose month', :year => 'Choose year', :hour => 'Choose hour', :minute => 'Choose minute'})
You’re likely familiar with Rails’ practice of adding timestamps to static asset paths as a “cache buster.” This helps ensure that stale copies of things like images and stylesheets don’t get served out of the user’s browser cache when you change them on the server. You can now modify this behavior with the cache_asset_timestamps
configuration option for Action View. If you enable the cache, then Rails will calculate the timestamp once when it first serves an asset, and save that value. This means fewer (expensive) file system calls to serve static assets - but it also means that you can’t modify any of the assets while the server is running and expect the changes to get picked up by clients.
Asset hosts get more flexible in edge Rails with the ability to declare an asset host as a specific object that responds to a call. This allows you to implement any complex logic you need in your asset hosting.
Action View already had a bunch of helpers to aid in generating select controls, but now there’s one more: grouped_options_for_select
. This one accepts an array or hash of strings, and converts them into a string of option
tags wrapped with optgroup
tags. For example:
grouped_options_for_select([["Hats", ["Baseball Cap","Cowboy Hat"]]], "Cowboy Hat", "Choose a product...")
returns
<option value="">Choose a product...</option> <optgroup label="Hats"> <option value="Baseball Cap">Baseball Cap</option> <option selected="selected" value="Cowboy Hat">Cowboy Hat</option> </optgroup>
The form select helpers (such as select
and options_for_select
) now support a :disabled
option, which can take a single value or an array of values to be disabled in the resulting tags:
select(:post, :category, Post::CATEGORIES, :disabled => 'private')
returns
<select name=“post[category]“> <option>story</option> <option>joke</option> <option>poem</option> <option disabled=“disabled“>private</option> </select>
You can also use an anonymous function to determine at runtime which options from collections will be selected and/or disabled:
<EMAIL_ADDRESS>:name, :id, :disabled => lambda{|size| size.out_of_stock?})
Rails 2.3 includes the ability to enable or disable cached templates for any particular environment. Cached templates give you a speed boost because they don’t check for a new template file when they’re rendered - but they also mean that you can’t replace a template “on the fly” without restarting the server.
In most cases, you’ll want template caching to be turned on in production, which you can do by making a setting in your production.rb
file:
config.action_view.cache_template_loading = true
This line will be generated for you by default in a new Rails 2.3 application. If you’ve upgraded from an older version of Rails, Rails will default to caching templates in production and test but not in development.
ActiveSupport::SecureRandom
rather than mucking around with session IDs.auto_link
now properly applies options (such as :target
and :class
) to generated e-mail links.autolink
helper has been refactored to make it a bit less messy and more intuitive.current_page?
now works properly even when there are multiple query parameters in the URL.Active Support has a few interesting changes, including the introduction of Object#try
.
A lot of folks have adopted the notion of using try() to attempt operations on objects. It’s especially helpful in views where you can avoid nil-checking by writing code like <%= @person.try(:name) %>
. Well, now it’s baked right into Rails. As implemented in Rails, it raises NoMethodError
on private methods and always returns nil
if the object is nil.
Object#tap
is an addition to Ruby 1.9 and 1.8.7 that is similar to the returning
method that Rails has had for a while: it yields to a block, and then returns the object that was yielded. Rails now includes code to make this available under older versions of Ruby as well.
The support for XML parsing in Active Support has been made more flexible by allowing you to swap in different parsers. By default, it uses the standard REXML implementation, but you can easily specify the faster LibXML or Nokogiri implementations for your own applications, provided you have the appropriate gems installed:
XmlMini.backend = 'LibXML'
The Time
and TimeWithZone
classes include an xmlschema
method to return the time in an XML-friendly string. As of Rails 2.3, TimeWithZone
supports the same argument for specifying the number of digits in the fractional second part of the returned string that Time
does:
>> Time.zone.now.xmlschema(6) => "2009-01-16T13:00:06.13653Z"
If you look up the spec on the “json.org” site, you’ll discover that all keys in a JSON structure must be strings, and they must be quoted with double quotes. Starting with Rails 2.3, we do the right thing here, even with numeric keys.
Enumerable#none?
to check that none of the elements match the supplied block.:allow_nil
option lets you return nil
instead of raising an exception when the target object is nil.ActiveSupport::OrderedHash
: now implements each_key
and each_value
.ActiveSupport::MessageEncryptor
provides a simple way to encrypt information for storage in an untrusted location (like cookies).from_xml
no longer depends on XmlSimple. Instead, Rails now includes its own XmlMini implementation, with just the functionality that it requires. This lets Rails dispense with the bundled copy of XmlSimple that it’s been carting around.String#parameterize
accepts an optional separator: "Quick Brown Fox".parameterize('_') => "quick_brown_fox"
.number_to_phone
accepts 7-digit phone numbers now.ActiveSupport::Json.decode
now handles \u0000
style escape sequences.In addition to the Rack changes covered above, Railties (the core code of Rails itself) sports a number of significant changes, including Rails Metal, application templates, and quiet backtraces.
Rails Metal is a new mechanism that provides superfast endpoints inside of your Rails applications. Metal classes bypass routing and Action Controller to give you raw speed (at the cost of all the things in Action Controller, of course). This builds on all of the recent foundation work to make Rails a Rack application with an exposed middleware stack. Metal endpoints can be loaded from your application or from plugins.
Rails 2.3 incorporates Jeremy McAnally’s rg application generator. What this means is that we now have template-based application generation built right into Rails; if you have a set of plugins you include in every application (among many other use cases), you can just set up a template once and use it over and over again when you run the rails
command. There’s also a rake task to apply a template to an existing application:
rake rails:template LOCATION=~/template.rb
This will layer the changes from the template on top of whatever code the project already contains.
Building on Thoughtbot’s Quiet Backtrace plugin, which allows you to selectively remove lines from Test::Unit
backtraces, Rails 2.3 implements ActiveSupport::BacktraceCleaner
and Rails::BacktraceCleaner
in core. This supports both filters (to perform regex-based substitutions on backtrace lines) and silencers (to remove backtrace lines entirely). Rails automatically adds silencers to get rid of the most common noise in a new application, and builds a config/backtrace_silencers.rb
file to hold your own additions. This feature also enables prettier printing from any gem in the backtrace.
Quite a bit of work was done to make sure that bits of Rails (and its dependencies) are only brought into memory when they’re actually needed. The core frameworks - Active Support, Active Record, Action Controller, Action Mailer and Action View - are now using autoload
to lazy-load their individual classes. This work should help keep the memory footprint down and improve overall Rails performance.
You can also specify (by using the new preload_frameworks
option) whether the core libraries should be autoloaded at startup. This defaults to false
so that Rails autoloads itself piece-by-piece, but there are some circumstances where you still need to bring in everything at once - Passenger and JRuby both want to see all of Rails loaded together.
The internals of the various rake gem
tasks have been substantially revised, to make the system work better for a variety of cases. The gem system now knows the difference between development and runtime dependencies, has a more robust unpacking system, gives better information when querying for the status of gems, and is less prone to “chicken and egg” dependency issues when you’re bringing things up from scratch. There are also fixes for using gem commands under JRuby and for dependencies that try to bring in external copies of gems that are already vendored.
Test::Unit::TestCase
to ActiveSupport::TestCase
, and the Rails core requires Mocha to test.environment.rb
file has been decluttered.Rails.root
now returns a Pathname
object, which means you can use it directly with the join
method to clean up existing code that uses File.join
.--with-dispatchers
when you run the rails
command, or add them later with rake rails:update:generate_dispatchers
).script/server
now accepts a –path argument to mount a Rails application from a specific path.A few pieces of older code are deprecated in this release:
render_component
goes from “deprecated” to “nonexistent” in Rails 2.3. If you still need it, you can install the render_component pluginscript/performance/request
to look at performance based on integration tests, you need to learn a new trick: that script has been removed from core Rails now. There’s a new request_profiler plugin that you can install to get the exact same functionality back.ActionController::Base#session_enabled?
is deprecated because sessions are lazy-loaded now.:digest
and :secret
options to protect_from_forgery
are deprecated and have no effect.response.headers["Status"]
and headers["Status"]
will no longer return anything. Rack does not allow “Status” in its return headers. However you can still use the status
and status_message
helpers. response.headers["cookie"]
and headers["cookie"]
will no longer return any CGI cookies. You can inspect headers["Set-Cookie"]
to see the raw cookie header or use the cookies
helper to get a hash of the cookies sent to the client.formatted_polymorphic_url
is deprecated. Use polymorphic_url
with :format
instead.:http_only
option in ActionController::Response#set_cookie
has been renamed to :httponly
.:connector
and :skip_last_comma
options of to_sentence
have been replaced by :words_connnector
, :two_words_connector
, and :last_word_connector
options.file_field
control used to submit an empty string to the controller. Now it submits a nil, due to differences between Rack’s multipart parser and the old Rails one.Release notes compiled by Mike Gunderloy This version of the Rails 2.3 release notes was compiled based on RC2 of Rails 2.3.


Send us feedback.
Please enter information in all fields.
{% extends "base.html" %} {% block tag_trunk_content %}
Please enter information in all fields.
Greatship strives to bring you the best energy and offshore services and warmly welcomes your feedback.
If you're interested in telling us about your services, kindly make use of the Supplier Relations page.
If you need up-to-date information about our services, kindly visit the Fleet Status page.


StrongerWithUs!
Our app was designed for both workout enthusiasts and beginners alike. We hope that you'll find your workouts resulting in even better muscle growth from the fast and easy way the app handles exercise information. Taking your workouts to the next level so you can get strong has never been this easy!


About
Software Engineer at Bottomline Technologies.
- Degree: B.Tech in IT
- Email<EMAIL_ADDRESS>- Phone: +91<PHONE_NUMBER>
- City: Mumbai, India
- Age: 22
Hey there, I'm a Trainee Software Engineer at Bottomline Technologies. I completed my B.Tech degree in the field of IT from D. J. Sanghvi College of Engineering, Mumbai. I have a keen interest in Databases and Web Development Technologies. Highly motivated to learn more skills and seek out new challenges. Apart from technical skills, I also possess leadership, team work and management skills.
Skills
Education
Bachelor’s in Information Technology
Aug 2017 - Jun 2021
D. J. Sanghvi College of Engineering, Mumbai, India
CGPA - 9.54/10
Coursework: DBMS & SQL, Big Data Analytics, Advance DBMS, Web Development Frameworks, Data Structures & Algorithms, Data Visualization and Business Intelligence, Structured Programming Approach, Open Source Technologies.
School and Junior College
May 2005 - May 2017
Higher Secondary Certificate (H.S.C) – class 12 – 81%
Indian Certificate of Secondary Education (I.C.S.E) – class 10 – 84%
Professional Experience
Software Engineer
Oct 2021 - Present
Bottomline Technologies, Mumbai, India
Freelancer Data Analyst
Jun 2020 - Present
Edumanta Educational Services, Delhi, India
- Work on the preprocessing of data as well as visualization and creating dashboards using Tableau and Ms-Excel.
- Research work on the given topic and documentation.
- Provide solutions for academic assignments of international students and professors.
Projects
Smart Wardrobe Planner
Jan 2020 - Jun 2021
Technology Stack: HTML, CSS, JavaScript, JQuery, Bootstrap, Flask, MySQL, ML, DL
- Built an application which provides the user with the best case combinations of matching clothes in the wardrobe also based on Occasion and provides optimized recommendations from various websites.
- Functionalities include Matching, Recommendation, Occasion based matching and Classification.
Upload Download Website
Sep 2019 - Nov 2019
Technology Stack: HTML, CSS, JavaScript, Bootstrap, PHP and MySQL
- Designed and implemented a web application which allows users to upload their files or documents either privately or publicly and other registered users can even download it.
- Created a clean responsive interface and quality user experience with the help of Bootstrap and JavaScript.
Contact
Location:
3/22, Malad CHS, Poddar Park Road, Malad (EAST), Mumbai-400097
Email:
<EMAIL_ADDRESS>Call:
+91<PHONE_NUMBER>


{% extends "instructions/Page.html" %} {% load staticfiles otree %} {% block title %} INSTRUCTIONS - PART 1
Every time a partnership is formed between you and another player, you earn an amount of points that depends only on the type of the other player. If no partnership is formed between you and the other player, you earn an amount of points that depends only on your own type. The tables below show you the actual amounts of points you can earn. If a partnership is formed between you and an X type, you earn 160 points. If a partnership is formed between you and a Y type, you earn 80 points. If a partnership is formed between you and a Z type, you earn 40 points. If no partnership is formed between you and the other player and your type is X, you earn 100 points. If no partnership is formed between you and the other player and your type is Y, you earn 75 points. If no partnership is formed between you and the other player and your type is Z, you earn 25 points.
| Partner's Type | X | Y | Z |
| Your Points | 160 | 80 | 40 |
| Your Type | X | Y | Z |
| Your Points | 100 | 75 | 25 |


Amarillo police working crash at Westgate Drive and Soncy
by Kaitlin JohnsonAMARILLO, Texas (KFDA) - The Amarillo Police Department is working a two-vehicle crash at Westgate Drive and Soncy.
The southbound lanes of traffic will be blocked for at least the next hour.
Police ask drivers to avoid the area or expect delays.
Details on the crash are not available at this time. We will update this story as we learn more.


Network Security and Privacy Protection
Graduate course, School of Information Science and Engineering, University of Jinan
I am an associate professor at University of Jinan, and was a postdoctoral researcher at Indiana University Bloomington. I got my PhD in Computer Science at Shandong University in 2016, where I was advised by Prof. Qiuliang Xu.
My research interests include information security and applied cryptography. Recently, I am focusing on practical secure multi-party computation, privacy-preserving machine learning, and privacy-preserving data analysis.
I am looking for highly motivated graduate students to join us on exciting information security projects! Please feel free to send your CV, TRANSCRIPTS, and PUBLICATIONS to<EMAIL_ADDRESS>for CSC Scholarship and Shandong Provincial Scholarship opportunities.
SELECTED JOURNALS
• Chuan Zhao, Jun Xu. “Secure Multi-Party Computation Based on Cut-and-Choose”. Published in Journal of Computer Research and Development. 2021. (CCF-A)
• Qi Zhao, Chuan Zhao, Shujie Cui, Shan Jing, Zhenxiang Chen. “PrivateDL: Privacy‐preserving collaborative deep learning against leakage from gradient sharing”. Published in International Journal of Intelligent Systems. 2020. (CCF-C, IF 10.312)
• Chuan Zhao, Shengnan Zhao, Bo Zhang, Shan Jing, Zhenxiang Chen, Minghao Zhao. “Oblivious DFA Evaluation on Joint Input and Its Applications”. Published in Information Sciences. 2020. (CCF-B, IF 5.910)
• Jian Qiu, Hengjian Li, Chuan Zhao. “Cancelable Palmprint Templates Based on Random Measurement and Noise Data for Security and Privacy-Preserving Authentication”. Published in Computers & Security. 2019. (CCF-B, IF 3.579)
• Minghao Zhao, Chengyu Hu, Xiangfu Song, Chuan Zhao. “Towards Dependable and Trustworthy Outsourced Computing: A Comprehensive Survey and Tutorial”. Published in Journal of Network and Computer Applications. 2019. (CCF-C, IF 5.570)
• Chuan Zhao, Shengnan Zhao, Minghao Zhao, Chong-Zhi Gao, Hongwei Li, Yu-an Tan. “Secure Multi-Party Computation: Theory, Practice and Applications”. Published in Information Sciences. 2019. (CCF-B, IF 5.910)
• Chuan Zhao, Shengnan Zhao, Zhongtian Jia, Bo Zhang, Bin Zhang. “Advances in Practical Secure Two-party Computation and Its Application in Genomic Sequence Comparison (in Chinese)”. Published in Journal of Cryptologic Research (密码学报). 2018.
• Chuan Zhao, Shengnan Zhao, Zhenxiang Chen, Bo Zhang, Mauro Conti. “Secure Comparison under Ideal/Real Simulation Paradigm”. Published in IEEE Access. 2018. (IF 3.745)
• Bo Zhang, Tianqing Zhu, Chengyu Hu, Chuan Zhao. “Cryptanalysis of a Lightweight Certificateless Signature Scheme for IIOT Environments”. Published in IEEE Access. 2018. (IF 3.745)
• Bo Zhang, Zhongtian Jia, Chuan Zhao. “An Efficient Certificateless Generalized Signcryption Scheme”. Published in Security and Communication Networks. 2018. (CCF-C, IF 1.288)
• Shanshan Wang, Qiben Yan, Zhenxiang Chen, Bo Yang, Chuan Zhao, Mauro Conti. “Detecting Android Malware Leveraging Text Semantics of Network Flows”. Published in IEEE Transactions on Information Forensics and Security. 2017. (CCF-A, IF 6.211)
• Chuan Zhao, Han Jiang, Qiuliang Xu, Yilei Wang, Xiaochao Wei, Shujie Cui. “Fast Two-Output Secure Computation with Optimal Error Probability”. Published in Chinese Journal of Electronics (电子学报英文版). 2017.
• Hao Wang, Debiao He, Jian Shen, Zhihua Zheng, Chuan Zhao, Minghao Zhao. “Verifiable Outsourced Ciphertext-Policy Attribute-Based Encryption in Cloud Computing”. Published in Soft Computing. 2017. (CCF-C, IF 3.050)
• Chuan Zhao, Han Jiang, Xiaochao Wei, Qiuliang Xu. “Cut-and-Choose Bilateral Oblivious Transfer (in Chinese)”. Published in Journal of Software (软件学报). 2017.
• Chuan Zhao, Han Jiang, Qiuliang Xu, Xiaochao Wei, Hao Wang. “Several Oblivious Transfer Variants in Cut-and-Choose Scenario”. Published in International Journal of Information Security and Privacy. 2016. (CCF-C)
• Xiaochao Wei, Han Jiang, Chuan Zhao. “An Efficient 1-out-of-n Oblivious Transfer Protocol with Full Simulation (in Chinese)”. Published in Journal of Computer Research and Development (计算机研究与发展). 2016.
• Yilei Wang, Chuan Zhao, Qiuliang Xu, Zhihua Zheng, Zhenhua Chen, Zhe Liu. “Fair Secure Computation with Reputation Assumptions in the Mobile Social Networks”. Published in Mobile Information Systems. 2015. (IF 1.508)
• Yilei Wang, Duncan S. Wong, Chuan Zhao, Qiuliang Xu. “Fair Two-Party Computation with Rational Parties Holding Private Types”. Published in Security and Communication Networks. 2015. (CCF-C, IF 1.288)
SELECTED CONFERENCES
• Mohammed Shujaa Aldeen, Chuan Zhao. “Rare Variants Analysis in Genetic Association Studies with Privacy Protection via Hybrid System”， Published in 23rd International Conference on Information and Communications Security. 2021. (CCF-C)
• Sheraz Ali, Muhammad Maaz Irfan, Abubakar Bomai, Chuan Zhao. “Towards Privacy-Preserving Deep Learning: Opportunities and Challenges”， Published in IEEE International Conference on Data Science and Advanced Analytics. 2020. (CCF-C)
• Abubakar Bomai, Mohammed Shujaa Aldeen, Chuan Zhao. “Privacy-Preserving GWAS Computation on Outsourced Data Encrypted under Multiple Keys Through Hybrid System”， Published in IEEE International Conference on Data Science and Advanced Analytics. 2020. (CCF-C)
• Xiaochao Wei, Han Jiang, Chuan Zhao, Minghao Zhao, Qiuliang Xu. “Fast Cut-and-Choose Bilateral Oblivious Transfer for Malicious Adversaries”. Published in The 15th IEEE International Conference on Trust, Security and Privacy in Computing and Communications. 2016. (CCF-C)
• Chuan Zhao, Han Jiang, Xiaochao Wei, Qiuliang Xu, Minghao Zhao. “Cut-and-Choose Bilateral Oblivious Transfer and Its Application”. Published in The 14th IEEE International Conference on Trust, Security and Privacy in Computing and Communications. 2015. (CCF-C)
AS PRINCIPAL INVESTIGATOR
Jan. 1, 2018 –Dec. 31, 2020
National Natural Science Foundation of China, “Research on Efficient Secure Two-Party Computation for Privacy-Preserving Genomic Sequence Comparison” (No. 61702218)
Jan. 1, 2022 –Dec. 31, 2024
Shandong Provincial Natural Science Foundation, “Research on Information Security Technology Based on Domestic Heterogeneous Computing Platform” (No. ZR2021LZH007)
Jan. 1, 2019 –Dec. 31, 2021
Shandong Provincial Key Research and Development Project, “Research and Development of Privacy-Preserving Cloud Computing Platform for Precision Medicine” (No. 2019GGX101028)
Jan. 1, 2018 –Dec. 31, 2020
Shandong Province Higher Educational Science and Technology Program, “Research on Efficient and Secure Genomic Sequence Alignment in Cloud Environment” (No. J18KA349)
AS PROJECT MEMBER
Jan. 1, 2019 –Dec. 31, 2021
Project of Independent Cultivated Innovation Team of Jinan City, “Research on Intelligent Mobile Malicious Application Behavior Detection” (No. 2018GXRC002)
Jan. 1, 2016 –Dec. 31, 2019
National Natural Science Foundation of China, “Research on Theory of Secure Multi-Party Computation” (No. 61572294)
Jan. 1, 2012 –Dec. 31, 2015
National Natural Science Foundation of China, “Research on Fundamental Theory of Secure Multi-Party Computation” (No. 61173139)
Jan. 1, 2012 –Dec. 31, 2014
Doctoral Fund of Ministry of Education of China, “Research on Basic Operations of Secure Multi-Party Computation and Universally Composable Security” (No.<PHONE_NUMBER>0027)
Graduate course, School of Information Science and Engineering, University of Jinan
Graduate course, School of Information Science and Engineering, University of Jinan
Undergraduate course, School of Information Science and Engineering, University of Jinan
Undergraduate course, School of Information Science and Engineering, University of Jinan
Undergraduate course, School of Information Science and Engineering, University of Jinan


Sena committed sin of abandoning Bal Thackeray’s thoughts, says BJP
The BJP held a meeting of its newly elected MLAs at its office Vasant Smriti at Dadar on Sunday afternoon.
by DECCAN CHRONICLE.Mumbai: As the power struggle in Maharashtra intensifies, the BJP has expressed confidence that its government would complete its five-year term.
The BJP held a meeting of its newly elected MLAs at its office Vasant Smriti at Dadar on Sunday afternoon.
The meeting was attended by most of the 105-elected members of the BJP, barring six MLAs.
Speaking after the meeting, Mr Shelar said that the strategy to comfortably pass the floor test was discussed and decided in the meeting.
“We also passed a resolution congratulating Devendra Fadnavis and Ajit Pawar on taking oath as Chief Minister and Deputy Chief Minister. The state witnessed a festive atmosphere when Mr Fadnavis took oath as the CM,” he said.
The party also accused the Sena of committing the ‘sin’ of abandoning its founder Bal Thackeray’s thoughts of aligning with the BJP by going with the Congress and the NCP for the sake of acquiring power in Maharashtra.
“The Sena committed the sin of abandoning Bal Thackeray’s thoughts of aligning with the BJP and insulting the popular mandate by going with the Congress and the NCP,” he said.
Mr Shelar expressed confidence that Mr Fad-navis will win the floor test with a majority in the 288-member Assembly.
“The legislature party meeting deliberated on strategy to be adopted during the floor test,” he said.
He also justified the BJP’s move to align with Ajit Pawar, saying even the Sena has joined hands with Congress president Sonia Gandhi.
He also said that Ajit Pawar’s whip would be applicable to MLAs of the NCP by virtue of him being the ‘leader of the NCP legislature party.’
“BJP leaders Sudhir Mungantiwar and Suresh Khade could not attend the meeting due to some preoccupations while four MLAs could not attend it due to personal reasons,” Mr Shelar said.


Welcome to Anti-WineClub
Register
X
Please enter the correct account and password.
Already have account?
Login Now


--- layout: newsstory title: NOT WHAT WE WANTED match: Crawley 4 Yeltz 0 ---
We travelled in hope of a point but ended up being completely overrun by a half-decent team.
Actually the result is a bit flattering to them. We had the better of the first half despite being one down to a rubbish goal, but when we went 2-0 it was really all over. Two more very poor goals from rubbish defending plus a sending off for Asa Charlton meant our mini-revival was emphatically over, and with Weymouth winning again we're now 5 points from safety .
I'm sure you've all seen that the League Cup semi-final against Chippenham at The Grove has been arranged at short notice for Tuesday , so make sure you let everyone know. It's going to be tough but our cup form has been excellent this year so let's hope for the best.
LATEST: Chippenham game is off!


Use this JSF document as a way to quickly start any new project.
All you get is this text and a mostly barebone JSF document.
View Page Source »


Free... for now and forever
There are a lot of good tools out there but there are always catches. Somewhere along the line there is a monthly subscription. Tabletop Smash isn't doing that, all the tools are free and available to you. Always.
Easily create characters
One of the real pains of tabletop games is creating the characters. Not because it is hard but because there are so many little details you have to keep track of. Does a Cleric get a bonus to this, and when does the bard get to have an extra turn? (never... the bard never has a extra turn).
So Tabletop Smash does away with all that. It knows the rules so you can focus on just making a kick-ass character.
Share your creations
Tabletop games are community driven so why not give something back yourself. You have made a kick-ass Elf make it public so everyone can see it. Someone else can inspiration from your ideas, and all it takes is the click of a button.
 Party system, online maps, etc. But one thing at a time. I have started with Lamentations of the Flame Princess because that is the one that is keeping me busy right now. But I want to include others.
Let me know what think @TabletopSmash on twitter.


The author of this package cannot be held responsible for any loss of money or any malintentioned usage forms of this package. Please use this package with caution.
Symbol Token Standards library to create security tokens / financial instruments for the Symbol platform.
This is a PoC to validate the proposed NIP13 - Security Token Standard. When stable, the repository will be moved to the nemtech organization.
npm install symbol-token-standards
:warning: The following example usage for the symbol-token-standards
library is subject to change.
import { AggregateTransaction, PublicAccount, SignedTransaction } from 'symbol-sdk'
import { MnemonicPassPhrase } from 'symbol-hd-wallets'
import { NIP13, NetworkConfig, TransactionParameters } from 'symbol-token-standards'
import { TransactionURI } from 'symbol-uri-scheme'
// :warning: The following settings are network specific and may need changes
const transactionParams = new TransactionParameters(
Deadline.create(),
750000, // maxFee
)
// :warning: You should create separate backups of
// authorities and security token pass phrases.
const authKeys = MnemonicPassPhrase.createRandom() // backup the resulting 24-words safely!
const tokenKeys = MnemonicPassPhrase.createRandom() // backup the resulting 24-words safely!
// :warning: It is recommended to create operator
// keys offline and using a separate device.
const operators = [
new PublicAccount('PUBLIC_KEY_OPERATOR_1', 'ADDRESS_OPERATOR_1'),
new PublicAccount('PUBLIC_KEY_OPERATOR_2', 'ADDRESS_OPERATOR_2'),
// ...
]
// initialize NIP13 library
const network = new NetworkConfig(...)
const tokenAuthority = new NIP13.TokenAuthority(network, authKeys)
const securityToken = new NIP13.Token(network, tokenKeys)
// offline creation of the `CreateToken` security token contract
const metadata = new SecuritiesMetadata(
'MIC',
'ISIN',
'ISO_10962',
'Website',
'Sector',
'Industry',
{
'customKey1': 'metadata',
// ...
},
)
const tokenId = securityToken.create(
'My Awesome Security Token', // security token name
securityToken.getTarget().publicAccount, // actor
tokenAuthority.getAuthority().publicAccount, // token authority
operators,
123456789, // total outstanding shares
metadata,
transactionParams,
)
// get the transaction URI for `CreateToken` execution
const resultURI: TransactionURI = securityToken.result
// :warning: It is recommended to sign the resulting transactions
// using a hardware wallet rather than any type of software generated
// wallets.
const transaction: AggregateTransaction = resultURI.toTransaction()
const signedTransaction: SignedTransaction = securityToken.getTarget().sign(transaction, 'networkGenerationHash')
// `signedTransaction` can now be broadcast to the Symbol network of choice.
// It is important to denote that given the **aggregate** nature of security
// token contracts, multiple parties MAY be involved in the transaction and
// it is therefor required to issue a HashLockTransaction before announcing
// the aggregate bonded transaction that represents the contract.
Copyright 2020-present NEM
Licensed under the Apache v2.0 License.
Generated using TypeDoc


Values
August 23, 2015
When I'm feeling my best, my top values (and how hard I try to live up to them on a scale from 1 to 5) are:
- Meaningful work - 5
- Coolness under fire - 5
- Helping others - 4
- Personal development - 4
The last time someone asked for my advice, they were trying to hack their sleep schedule (something I'd been working on). I relate this to mh own value of personal development.
For the most part, I don't think my top values are connected to any stereotype threats I'm likely to face. I'm not sure what, if anything, that says about me. Part of me wonders if it's an indication that I've already let some stereotypes define me. Excellence, for instance, isn't one of my values, even though it seems like a excellent thing to have. I also don't feel particularly excellent at anything, and don't know that it's in me to be excellent. Am I giving into a stereotype? Or maybe it just means that I'm not overly converned with how I may be 'stereotyped.'
My value of personal developement is the one area I think could hold a stereotype threat for me. I generally perceive others that are also interested in personal development as better than me at it--particularly, I've noticed, males. And sometimes I worry that I may not be knowledgable enough to share my thoughts in a discussion on personal dev techniques. One strategy I'll try using to get over this is being honest with myself about what I do and don't know, and sharing the things I personally find interesting and what I find interesting about them. If it's something I care enough about to have some kind of opinion on, then it should be worth sharing with others.


--- layout: thingmonk ---
Eclipse IoT Day : Protein, entry via Cream, 31 New Inn Yard, EC2A 3EY
ThingMonk Hack Day : Protein, entry via Cream, 31 New Inn Yard, EC2A 3EY
ThingMonk Main conference: Shoreditch Studios, 37 Batemans Row, EC2A 3HH
ThingMonk is the developer conference for people making IoT platforms. Now in its fifth year, we bring together technologists and designers building core infrastructure for IoT for 2 days of awesome, unique talks on topics including bots, industrial automation/industry 4.0, machine learning, time series data, programming language choices and UX. These are talks by practitioners.
We’re not cheerleaders for thoughtless automation- we’ll have skeptical, thoughtful critical talks about creating a culture and making the right design decisions so that the IoT serves us, rather than us serving it.
ThingMonk is about tech but it’s also a warm, supportive, welcoming and diverse community. This year we are delighted to be able to to expand on last years diversity scholarship. This years scholarship will open for applications in March.
ThingMonk 2017 will be held at two venues in Shoreditch within 150 yards of each - the Eclipse IoT Day and ThingMonk Hack Day will be held at Cream/Protein and the main confererence, will be at Shoreditch Studioss
ThingMonk 2017 cannot occur without the generous support of our friends in the IoT Community. If you would like to be a sponsor of the premier developer focused IoT event in London click here.
ThingMonk 2017 begins with a morning of talks from The Eclipse Foundation,
with registration from 9AM and talks kicking off at 10AM.
We will break for lunch at 1PM, and return at 2:30 for our coding workshop.
Coding continues into the evening with coffee, beer and snacks provided
until 9:30 PM
Coffee Break
Lunch Break
Coding Workshop from IBM
Coffee Break
Coding Workshop from Microsoft
Hands on Coding, Social
Bring your devices, laptops and ideasAfter registration from 9:30 the main conference will kick off at 10:30am.
A morning of talks and then we’ll have an amazing lunch between 1 and 2:30pm.
If you’ve been to a RedMonk event you know what to expect - if not, you’re in for a treat.
We aim for sensational food and drink experiences at our conferences.
Talks begin again at 2:30, coffee at 3:30. More great talks until 5:30
Finishing up with beers and wine, and dinner at 7pm.
Coffee Break
Lunch
Coffee & Beer
10:30 AM start, 1 - 2:30 - lunch. 5:30 PM Finish.
Coffee
Lunch
Coffee & Beer
ThingMonk 2017 will be held at two venues in Shoreditch within 100 50 yards of each- Day 1 at Protein, 31 New Inn Yard, EC2A 3EY, and Day 2 and 3 at Shoreditch Studios, 37 Batemans Row, EC2A 3HH.
tl;dr: Be excellent with each other
All attendees, speakers, sponsors and volunteers at our conference are required to agree with the following code of conduct. Organisers will enforce this code throughout the event. We are expecting cooperation from all participants to help ensuring a safe environment for everybody.


Education
Computer Science
Tehnical University/2008-2016
Bachelor Degree
Tehnical Collage/2008-2010
Master Degree
Tehnical University/2010-2016
Experience
Computer Science
Lorem ipsum dolor sit amet consectetur adipisicing elit. Ex, corrupti error sequi vitae ullam nobis!
Computer Science
Lorem ipsum dolor sit amet consectetur adipisicing elit. Ex, corrupti error sequi vitae ullam nobis!
Computer Science
Lorem ipsum dolor sit amet consectetur adipisicing elit. Ex, corrupti error sequi vitae ullam nobis!
My level of knowledge in some tools
My Skills
HTML/CSS
90%
JavaScript
70%
Figma
70%
Jquery
70%
My Motivation
I have been doing web design for a year unprofessionally. I graduated from the Technical University in 2016. This year I also completed a course for HTML/CSS/JavaScript. I like to create projects, some of them I will show you. I have a basic knowledge of figma, I made a project on assignment and I will apply it to see it.


Thank you for your interest in the Google Maps/Google Earth APIs. The Google Maps/Google Earth APIs are a collection of services that allow you to include maps, geocoding, places, and other Content from Google in your webpages or applications.
This page contains the Google Maps/Google Earth APIs Terms of Service. If you have questions about these terms, please consult the Terms of Service section of the FAQ.
Last Updated: April 20, 2012
- required by law or third party relationship (including if there is a change in applicable law or relationship), or
- doing so could create a security risk or substantial economic or material technical burden.
1. Your relationship with Google.
1.1 Use of the Service is Subject to these Terms. Your use of any of the Google Maps/Google Earth APIs (referred to in this document as the "Maps API(s)" or the "Service") is subject to the terms of a legal agreement between you and Google Inc., whose principal place of business is at 1600 Amphitheatre Parkway, Mountain View, California 94043, USA ("Google"). This legal agreement is referred to as the "Terms".
1.2 The Terms include Google's Legal Notices and Privacy Policy.
(ii) the Legal Notices; and
(iii) the Privacy Policy.
(b) Before you use the Maps API(s), you should read each of the documents comprising the Terms, and print or save a local copy for your records.
1.3 Use of Other Google Services and Additional Terms. If you use the Maps API(s) in conjunction with any other Google products or services, including any other Google API(s), (collectively, the Service and all other Google products and services are referred to as the "Google Services"), your agreement with Google will also include the terms applicable to those Google Services. All of these are referred to as the "Additional Terms." If Additional Terms apply, they will be accessible to you either within or through your use of the applicable Google Services. If there is any contradiction between the Additional Terms and the Maps APIs Terms, then the Maps APIs Terms will take precedence only as they relate to the Maps API(s), and not to any other Google Services.
1.4 Precedence of Maps APIs Terms. If there is any contradiction between the Maps APIs Terms and other Maps API(s)-related documents (including but not limited to the Maps APIs Documentation), then the Maps APIs Terms will take precedence.
1.5 Changes to the Terms. Google reserves the right to make changes to the Terms from time to time. When these changes are made, Google will make a new copy of the Terms available at http://code.google.com/apis/maps/terms.html (or such successor URLs that Google may designate from time to time). You understand and agree that if you use the Service after the date on which the Terms have changed, Google will treat your use as acceptance of the updated Terms. If a modification is unacceptable to you, you may terminate this agreement by ceasing use of the Maps API(s).
2. Accepting the Terms.
2.1 Clicking to Accept or Using the Maps API(s). In order to use the Maps API(s) you must agree to the Terms. You can accept the Terms by:
(b) using the Maps API(s). In this case, you understand and agree that Google will treat your use of the Maps API(s) as acceptance of the Terms from that point onwards.
2.2 U.S. Law Restrictions. You may not use the Maps API(s) and may not accept the Terms if you are a person barred from using the Service under the laws of the United States.
2.3 Authority to Accept the Terms. You represent that you have full power, capacity and authority to accept these Terms. If you are accepting on behalf of your employer or another entity, you represent that you have full legal authority to bind your employer or such entity to these Terms. If you don't have the legal authority to bind, please ensure that an authorized person from your entity consents to and accepts these Terms.
3. Privacy and Personal Information.
3.1 Google's Privacy Policy. For information about Google's data protection practices, please read Google's privacy policy at http://www.google.com/privacy.html. This policy explains how Google treats your personal information and protects your privacy when you use the Service.
3.2 Use of Your Data under Google's Privacy Policy. You agree to the use of your data in accordance with Google's privacy policy.
3.3 Your Privacy Policy. You must post and abide by an appropriate privacy policy in, and will comply with all applicable laws relating to the collection of information from visitors to, Your Maps API Implementation in accordance with the specific requirements of Section 9.3 (End User Terms and Privacy Policy) below.
4. Provision of the Service by Google.
4.1 Google's Subsidiaries and Affiliates. Google has subsidiaries and affiliated legal entities around the world ("Subsidiaries and Affiliates"). Sometimes, these companies will be providing the Service to you on behalf of Google itself. You acknowledge and agree that Subsidiaries and Affiliates will be entitled to provide the Service to you.
4.2 Limits on Your Use of the Service. You acknowledge and agree that Google may impose or adjust the limit on the number of transactions you may send or receive through the Service; such fixed upper limits may be set by Google at any time, at Google's discretion. For further information, see Section 10.1.1(i) below.
4.3 Advertising.
(b) Although the Service currently does not include advertising in the maps images, Google reserves the right to include advertising in the maps images provided to you through the Service.
(ii) If your Maps API implementation incorporated the Maps API(s) prior to April 8, 2011, you have a limited right to opt out of advertising in the maps images by providing written notice to Google during the Ads Notice Period; your notice must state that you refuse to accept advertising in the maps images and must be provided to Google in accordance with Google's notice requirements (as specified in Google's Ads Notice).
(ii) terminating your use of the Service.
4.4 Changes to the Service; Deprecation Policy.
Google will announce if we intend to discontinue or make backwards incompatible changes to this API or Service. We will use commercially reasonable efforts to continue to operate the Service or the applicable APIs without these changes until the later of: (i) one year after the announcement or (ii) April 20, 2015, unless (as Google determines in its reasonable good faith judgment):
This Deprecation Policy doesn't apply to versions, features, and functionality labeled as "experimental."
5. Your Google Account.
5.1 Signing Up for a Google Account. In order to access the Service, you must have a Google Account. You agree that any information you give to Google in connection with your Google Account or your continued use of the Service will always be accurate, correct, and up to date.
5.2 Account Keys. For certain versions or features of the Maps API(s), Google may require you to obtain and use an alphanumeric key or cryptographic key that is uniquely associated with your Google Account and your Maps API Implementation. You must obtain and use such key (if required by Google for the applicable version or feature of the Maps API(s)) in accordance with these Terms and the Maps APIs Documentation.
5.3 Your Passwords and Account Security. You agree that you will be solely responsible to Google for your use of the Service. If you become aware of any unauthorized use of your password, your account, or your key(s), you agree to notify Google immediately.
6. Google's Proprietary Rights. You acknowledge and agree that Google (or Google's licensors and their suppliers, as applicable) own all legal right, title and interest in and to the Service and Content, including any intellectual property rights that subsist in the Service and Content (whether those rights happen to be registered or not, and wherever in the world those rights may exist).
7. Permitted Uses. You agree to use the Service only for purposes:
(b) that are permitted by any applicable third party contract, law, or regulation in the relevant jurisdictions; and
(c) that comply with all applicable policies or guidelines made available by Google, including in the Maps APIs Documentation and the Permission Guidelines for Google Maps and Google Earth.
8. Licenses from Google to You.
8.1 Definitions.
(b) "Content" means any content provided through the Service (whether created by Google or its third party licensors), including map and terrain data, photographic imagery, traffic data, places data (including business listings), or any other content.
(c) "Maps API Implementation" means a software application or website that uses the Maps API(s) to obtain and display Content in conjunction with Your Content, according to these Terms.
(d) "Your Content" means any content that you provide in your Maps API Implementation, including data, images, video, or software. Your Content does not include the Content.
8.2 Service License. Subject to these Terms (including but not limited to Section 9 (License Requirements) and Section 10 (License Restrictions)), Google gives you a personal, worldwide, royalty-free, non-transferable, non-assignable and non-exclusive license to use the Service as provided by Google, in the manner permitted by the Terms.
8.3 Content License. Subject to these Terms (including but not limited to Section 9 (License Requirements) and Section 10 (License Restrictions)), Google gives you a personal, worldwide, royalty-free, non-transferable, non-assignable, and non-exclusive license to access, use, publicly perform and publicly display the Content in your Maps API Implementation, as the Content is provided in the Service, and in the manner permitted by the Terms. Specifically, you understand the following:
(b) Certain Content is provided under license from third parties, including Tele Atlas B.V. ("Tele Atlas"), and is subject to copyright and other intellectual property rights owned by or licensed to Tele Atlas and/or such third parties. You may be held liable for any unauthorized copying or disclosure of this content. Your use of Tele Atlas map data and certain other Content (including certain business listings Content) is subject to additional restrictions located in the Legal Notices page.
8.4 Brand Features License.
(b) Restrictions. In using Google Brand Features, you will not:
(ii) display a Google Brand Feature in your Maps API Implementation or on your site if your Maps API Implementation or site contains or displays adult content or promotes illegal activities, gambling, or the sale of tobacco or alcohol to persons under 21 years of age;
(iii) have the Google logo as the largest logo in your Maps API Implementation or on your website (except as displayed in the map image itself);
(iv) display a Google Brand Feature as the most prominent element in your Maps API Implementation on any page of your website;
(v) display a Google Brand Feature in a manner that is misleading, defamatory, infringing, libelous, disparaging, obscene or otherwise objectionable to Google;
(vi) use Google Brand Features to disparage Google, its products, or the Google Services;
(vii) display a Google Brand Feature in your Maps API Implementation or on a site that violates any law or regulation; or
(viii) remove, distort or alter any element of a Google Brand Feature (this includes squeezing, stretching, inverting, discoloring, etc.).
8.5 Proprietary Rights Notices. You agree that you will not remove, obscure, or alter any proprietary rights notices (including copyright and trademark notices, Terms of Use links, or Brand Features) that may be affixed to or provided through the Service. Where such notices are not affixed within the Service, you agree to display such notices according to the Maps APIs Documentation.
8.6 U.S. Government Restricted Rights. If the Service or Content is being used or accessed by or on behalf of the United States government, such use is subject to additional terms located in the "Government End Users" section of our Legal Notices page.
8.7 Determination of Compliance. Google reserves the sole right and discretion to determine whether your use of the Service, Content, and Brand Features is in compliance with these Terms.
9. License Requirements. Google's licenses above are subject to your adherence to the following requirements:
9.1 Free, Public Accessibility to Your Maps API Implementation.
(b) Public Access (No Firewall). Your Maps API implementation must not operate (i) only behind a firewall; or (ii) only on an internal network (except during the development and testing phase); or (iii) in a closed community (for example, through invitation-only access).
(b) Mobile Applications. The rule in Section 9.1.1(a) (Free Access) does not apply if your Maps API Implementation is used in a mobile application that is sold for a fee through an online store and is downloadable to a mobile device that can access the online store.
(b) You can charge a fee for your Maps API Implementation if it is an Android application downloadable to mobile devices from the Android Market.
(c) If you are a consultant who creates or hosts Maps API Implementations for third party customers, you may charge such customers a fee for your consulting or hosting services (but not for the Maps API Implementations themselves, except as permitted under Section 9.1.2 (Exceptions)).
9.3 End User Terms and Privacy Policy. If you develop a Maps API Implementation for use by other users, you must:
(b) explicitly state in your Maps API Implementation's terms of use that, by using your Maps API Implementation, your users are agreeing to be bound by Google's Terms of Use; and
(c) protect the privacy and legal rights of those users.
(ii) Your privacy policy must notify users that you are using the Maps API(s) and incorporate by reference the Google privacy policy by including a link to the Google privacy policy (currently http://www.google.com/privacy.html), as amended by Google from time to time.
9.4 Attribution.
(b) You agree to include and display the "powered by Google" attribution (and/or any other attribution(s) required by Google as described in the Maps APIs Documentation) conspicuously on the page, in close proximity and adjacent to the Service search box and Google search results. If you use the standard Google search control, or the standard Google search control form, this attribution will be included automatically, and you agree not to modify or obscure this automatically-generated attribution.
(c) You understand and agree that Google has the sole right and discretion to determine whether your attribution(s) are in compliance with the above requirements.
9.5 Responsibility for Breaches. You agree that you are solely responsible for (and that Google has no responsibility to you or to any third party for) any breach of your obligations under the Terms and for the consequences of any such breach (including any loss or damage that Google may suffer).
10. License Restrictions. Except as expressly permitted under the Terms, or unless you have received prior written authorization from Google (or, as applicable, from the provider of particular Content), Google's licenses above are subject to your adherence to all of the restrictions below.
10.1 Restrictions on How You May Use the Maps API(s). Except as explicitly permitted in Section 8 (Licenses from Google to You) or the Maps APIs Documentation, you must not (nor may you permit anyone else to) do any of the following:
(b) No Hiding of Identity. You must not hide or mask from Google the identity of your Maps API Implementation as it uses the Service, including by failing to follow the identification conventions listed in the Maps APIs Documentation.
(c) No Reverse Engineering. You must not reverse engineer, decompile or otherwise attempt to extract the source code of the Service or any part thereof, unless this is expressly permitted or required by applicable law;
(d) No Modification of Search Results. You must not modify, reorder, augment or manipulate search results in any way unless you indicate to the user that this has occurred.
(e) No Modification of Links. You must not modify, replace, obscure, or otherwise hinder the functioning of links to Google or third party websites provided in the Content. For the avoidance of doubt, titles for place results must link to the applicable URL provided in the result, unless the title is intended to be selected only for purposes of navigation by an end user accessing your Maps API Implementation from a device with appropriately space-constraining user interface options. In these cases, the title linking to the Google-provided URL must be displayed as the top and primary link on the subsequent landing page or user interface component.
(f) No Violation of Google Policies. You must not violate any policies in the Maps APIs Documentation or violate Google's Software Principles (available at http://www.google.com/intl/en/corporate/software_principles.html or such successor URLs that Google may designate from time to time) and other policies as Google may develop from time to time, including but not limited to the Google policies below, under which you agree not to:
(ii) upload, post, transmit or otherwise make available any inappropriate, defamatory, obscene, or unlawful content;
(iii) upload, post, transmit or otherwise make available any content that infringes any patent, trademark, copyright, trade secret or other proprietary right of any party, unless you are the owner of the rights, or have the permission of the owner or other legal justification to use such content;
(iv) upload, post, transmit or otherwise make available messages that promote pyramid schemes, chain letters, or disruptive commercial messages or advertisements;
(v) upload, post, email, transmit or otherwise make available any other content, message, or communication prohibited by applicable law, the Terms or any applicable Service policies or guidelines;
(vi) download any file posted by another that you know, or reasonably should know, cannot legally be distributed in such manner;
(vii) impersonate another person or entity, or falsify or delete any author attributions or labels of the origin or source of Content, or other material;
(viii) restrict or inhibit any other user from using and enjoying the Service or any other Google Services;
(ix) delete, obscure, or fail to display the Terms of Use link as presented through the Service or described in the Maps APIs Documentation;
(x) delete, obscure, or in any manner alter any brand features, logos, warnings, notices (including but not limited to any copyright or other proprietary rights notices), or links that appear in the Service or the Content;
(xi) interfere with or disrupt the Google Services, servers, or networks connected to the Google Services, or disobey any requirements, procedures, policies, or regulations of networks connected to the Google Services;
(xii) use any robot, spider, site search/retrieval application, or other device to retrieve or index any portion of the Google Services or Content or collect information about users for any unauthorized purpose;
(xiii) display content in your Maps API Implementation that falsely expresses or implies that such content is sponsored or endorsed by Google;
(xiv) create user accounts by automated means or under false or fraudulent pretenses, or obtain or attempt to obtain multiple keys for the same URL;
(xv) promote or provide instructional information about illegal activities;
(xvi) promote physical harm or injury against any group or individual; or
(xvii) transmit any malicious code (including but not limited to viruses, worms, defects, and Trojan horses), or any other items of a destructive nature.
(h) No Use of Static Maps API(s) outside a Web-Based Application (Except with a Link to Google Maps). You must not use the Static Maps API(s) outside of a web-based application unless:
(ii) if your platform does have a web browser, you provide a link that shows the location concerned either (x) in the Google Maps native application (if your platform has one); or (y) on the Google Maps website.
(j) Geolocation Privacy.
(ii) If your Maps API Implementation provides Google with geolocation data, that geolocation data must not enable Google to identify an individual user. For example, if your Maps API Implementation sends Google Your Content, and Your Content includes geolocation data, Your Content must not also include unique device identifiers associated with individual users.
(iii) If you intend to obtain the user's location and use it with any other data provider's data, you must disclose this fact to the user.
10.1.2 Restrictions against Commercial Use.
(b) No Direct Marketing. You must not print more than 5,000 copies of sales collateral materials containing a screenshot of the Content for purposes of commercial sales lead generation ("Direct Marketing") or incorporate the Content as a core part of printed matter (such as printed maps or guide books) that you redistribute for a fee. You must contact the Google Maps API for Business sales team to obtain a direct license if you desire to do either of the above.
10.1.3 Restrictions against Data Export or Copying.
(b) No Pre-Fetching, Caching, or Storage of Content. You must not pre-fetch, cache, or store any Content, except that you may store: (i) limited amounts of Content for the purpose of improving the performance of your Maps API Implementation if you do so temporarily, securely, and in a manner that does not permit use of the Content outside of the Service; and (ii) any content identifier or key that the Maps APIs Documentation specifically permits you to store. For example, you must not use the Content to create an independent database of "places" or other local listings information.
(c) No Mass Downloads or Bulk Feeds of Content. You must not use the Service in a manner that gives you or any other person access to mass downloads or bulk feeds of any Content, including but not limited to numerical latitude or longitude coordinates, imagery, visible map data, or places data (including business listings). For example, you are not permitted to offer a batch geocoding service that uses Content contained in the Maps API(s).
10.2 Restrictions on the Types of Applications that You are Permitted to Build with the Maps API(s). Except as explicitly permitted in Section 8 (Licenses from Google to You) or the Maps APIs Documentation, you must not (nor may you permit anyone else to) do any of the following:
(b) No Business, Residential, or Telephone Listings Services. You must not display any of the business listings Content provided by the Maps API(s) in any Maps API Implementation that has the primary purpose of making available business, residential address, or telephone directory listings.
(c) No Navigation, Autonomous Vehicle Control, or Enterprise Applications. You must not use the Service or Content with any products, systems, or applications for or in connection with any of the following:
(ii) any systems or functions for automatic or autonomous control of vehicle behavior; or
(iii) enterprise dispatch, fleet management, business asset tracking or similar applications. If you want to engage in enterprise dispatch, fleet management, business asset tracking, or similar applications, please contact the Google Maps API for Business sales team to obtain a Google enterprise license. (If you are offering a non-enterprise implementation, you may use the Google Maps API(s) to track assets such as cars, buses or other vehicles, as long as your tracking application is made available to the public without charge. For example, you may offer a free, public Maps API Implementation that displays real-time public transit or other transportation status information.)
11.1 Content License.  By submitting, posting or displaying Your Content in the Service, you give Google a perpetual, irrevocable, worldwide, royalty-free, and non-exclusive license to reproduce, adapt, modify, translate, publicly perform, publicly display and distribute Your Content through the Service for the sole purpose of enabling Google to provide you with the Service in accordance with Google's privacy policy.
11.2 Marketing License. You grant to Google a worldwide, royalty-free, non-transferable, and non-exclusive license during the Term to use Your Brand Features and Your Content to publicize or advertise that you are using the Service (for example, by using your marks in presentations, marketing materials, customer lists, financial reports and Web site listings (including links to your website), or by creating marketing or advertising materials that show screenshots of the Service in which Your Content is featured).
11.3 Authority to Grant Licenses. You represent and warrant to Google that you have all the rights, power and authority necessary to grant the above licenses.
12. Terminating this Agreement.
12.1 The Terms will continue to apply until terminated by either you or Google as set out below.
12.2 You may terminate your legal agreement with Google by removing the Maps API(s) code from your implementation and discontinuing your use of the Service at any time. You do not need to specifically inform Google when you stop using the Service.
12.3 Google reserves the right to terminate these Terms or discontinue the Service or any portion or feature for any reason and at any time without liability or other obligation to you, except as described under Section 4.4.
12.4 Nothing in this Section will affect Google's rights regarding provision of the Service under Section 4 (Provision of Service By Google) of the Terms.
12.5 When this legal agreement comes to an end, those Terms that by their nature are intended to continue indefinitely will continue to apply, including but not limited to: Sections 6 (Google's Proprietary Rights); 12.4 and 12.5 (Terminating this Agreement); 13 (Exclusion of Warranties); 14 (Limitation of Liability); 15 (Indemnity); and 19 (General Legal Terms).
13. EXCLUSION OF WARRANTIES.
13.1 NOTHING IN THESE TERMS, INCLUDING SECTIONS 13 AND 14, WILL EXCLUDE OR LIMIT GOOGLE'S WARRANTY OR LIABILITY FOR LOSSES THAT MAY NOT BE LAWFULLY EXCLUDED OR LIMITED BY APPLICABLE LAW. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF CERTAIN WARRANTIES OR CONDITIONS OR THE LIMITATION OR EXCLUSION OF LIABILITY FOR CERTAIN TYPES OF LOSS OR DAMAGES.
14.
15. Indemnities.
15.1 You hereby agree to defend, indemnify, and hold Google, its officers, directors, agents, affiliates, strategic partners, licensors and their suppliers ("the Indemnified Parties") harmless from and against any claim or liability arising out of:
(b) your Maps API Implementation;
(c) any use by users of your Maps API Implementation;
(d) any claim that your Maps API Implementation or Your Content violates any applicable law, including but not limited to any claim that your Maps API Implementation infringes the rights of a third party.
15.2 You will cooperate as fully as reasonably required in the defense of any claim. Google reserves the right, at its own expense, to assume the exclusive defense and control of any matter subject to indemnification by you. You acknowledge that damages for improper use of the Maps API(s) may be irreparable; therefore, Google is entitled to seek equitable relief, including but not limited to preliminary injunction and injunction, in addition to all other remedies.
16. Copyright Policies; Content Removal; Termination of Repeat Offenders' Accounts.
It is Google's policy to respond to notices of alleged copyright infringement that comply with applicable international intellectual property law (including, in the United States, the Digital Millennium Copyright Act) and to terminate the accounts of repeat offenders. Details of Google's policy can be found here.
17. Other Content.
17.1 The Service may include hyperlinks to other websites or content or resources. Google has no control over any web sites or resources that are provided by companies or persons other than Google. You acknowledge and agree that Google is not responsible for the availability of any such external sites or resources, and does not endorse any advertising, products, or other materials on or available from such websites or resources.
17.2 You acknowledge and agree that Google is not liable for any loss or damage that may be incurred by you as a result of the availability of those external sites or resources, or as a result of any reliance placed by you on the completeness, accuracy, or existence of any advertising, products, or other materials on, or available from, such websites or resources.
18. Language of the Terms.
18.1 Where Google has provided you with a translation of the English language version of the Terms, you agree that the translation is provided for your convenience only and that the English language version of the Terms will govern your relationship with Google.
18.2 If there is any contradiction between the English language version of the Terms and a translation of the Terms, the English language version will take precedence.
19. General Legal Terms.
19.1 Notices. You agree that Google may provide you with notices, including those regarding changes to the Terms, by email, regular mail, or postings on the Service.
19.2 No Waiver. You agree that if Google does not exercise or enforce any legal right or remedy available to it under the Terms (or any applicable law), Google will not be deemed to have waived its rights or remedies, and those rights and remedies will still be available to Google. Any waiver of any provision of these Terms will be effective only if Google expressly states in a signed writing that it is waiving a specified Term.
19.3 Severability. If any court of law that has jurisdiction rules that any provision of these Terms is invalid, then that provision will be removed from the Terms without affecting the rest of the Terms. The remaining provisions of the Terms will continue to be valid and enforceable.
19.4 Third Party Beneficiaries. You acknowledge and agree that each member of the group of companies of which Google is the parent, and each of the Indemnified Parties, will be third party beneficiaries to the Terms and that such other companies will be entitled to directly enforce, and rely upon, any provision of the Terms that confers a benefit on (or rights in favor of) them. Other than this, no other person or company will be a third party beneficiary to the Terms.
19.5 Assignment. The Terms may be assigned by Google and will inure to the benefit of Google, its successors, and assigns.
19.6 Governing Law and Jurisdiction; Injunctive Relief. The Terms, and your relationship with Google under the Terms, are governed by the laws of the State of California, USA, without regard to its conflict of laws provisions. You and Google agree to submit to the exclusive, personal jurisdiction of the federal or state courts of Santa Clara County, California, USA, to resolve any legal matter arising from or related to the Terms. Notwithstanding this, you agree that Google will be allowed to apply for injunctive remedies (or an equivalent type of urgent legal relief) in any jurisdiction.
19.7 Complete Agreement. These Terms constitute the whole legal agreement between you and Google in connection with, and govern your use of, the Service and Content. These Terms completely replace and supersede any prior agreements between you and Google, written or oral, in connection with the Service and Content.


I'm in the 2015 DevBootcamp cohort (Grasshoppers 2015!) and I'll be spending the next few months learning the world of web development. Previously I've been a localization project manager, instructional designer, eLearning developer, elementary school reading coach, floral designer and jewelry maker.
I'm a huge language nerd and I love learning about the nuances in languages and conveying meaning. My goal is to work within all these fields at once--bringing together a full force of instructional design, web development, languages and culture.
This web page is my first project in DevBootcamp! Its design and structure are still in progress, so I would love any feedback or ideas you may have to improve it. Also, take a look at my blog posts if you get a chance!


We completely share the values and ideas of the FreeCodeCamp platform.
We connect developers and help beginners. We get people into coding.
We organize events, talks, coding sessions and just have fun.


Simple and open source, works well for web apps mobile apps IoT games console tools prototypes
java -jar para-*.jar
Para was designed to be a simple and modular backend framework for object persistence and retrieval. It helps you build applications faster by taking care of the backend. It works on three levels - objects are stored in a NoSQL data store or any old relational database, then automatically indexed by a search engine and finally, cached. Para is also multitenant and has a clean and easy-to-use JSON API.
The name "pára" means "steam" in Bulgarian. And just like steam is used to power stuff, you can use Para to power your mobile or web application backend.
Why use it? Because it's open source, well documented and tested and it's just easier to use than most frameworks out there.
It's free to get started!
Get it through Maven or as an executable JAR package.
<dependency>
<groupId>com.erudika</groupId>
<artifactId>para-server</artifactId>
<version>1.49.0</version>
</dependency>
<dependency>
<groupId>com.erudika</groupId>
<artifactId>para-client</artifactId>
<version>1.49.0</version>
</dependency>
docker run erudikaltd/para:v1.49.0
We've built a full-blown Stack Overflow clone with Para in just about 7000 lines of code — check it out at scoold.com
We offer hosting and premium support at paraio.com where you can try Para online with a free developer account. Browse and manage your users and objects, do backups and edit permissions with a few clicks in the web console. By upgrading to a premium account you will be able to scale you projects up and down in seconds and manage multiple apps.


dep-graph.coffee |
|
|---|---|
_ = require 'underscore'
class DepGraph
constructor: ->
|
|
|
The internal representation of the dependency graph in the format
|
@map = {}
|
|
Add a direct dependency. Returns |
add: (id, depId) ->
@map[id] ?= []
return false if depId in @map[id]
@map[id].push depId
@map[id]
|
|
Generate a list of all dependencies (direct and indirect) for the given id, in logical order with no duplicates. |
getChain: (id) ->
|
|
First, get a list of all dependencies (unordered) |
deps = @descendantsOf id
|
|
Second, order them (using the Tarjan algorithm) |
chain = []
visited = {}
visit = (node) =>
return if visited[node] or node is id
visited[node] = true
for parent in @parentsOf(node)
visit parent
chain.unshift node
for leafNode in _.intersection(deps, @leafNodes()).reverse()
visit leafNode
chain
leafNodes: ->
allNodes = _.uniq _.flatten _.values @map
node for node in allNodes when !@map[node]?.length
parentsOf: (child) ->
node for node in _.keys(@map) when child in @map[node]
descendantsOf: (parent, descendants = [], branch = []) ->
descendants.push parent
branch.push parent
for child in @map[parent] ? []
if child in branch # cycle
throw new Error("Cyclic dependency from #{parent} to #{child}")
continue if child in descendants # duplicate
@descendantsOf child, descendants, branch.slice(0)
descendants[1..]
|
|
Export the class in Node, make it global in the browser. |
if module?.exports?
module.exports = DepGraph
else
@DepGraph = DepGraph
|


| About Dailyrotten |
|
Feedback
If you like this page, hate it, or would like to suggest changes,
<EMAIL_ADDRESS>is listening. This page
is experimental and somewhat different from what we usually offer, so please
do send your feedback.
Adding Stories
If you are a rotten newshound and you would like to suggest a story,
visit our submit page to
send us the URL. Stories that are accepted will have your name credited.
Posting Comments
In order to post comments to stories, you will have to
create an account.
Accounts will generally be validated within 24 hours, and of
course will be disabled if there is abuse.
Viewership
On the first full day this page went live, 100,000 people visited this Rotten
News page. Of course that was the day after the WTC attacks, so that number is
somewhat distorted. Right now this page gets between 50,000 and 75,000 people
every day.
Linking
We encourage everyone to link to this page; if you like it, others probably
will as well.
Other Rotten
Rotten
Gaping Maw
Celebrity Morgue
Mugshots
Rotten Store
Rate My Poo
Rate My Kitten
Rate My Finger
Penny Postcards
Phallic
Boners
Home
Make Dailyrotten your start page
|
|
|
March 08, 2002
Sock Bandit apprehended
Washington Post | Submitted by: allism
"Police said Derrick A. Cobb, 25, has on several occasions approached
girls, usually between 12 and 14 years old, and told them that he was
taking a survey. He would ask them what brands of socks and shoes they
prefer and would persuade them to take off their socks. When they did so,
police said, he would take the socks and flee."
|
|
Read article...
|
|
What are you doing with all the blood?
KSNW | Submitted by: sqrfruit
"Just days before a Newton supermarket pharmacist is to face a judge to
answer charges that he drew blood from people for a bogus study,
investigators still have no idea what he did with the blood taken during
the last eleven years... Battery charges were filed in the case because
of the alleged fraud involved since there was no study, and because the
victims were stuck in the arm with a needle."
|
|
Read article...
|
|
Molestin' judge gets 1/3 of the vote
Los Angeles Times | Submitted by: Hegor
File this under further proof that perhaps not everyone should be allowed
to vote. Orange County California Superior Court Judge Robert Kline has been
arraigned on child molestation charges. While he has not been convicted
of any charges, a federal judge did rule Kline a "danger to children". And
despite national media attention about his case, one third of Orange County
voters still felt that he should still continue to hold his judgeship.
|
|
Read article...
|
|
Teen pageantry rocked by scandal
Detroit Free Press | Submitted by: grogg
"The controversy began when a contestant stopped midway through her
routine in the talent competition, seemed to forget her dance moves,
and ran off the stage, music still playing. The other nine contestants
finished their routines without incident. Then, the pageant's executive
director whispered to the head judge and the audience was told that
due to technical difficulties, that contestant would get to do her
routine again. She went on to win." No crying in baseball,
but for both figure skating and pageantry (which are really the same sport)
it can be a winning tactic.
|
|
Read article...
|
|
More on the hit and run
Dallas Morning News | Submitted by: Awful Andy
"Ms. Mallard's attorney said that many details of the case have been
overblown and that his client is devastated by the accident and seeking
counseling... 'She is not the cold, harsh, inhumane person they would
have you think', defense attorney Mike Heiskell said. 'This girl is
not a monster'... In an affidavit, Maranda Daniel told police that she
had been out with Ms. Mallard and several other women in mid-February
when Ms. Mallard 'giggled' as she explained how she had hit
a man with her car."
|
|
Read article... and
This article...
|
|
China has already cloned human embryos
New Scientist | Submitted by: Soylent
"Chinese scientists are claiming a great leap forward in human cloning:
the creation of dozens of cloned embryos advanced enough to harvest
embryonic stem cells... Another team based at Shanghai No. 2 Medical
University claims to have derived stem cells from hybrid embryos composed
of human cells and rabbit eggs." This Clone Gap will grow even
more alarming as the Chinese push ahead with their research and we are left
behind in the dust by Fundamentalist christian politics.
|
|
Read article...
|
|
Holy Apparition Appears in Window of Double-wide
The Desert Sun | Submitted by: Clay Sills
Hundreds of believers flock to witness the appearance of a Cross Of Light
in the window of a double-wide trailer in California. Appropriately enough,
the trailer is owned by a couple named Jesus and Concepcion. "Thank you,
Thank you, Jesus" for putting in an appearance here at the trailer park.
|
|
Read article...
|
|
|
|
|


Join over 2000 renters who have found their home with us today or list your property and find the perfect tenant for you.
$300pw per tenant
2 Bedrooms
1 Bathroom
- Carpark
Unit 12, 11 High St, Kensington
Average Review: ★ ★ ★ ★ ★
$400pw per tenant
3 Bedrooms
1 Bathroom
2 Carparks
56 Barker St, Kensington
Average Review: ★ ★ ★ ★ ★
$300pw per tenant
1 Bedroom
1 Bathroom
- Carpark
Unit 114A, 221 High St, Kensington
Average Review: ★ ★ ★ ★ ★
$350pw per tenant
1 Bedrooms
1 Bathroom
- Carpark
Unit 12, 11 High St, Kensington
Average Review: ★ ★ ★ ★ ★
$300pw per tenant
2 Bedrooms
2 Bathroom
2 Carparks
56 Barker St, Kensington
Average Review: ★ ★ ★ ★ ★
$450pw per tenant
1 Bedroom
1 Bathroom
- Carpark
Unit 114A, 221 High St, Kensington
Average Review: ★ ★ ★ ★ ★