All Files (84.11% covered at 4.1 hits/line)
34 files in total.
321 relevant lines.
270 lines covered and
51 lines missed
- 1
class ApplicationController < ActionController::Base
- 1
protect_from_forgery with: :exception
- 1
helper_method :current_user, :current_dog, :matches, :states
- 1
def current_user
- 1
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
- 1
def current_dog
if Dog.where(id: session[:dog]).count == 1
@current_dog = Dog.find(session[:dog])
else
@current_dog = current_user.dogs.first
end
end
- 1
def authorize!
redirect_to root_path unless current_user
end
- 1
def matches
if current_dog
@matches = Observation.includes(:observed)
.where(observer_id: current_dog.id,
observed_id: current_dog.matches)
else
[]
end
end
end
- 1
class SearchPreferencesController < ApplicationController
- 1
def new
- 2
@search_preference = SearchPreference.new
end
- 1
def create
- 1
search = SearchPreference.create(search_params)
- 1
if current_user.dogs.count > 1
redirect_to new_observation_path
else
redirect_to observations_path
end
end
- 1
def edit
@search_preference = current_dog.search_preference
end
- 1
def update
current_dog.search_preference.update_attributes(search_params)
redirect_to new_observation_path
end
- 1
private
- 1
def search_params
params.require(:search_preference).permit(:dog_id,
:distance,
:ages => [],
:sizes => [],
:gender => [],
:breeds => [])
- 2
.each {|k,v| v.reject!(&:empty?) if v.class == Array }
end
end
- 1
class WelcomeController < ApplicationController
- 1
def index
end
end
- 1
module ApplicationHelper
end
- 1
module SearchPreferencesHelper
end
- 1
class Dog < ActiveRecord::Base
- 1
attr_reader :address, :location, :selection
- 1
belongs_to :user
- 1
has_one :search_preference
- 1
has_many :observations
- 1
has_many :views, class_name: "Observation", foreign_key: "observer_id"
- 1
has_many :viewed_by, class_name: "Observation", foreign_key: "observed_id"
- 1
has_attached_file :img, storage: :s3, bucket: ENV['BUCKET_NAME'], default_url: "http://loremflickr.com/300/300/puppy"
- 1
validates_attachment_content_type :img, :content_type => /\Aimage\/.*\Z/
- 1
validates :age, inclusion: { in: Selector.age,
message: "Please select an age option" }
- 1
validates :size, inclusion: { in: Selector.size,
message: "Please select a size option" }
- 1
validates :gender, inclusion: { in: Selector.gender,
message: "Please select a gender option" }
- 1
validates :breed, inclusion: { in: Selector.breed,
message: "Please select a breed option" }
- 1
validates :name, length: { in: 2..100 },
format: { with: /\A[a-z ,.\'-]+\z/i, }
- 1
validates :zipcode, length: { is: 5 , message: "Invalid Zipcode"},
format: { with: /[0-9]/, message: "Must be a number" }
- 1
scope :to_view, ->(id) { where.not(id: Dog.find(id).already_viewed) }
- 1
scope :by_breed, ->(requested) { where(breed: requested)}
- 1
scope :by_age, ->(requested) { where(age: requested)}
- 1
scope :by_size, ->(requested) { where(size: requested)}
- 1
scope :by_gender, ->(requested) { where(gender: requested)}
- 1
def self.filters(id)
@selection = to_view(id)
filter_breeds(id)
filter_ages(id)
filter_sizes(id)
filter_gender(id)
@selection
end
- 1
def self.breed_pref(id)
find(id).search_preference.breeds
end
- 1
def self.age_pref(id)
find(id).search_preference.ages
end
- 1
def self.gender_pref(id)
find(id).search_preference.gender
end
- 1
def self.size_pref(id)
find(id).search_preference.sizes
end
- 1
def self.distance_pref(id)
find(id).search_preference.distance
end
- 1
def self.filter_breeds(id)
if !breed_pref(id).include?("- ALL -") && !breed_pref(id).empty?
@selection = @selection.by_breed(breed_pref(id))
end
end
- 1
def self.filter_ages(id)
if !age_pref(id).include?("- ALL -") && !age_pref(id).empty?
@selection = @selection.by_age(age_pref(id))
end
end
- 1
def self.filter_sizes(id)
if !size_pref(id).include?("- ALL -") && !size_pref(id).empty?
@selection = @selection.by_size(size_pref(id))
end
end
- 1
def self.filter_gender(id)
if !gender_pref(id).include?("- ALL -") && !size_pref(id).empty?
@selection = @selection.by_gender(gender_pref(id))
end
end
- 1
def self.filter_distance(id)
if !distance_pref(id).empty?
@selection = @selection.by_distance(distance_pref(id))
end
end
- 1
def location
# Geokit::Geocoders::GoogleGeocoder.geocode(zipcode, :bias => 'us')
end
- 1
def distance(other_dog)
# location.distance_to(other_dog.location).round(1)
"#{rand(9)}.#{rand(9)}"
end
- 1
def matches
viewed_by.where(liked: true).map(&:observer_id).select do |like|
views.where(liked: true).map(&:observed_id).include?(like)
end
end
- 1
def already_viewed
views.map(&:observed_id) << id
end
end
- 1
class Observation < ActiveRecord::Base
- 1
belongs_to :observer, class_name: "Dog"
- 1
belongs_to :observed, class_name: "Dog"
end
- 1
class SearchPreference < ActiveRecord::Base
- 1
belongs_to :dog
- 1
serialize :breeds, Array
- 1
serialize :ages, Array
- 1
serialize :sizes, Array
- 1
serialize :gender, Array
end
- 1
class Selector
- 1
def self.breed
[
"affenpinscher",
"afghan hound",
"afghan shepherd",
"aidi",
"airedale terrier",
"akbash",
"akita inu",
"alano espaÃ±ol",
"alaskan klee kai",
"alaskan malamute",
"alpine dachsbracke",
"alpine spaniel",
"american akita",
"american bulldog",
"american cocker spaniel",
"american eskimo dog",
"american foxhound",
"american hairless terrier",
"american pit bull terrier",
"american staffordshire terrier",
"american water spaniel",
"anatolian shepherd dog",
"andalusian hound",
"appenzeller sennenhund",
"ariege pointer",
"ariegeois",
"armant",
"armenian gampr dog",
"artois hound",
"australian cattle dog",
"australian kelpie",
"australian shepherd",
"australian silky terrier",
"australian stumpy tail cattle dog[10]",
"australian terrier",
"austrian black and tan hound",
"austrian pinscher",
"azawakh",
"bakharwal dog",
"barbet",
"basenji",
"basque ratter",
"basque shepherd dog",
"basset bleu de gascogne",
"basset fauve de bretagne",
"basset griffon vendÃ©en, grand",
"basset griffon vendÃ©en, petit",
"basset hound",
"bavarian mountain hound",
"beagle",
"beagle-harrier",
"bearded collie",
"beauceron",
"bedlington terrier",
"belgian shepherd dog (groenendael)",
"belgian shepherd dog (laekenois)",
"belgian shepherd dog (malinois)",
"belgian shepherd (tervuren)",
"bergamasco shepherd",
"berger blanc suisse",
"berger picard",
"berner laufhund",
"bernese mountain dog",
"bichon frische",
"billy",
"black and tan coonhound",
"black and tan virginia foxhound",
"black norwegian elkhound",
"black russian terrier",
"blackmouth cur",
"bleu de gascogne, grand",
"bleu de gascogne, petit",
"bloodhound",
"blue heeler",
"blue lacy",
"blue paul terrier",
"bluetick coonhound",
"boerboel",
"bohemian shepherd",
"bolognese",
"border collie",
"border terrier",
"borzoi",
"bosnian coarse-haired hound",
"boston terrier",
"bouvier des ardennes",
"bouvier des flandres",
"boxer",
"boykin spaniel",
"bracco italiano",
"braque d'auvergne",
"braque du bourbonnais",
"braque du puy",
"braque francais",
"braque saint-germain",
"brazilian dogo",
"brazilian terrier",
"briard",
"briquet griffon vendÃ©en",
"brittany",
"broholmer",
"bruno jura hound",
"bucovina shepherd dog",
"bull and terrier",
"bull terrier",
"bull terrier (miniature)",
"bulldog",
"bullenbeisser",
"bullmastiff",
"bully kutta",
"burgos pointer",
"cairn terrier",
"canaan dog",
"canadian eskimo dog",
"cane corso",
"cantabrian water dog",
"carolina dog",
"carpathian shepherd dog",
"catahoula cur",
"catalan sheepdog",
"caucasian shepherd dog",
"cavalier king charles spaniel",
"central asian shepherd dog",
"cesky fousek",
"cesky terrier",
"chesapeake bay retriever",
"chien franÃ§ais blanc et noir",
"chien franÃ§ais blanc et orange",
"chien franÃ§ais tricolore",
"chien-gris",
"chihuahua",
"chilean fox terrier",
"chinese chongqing dog",
"chinese crested dog",
"chinese imperial dog",
"chinook",
"chippiparai",
"chow chow",
"cierny sery",
"cirneco dell'etna",
"clumber spaniel",
"collie, rough",
"collie, smooth",
"combai",
"cordoba fighting dog",
"coton de tulear",
"cretan hound",
"croatian sheepdog",
"cumberland sheepdog",
"curly coated retriever",
"cursinu",
"czechoslovak wolfdog",
"dachshund",
"dalmatian",
"dandie dinmont terrier",
"danish swedish farmdog",
"decker rat terrier",
"deutsche bracke",
"doberman pinscher",
"dogo argentino",
"dogo cubano",
"dogue de bordeaux",
"drentse patrijshond",
"drever",
"dunker",
"dutch shepherd dog",
"dutch smoushond",
"east siberian laika",
"east-european shepherd",
"elo",
"english cocker spaniel",
"american english coonhound",
"english foxhound",
"english mastiff",
"english setter",
"english shepherd",
"english springer spaniel",
"english toy terrier (black & tan)",
"english water spaniel",
"english white terrier",
"entlebucher mountain dog",
"estonian hound",
"estrela mountain dog",
"eurasier",
"field spaniel",
"fila brasileiro",
"finnish hound",
"finnish lapphund",
"finnish spitz",
"flat-coated retriever",
"formosan mountain dog",
"fox terrier (smooth)",
"fox terrier, wire",
"french brittany",
"french bulldog",
"french spaniel",
"gaddi dog",
"galgo espaÃ±ol",
"galician cattle dog",
"gascon saintongeois",
"georgian shepherd dog",
"german longhaired pointer",
"german pinscher",
"german rough-haired pointer",
"german shepherd dog",
"german shorthaired pointer",
"german spaniel",
"german spitz",
"german wirehaired pointer",
"giant schnauzer",
"glen of imaal terrier",
"golden retriever",
"gordon setter",
"gran mastÃn de borÃnquen",
"grand anglo-franÃ§ais blanc et noir",
"grand anglo-franÃ§ais blanc et orange",
"grand anglo-franÃ§ais tricolore",
"grand griffon vendÃ©en",
"great dane",
"great pyrenees",
"greater swiss mountain dog",
"greek harehound",
"greenland dog",
"greyhound",
"griffon bleu de gascogne",
"griffon bruxellois",
"griffon fauve de bretagne",
"griffon nivernais",
"guatemalan dogo",
"hamiltonstÃ¶vare",
"hanover hound",
"hare indian dog",
"harrier",
"havanese",
"hawaiian poi dog",
"himalayan sheepdog",
"hokkaido",
"hortaya borzaya",
"hovawart",
"huntaway",
"hygenhund",
"ibizan hound",
"icelandic sheepdog",
"indian pariah dog",
"indian spitz",
"irish red and white setter",
"irish setter",
"irish terrier",
"irish water spaniel",
"irish wolfhound",
"istrian coarse-haired hound",
"istrian shorthaired hound",
"italian greyhound",
"jack russell terrier",
"jagdterrier",
"japanese chin",
"japanese spitz",
"japanese terrier",
"kaikadi",
"kai ken",
"kangal dog",
"kanni",
"karakachan dog",
"karelian bear dog",
"karst shepherd",
"keeshond",
"kerry beagle",
"kerry blue terrier",
"king charles spaniel",
"king shepherd",
"kintamani",
"kishu",
"komondor",
"kooikerhondje",
"koolie",
"korean jindo dog",
"kromfohrlÃ¤nder",
"kumaon mastiff",
"kunming wolfdog",
"kurÄ«",
"kuvasz",
"kyi-leo",
"labrador husky",
"labrador retriever",
"lagotto romagnolo",
"lakeland terrier",
"lancashire heeler",
"landseer",
"lapponian herder",
"leonberger",
"lhasa apso",
"lithuanian hound",
"longhaired whippet",
"mahratta greyhound",
"majorca shepherd dog",
"maltese",
"manchester terrier",
"maremma sheepdog",
"mcnab",
"mexican hairless dog",
"miniature australian shepherd",
"miniature american shepherd",
"miniature fox terrier",
"miniature pinscher",
"miniature schnauzer",
"miniature shar pei",
"mioritic",
"molossus",
"montenegrin mountain hound",
"moscow watchdog",
"moscow water dog",
"mountain cur",
"mucuchies",
"mudhol hound",
"mudi",
"neapolitan mastiff",
"newfoundland",
"new zealand heading dog",
"norfolk spaniel",
"norfolk terrier",
"norrbottenspets",
"north country beagle",
"northern inuit dog",
"norwegian buhund",
"norwegian elkhound",
"norwegian lundehund",
"norwich terrier",
"nova scotia duck-tolling retriever",
"old croatian sighthound",
"old danish pointer",
"old english sheepdog",
"old english terrier",
"old german shepherd dog",
"old time farm shepherd",
"olde english bulldogge",
"otterhound",
"pachon navarro",
"pandikona",
"paisley terrier",
"papillon",
"parson russell terrier",
"patterdale terrier",
"pekingese",
"perro de presa canario",
"perro de presa mallorquin",
"peruvian hairless dog",
"phalÃ¨ne",
"pharaoh hound",
"phu quoc ridgeback dog",
"picardy spaniel",
"plott hound",
"podenco canario",
"pointer",
"poitevin",
"polish greyhound",
"polish hound",
"polish hunting dog",
"polish lowland sheepdog",
"polish tatra sheepdog",
"pomeranian",
"pont-audemer spaniel",
"poodle",
"porcelaine",
"portuguese podengo",
"portuguese pointer",
"portuguese water dog",
"posavac hound",
"pudelpointer",
"pug",
"puli",
"pumi",
"pungsan dog",
"pyrenean mastiff",
"pyrenean shepherd",
"rafeiro do alentejo",
"rajapalayam",
"rampur greyhound",
"rastreador brasileiro",
"ratonero bodeguero andaluz",
"ratonero valenciano",
"rat terrier",
"redbone coonhound",
"rhodesian ridgeback",
"rottweiler",
"russian spaniel",
"russian toy",
"russian tracker",
"russo-european laika",
"russell terrier",
"saarlooswolfhond",
"sabueso espaÃ±ol",
"saint-usuge spaniel",
"sakhalin husky",
"saluki",
"samoyed",
"santal hound",
"sapsali",
"Å¡arplaninac",
"schapendoes",
"schipperke",
"standard schnauzer",
"schweizer laufhund",
"schweizerischer niederlaufhund",
"scotch collie",
"scottish deerhound",
"scottish terrier",
"sealyham terrier",
"segugio italiano",
"seppala siberian sleddog",
"serbian hound",
"serbian tricolour hound",
"seskar seal dog",
"shar pei",
"shetland sheepdog",
"shiba inu",
"shih tzu",
"shikoku",
"shiloh shepherd dog",
"siberian husky",
"silken windhound",
"sinhala hound",
"skye terrier",
"sloughi",
"slovak cuvac",
"slovakian rough-haired pointer",
"small greek domestic dog",
"soft-coated wheaten terrier",
"south russian ovcharka",
"southern hound",
"spanish mastiff",
"spanish water dog",
"spinone italiano",
"sporting lucas terrier",
"st. bernard",
"st. john's water dog",
"stabyhoun",
"staffordshire bull terrier",
"stephens cur",
"styrian coarse-haired hound",
"sussex spaniel",
"swedish lapphund",
"swedish vallhund",
"tahltan bear dog",
"taigan",
"talbot",
"tamaskan dog",
"teddy roosevelt terrier",
"telomian",
"tennessee treeing brindle",
"tenterfield terrier",
"terceira mastiff",
"thai bangkaew dog",
"thai ridgeback",
"tibetan mastiff",
"tibetan spaniel",
"tibetan terrier",
"tornjak",
"tosa",
"toy bulldog",
"toy fox terrier",
"toy manchester terrier",
"toy trawler spaniel",
"transylvanian hound",
"treeing cur",
"treeing walker coonhound",
"trigg hound",
"tweed water spaniel",
"tyrolean hound",
"uruguayan cimarron",
"vanjari hound",
"villano de las encartaciones",
"vizsla",
"volpino italiano",
"weimaraner",
"welsh corgi, cardigan",
"welsh corgi, pembroke",
"welsh sheepdog",
"welsh springer spaniel",
"welsh terrier",
"west highland white terrier",
"west siberian laika",
"westphalian dachsbracke",
"wetterhoun",
"whippet",
"white shepherd",
"wirehaired pointing griffon",
"wirehaired vizsla",
"yorkshire terrier"
- 978
].map {|e| e.split.map(&:capitalize).join(' ') }
end
- 1
def self.breed_list
- 1
self.breed.unshift("Breed")
end
- 1
def self.size
- 16
["Tiny: Less than 10 lbs", "Small: 10lbs - 30lbs", "Medium: 30lbs - 50lbs", "Large: Over 50lbs"]
end
- 1
def self.size_list
size.unshift("Size")
end
- 1
def self.age
- 17
["Puppy: Less than a year", "Young: 1yr - 2yr", "Adult: 2yrs - 9yrs", "Senior: 10yrs and older"]
end
- 1
def self.age_list
- 1
age.unshift("Age")
end
- 1
def self.gender
- 2
["Male", "Female"]
end
- 1
def self.gender_list
- 1
gender.unshift("Gender")
end
- 1
def self.zipcodes
[
- 1
"80110",
"80202",
"80203",
"80204",
"80205",
"80206",
"80207",
"80209",
"80210",
"80211",
"80214",
"80218",
"80219",
"80222",
"80223",
"80224",
"80226",
"80227",
"80230",
"80232",
"80236",
"80237",
"80238",
"80239",
"80246",
"80249",
"80264",
"80290",
"80293",
"80294"
]
end
end
- 1
class User < ActiveRecord::Base
- 1
has_many :dogs
- 1
def self.find_or_create_from_auth(auth)
user = User.find_or_create_by(provider: auth.provider, uid: auth.uid)
user.first_name = auth.info.first_name
user.last_name = auth.info.last_name
user.email = auth.info.email
user.oauth_token = auth.credentials.token
user.image_url = auth.info.image
user.save!
user
end
end
- 1
require File.expand_path('../boot', __FILE__)
# Pick the frameworks you want:
- 1
require "active_model/railtie"
- 1
require "active_job/railtie"
- 1
require "active_record/railtie"
- 1
require "action_controller/railtie"
- 1
require "action_mailer/railtie"
- 1
require "action_view/railtie"
- 1
require "sprockets/railtie"
# require "rails/test_unit/railtie"
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
- 1
Bundler.require(*Rails.groups)
- 1
module UnleashApp
- 1
class Application < Rails::Application
# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded.
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
# config.time_zone = 'Central Time (US & Canada)'
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
# config.i18n.default_locale = :de
# Do not swallow errors in after_commit/after_rollback callbacks.
- 1
config.active_record.raise_in_transactional_callbacks = true
end
end
- 1
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
- 1
require 'bundler/setup' # Set up gems listed in the Gemfile.
# Load the Rails application.
- 1
require File.expand_path('../application', __FILE__)
# Initialize the Rails application.
- 1
Rails.application.initialize!
- 1
Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb.
# The test environment is used exclusively to run your application's
# test suite. You never need to work with it otherwise. Remember that
# your test database is "scratch space" for the test suite and is wiped
# and recreated between test runs. Don't rely on the data there!
- 1
config.cache_classes = true
# Do not eager load code on boot. This avoids loading your whole application
# just for the purpose of running a single test. If you are using a tool that
# preloads Rails for running tests, you may have to set it to true.
- 1
config.eager_load = false
# Configure static file server for tests with Cache-Control for performance.
- 1
config.serve_static_files = true
- 1
config.static_cache_control = 'public, max-age=3600'
# Show full error reports and disable caching.
- 1
config.consider_all_requests_local = true
- 1
config.action_controller.perform_caching = false
# Raise exceptions instead of rendering exception templates.
- 1
config.action_dispatch.show_exceptions = false
# Disable request forgery protection in test environment.
- 1
config.action_controller.allow_forgery_protection = false
# Tell Action Mailer not to deliver emails to the real world.
# The :test delivery method accumulates sent emails in the
# ActionMailer::Base.deliveries array.
- 1
config.action_mailer.delivery_method = :test
# Randomize the order test cases are executed.
- 1
config.active_support.test_order = :random
# Print deprecation notices to the stderr.
- 1
config.active_support.deprecation = :stderr
# Raises error for missing translations
# config.action_view.raise_on_missing_translations = true
end
# Be sure to restart your server when you modify this file.
# Version of your assets, change this if you want to expire all your assets.
- 1
Rails.application.config.assets.version = '1.0'
# Add additional assets to the asset load path
# Rails.application.config.assets.paths << Emoji.images_path
# Precompile additional assets.
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
# Rails.application.config.assets.precompile += %w( search.js )
# Be sure to restart your server when you modify this file.
# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
# Rails.backtrace_cleaner.remove_silencers!
# Be sure to restart your server when you modify this file.
- 1
Rails.application.config.action_dispatch.cookies_serializer = :json
# Be sure to restart your server when you modify this file.
# Configure sensitive parameters which will be filtered from the log file.
- 1
Rails.application.config.filter_parameters += [:password]
# Be sure to restart your server when you modify this file.
# Add new inflection rules using the following format. Inflections
# are locale specific, and you may define rules for as many different
# locales as you wish. All of these examples are active by default:
# ActiveSupport::Inflector.inflections(:en) do |inflect|
# inflect.plural /^(ox)$/i, '\1en'
# inflect.singular /^(ox)en/i, '\1'
# inflect.irregular 'person', 'people'
# inflect.uncountable %w( fish sheep )
# end
# These inflection rules are supported but not enabled by default:
# ActiveSupport::Inflector.inflections(:en) do |inflect|
# inflect.acronym 'RESTful'
# end
# Be sure to restart your server when you modify this file.
# Add new mime types for use in respond_to blocks:
# Mime::Type.register "text/richtext", :rtf
- 1
Rails.application.config.middleware.use OmniAuth::Builder do
- 1
provider :facebook, ENV['facebook_key'], ENV['facebook_secret'],
:image_size => 'large'
end
- 1
Paperclip::Attachment.default_options[:url] = ':s3_domain_url'
- 1
Paperclip::Attachment.default_options[:path] = '/:class/:attachment/:id_partition/:style/:filename'
# Be sure to restart your server when you modify this file.
- 1
Rails.application.config.session_store :cookie_store, key: '_unleash-app_session'
# Be sure to restart your server when you modify this file.
# This file contains settings for ActionController::ParamsWrapper which
# is enabled by default.
# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
- 1
ActiveSupport.on_load(:action_controller) do
- 1
wrap_parameters format: [:json] if respond_to?(:wrap_parameters)
end
# To enable root element in JSON for ActiveRecord objects.
# ActiveSupport.on_load(:active_record) do
# self.include_root_in_json = true
# end
- 1
Rails.application.routes.draw do
- 1
root to: "welcome#index"
- 1
resources :users, only: [:create]
- 1
resources :dogs, only: [:new, :create, :show, :index]
- 1
resources :matches, onlay: [:index]
- 1
resources :search_preferences, only: [:new, :create, :edit, :update]
- 1
resources :observations, only: [:index, :new, :create]
- 1
get "auth/:provider/callback", to: "sessions#create"
- 1
delete "/logout", to: "sessions#destroy"
- 1
get "/logout", to: "sessions#destroy"
end
- 1
require 'rails_helper'
- 1
RSpec.describe SearchPreferencesController, :type => :controller do
- 1
describe '#new' do
- 1
it "responds with success" do
- 1
get :new
- 1
expect(response.status).to eq(200)
end
end
- 1
describe '#create' do
- 1
it "responds with success" do
- 1
post :create, {search_preference: {breeds: []}}
expect(response.status).to eq(302)
end
end
- 1
describe '#edit' do
- 1
it "responds with success" do
- 1
get :new
- 1
expect(response.status).to eq(200)
end
end
end
- 1
require "rails_helper"
- 1
RSpec.describe WelcomeController, :type => :controller do
- 1
describe "GET index" do
- 1
it "returns http success" do
- 1
get :index
- 1
expect(response).to have_http_status(:success)
end
end
end
- 1
require "rails_helper"
- 1
describe "The Welcome page" do
- 1
include Capybara::DSL
- 1
let(:user) { User.create(first_name: "krista") }
- 1
it "has a title" do
- 1
visit root_path
expect(page).to have_content("UNLEASH")
end
- 1
it "has link to login" do
- 1
visit root_path
expect(page).to have_link("GET STARTED")
end
- 1
def mock_user
allow_any_instance_of(ApplicationController)
.to receive(:current_user).and_return(user)
end
end
- 1
require 'rails_helper'
- 1
RSpec.describe Dog, :type => :model do
- 9
let(:user) { User.create(first_name: "Krista") }
- 1
let(:dog) { { name: "Rocko",
age: Selector.age.first,
size: Selector.size.first,
zipcode: 80218,
gender: "Male",
breed: "poodle",
- 8
user_id: user.id} }
- 1
it "is invalid without a name" do
- 1
dog[:name] = nil
- 1
rocko = Dog.new(dog)
- 1
expect(rocko).not_to be_valid
end
- 1
it "is invalid without an age" do
- 1
dog[:age] = nil
- 1
rocko = Dog.new(dog)
- 1
expect(rocko).not_to be_valid
end
- 1
it "is not valid without a size" do
- 1
dog[:size] = nil
- 1
rocko = Dog.new(dog)
- 1
expect(rocko).not_to be_valid
end
- 1
it "is not valid without a breed a breed" do
- 1
dog[:breed] = nil
- 1
rocko = Dog.new(dog)
- 1
expect(rocko).not_to be_valid
end
- 1
it "has a correctly formatted zipcode address" do
- 1
dog[:zipcode] = "kjhwe"
- 1
rocko = Dog.new(dog)
- 1
expect(rocko).not_to be_valid
end
- 1
it "rejects names that are too short" do
- 1
dog[:name] = "a"
- 1
rocko = Dog.new(dog)
- 1
expect(rocko).not_to be_valid
end
- 1
it "rejects display name thats too long" do
- 1
dog[:name] = "alwklkjwlkjlkjlkjlkjlkjljlkjlkjlkjlkjlkjlkjljjelwkejlwkejlwkej
lwekjwlekjwlekjwlkejlwkejlwkejlwkejwlekj"
- 1
rocko = Dog.new(dog)
- 1
expect(rocko).not_to be_valid
end
- 1
it "has a user" do
- 1
rocko = Dog.create(dog)
- 1
assert (rocko.user)
end
end
- 1
require 'rails_helper'
- 1
RSpec.describe Observation, :type => :model do
- 4
let(:user) { User.create(first_name: "Krista") }
- 1
let(:dog) { { name: "Rocko",
age: Selector.age.first,
size: Selector.size.first,
zipcode: 80218,
gender: "Male",
breed: "poodle",
- 3
user_id: user.id} }
- 1
it "has an observer" do
- 1
rocko = Dog.create(dog)
- 1
bella = Dog.create(dog)
- 1
ob = Observation.create(observer_id: rocko.id, observed_id: bella.id, distance: "8")
- 1
assert ob.observer
end
- 1
it "has an observed" do
- 1
rocko = Dog.create(dog)
- 1
bella = Dog.create(dog)
- 1
ob = Observation.create(observer_id: rocko.id, observed_id: bella.id, distance: "8")
- 1
assert ob.observed
end
- 1
it "is has a distance" do
- 1
rocko = Dog.create(dog)
- 1
bella = Dog.create(dog)
- 1
ob = Observation.create(observer_id: rocko.id, observed_id: bella.id, distance: "8")
- 1
assert_equal "8", ob.distance
end
end
- 1
require 'rails_helper'
- 1
RSpec.describe SearchPreference, :type => :model do
- 5
let(:user) { User.create(first_name: "Krista") }
- 5
let(:dog) { Dog.create(name: "Rocko",
age: Selector.age.first,
size: Selector.size.first,
zipcode: 80218,
gender: "Male",
breed: "poodle",
user_id: user.id) }
- 1
let(:search) { { breeds: ["- All -"],
ages: [""],
sizes: ["Tiny: Less than 10 lbs"],
gender: ["Male", "Femail"],
distance: ["8"],
- 4
dog_id: dog.id } }
- 1
it "it has an array of ages" do
- 1
new_search = SearchPreference.create(search)
- 1
expect(Array).to eq(new_search.ages.class)
end
- 1
it "it has an array of sizes" do
- 1
new_search = SearchPreference.create(search)
- 1
expect(Array).to eq(new_search.sizes.class)
end
- 1
it "it has an array of genderss" do
- 1
new_search = SearchPreference.create(search)
- 1
expect(Array).to eq(new_search.gender.class)
end
- 1
it "it has a dog" do
- 1
new_search = SearchPreference.create(search)
- 1
expect(dog).to eq(new_search.dog)
end
end
- 1
require 'rails_helper'
- 1
RSpec.describe Selector, :type => :model do
- 1
it "has a list of breeds" do
- 1
assert Selector.breed_list.include?("poodle")
end
- 1
it "has an age list" do
- 1
assert Selector.age_list.include?("Puppy: Less than a year")
end
- 1
it "is has a gender_list" do
- 1
assert Selector.gender_list.include?("Male")
end
- 1
it "is has a zipcodes_list" do
- 1
assert Selector.zipcodes.include?("80218")
end
end
- 1
require 'rails_helper'
- 1
RSpec.describe User, :type => :model do
- 4
let(:user) { User.new(first_name: "Krista") }
- 1
let(:dog) { { name: "Rocko",
age: Selector.age.first,
size: Selector.size.first,
zipcode: 80218,
gender: "Male",
breed: "poodle",
user_id: user.id} }
- 1
it "it can have a first_name" do
- 1
expect(user).to be_valid
end
- 1
it "it can have a last_name" do
- 1
user.last_name = "Nelson"
- 1
expect(user).to be_valid
end
- 1
it "is has dogs" do
- 1
user.save
- 1
assert_equal [], user.dogs
end
end
# This file is copied to spec/ when you run 'rails generate rspec:install'
- 1
ENV["RAILS_ENV"] ||= "test"
- 1
require "capybara/rspec"
- 1
require "spec_helper"
- 1
require File.expand_path("../../config/environment", __FILE__)
- 1
require "rspec/rails"
# Add additional requires below this line. Rails is not loaded until this point!
# Requires supporting ruby files with custom matchers and macros, etc, in
# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
# run as spec files by default. This means that files in spec/support that end
# in _spec.rb will both be required and run as specs, causing the specs to be
# run twice. It is recommended that you do not name files matching this glob to
# end with _spec.rb. You can configure this pattern with the --pattern
# option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
#
# The following line is provided for convenience purposes. It has the downside
# of increasing the boot-up time by auto-requiring all files in the support
# directory. Alternatively, in the individual `*_spec.rb` files, manually
# require only the support files necessary.
#
# Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
# Checks for pending migrations before tests are run.
# If you are not using ActiveRecord, you can remove this line.
- 1
ActiveRecord::Migration.maintain_test_schema!
- 1
RSpec.configure do |config|
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
- 1
config.fixture_path = "#{::Rails.root}/spec/fixtures"
# If you're not using ActiveRecord, or you'd prefer not to run each of your
# examples within a transaction, remove the following line or assign false
# instead of true.
- 1
config.use_transactional_fixtures = true
# RSpec Rails can automatically mix in different behaviours to your tests
# based on their file location, for example enabling you to call `get` and
# `post` in specs under `spec/controllers`.
#
# You can disable this behaviour by removing the line below, and instead
# explicitly tag your specs with their type, e.g.:
#
# RSpec.describe UsersController, :type => :controller do
# # ...
# end
#
# The different available types are documented in the features, such as in
# https://relishapp.com/rspec/rspec-rails/docs
- 1
config.infer_spec_type_from_file_location!
end


Architecture¶
The orchestrator is a utility that is designed to simplify the creation (and removal) of RedHat OKD clusters. It introduces a number of concepts and accomplishes it through the use of a number of components.
The utility is in an early stage of development and is evolving rapidly. The goal is to provide a simple and rapid and automated means of instantiating a RedHat OKD-based compute cluster with minimal effort.
The Concept¶
The orchestrator is designed to allow the deployment of Clusters and their Bastion control servers with minimal effort from the comfort of a development laptop.
Creation and destruction is handled by logic managed from within
two Python command-line modules; create.py
and destroy.py
. The modules
call upon a number of underlying processes (essentially carried out by
Terraform and Ansible) in order to create and destroy your hardware.
Using a convenient container image (or your own) you are able to create and manage clusters across a number of cloud providers using simple commands.
Organisation¶
The orchestrator implementation is distributed over a number of directories, which we’ll explore later.
It consists of the following components you’re encouraged to adopt and edit (illustrated in green above): -
Credentials and other sensitive variables
Deployment configuration files
Provider Variables
Additionally, the following built-in components are used to create machine images and instantiate hardware: -
Ansible playbooks
Yacker templates
Terraform templates
A Jinja2 rendering process
A create utility
A destroy utility
We’ll briefly explore each component below.
Ansible Playbooks¶
Located in the ansible
directory, a number of built-in playbooks,
managed by the create
and destroy
utilities (described below),
provide value-added facilities including the configuration of the bastion
machine, and pre and post OKD playbooks used to manage SSL certificate
generation and the installation of additional software like the ACME
SSL controller.
Deployment configurations¶
Located in the deployments
directory, a Deployment describes your
cluster; providing a high-level description of the cluster
hardware and software requirements that include the number and
types of the compute instances used for your OKD nodes and the
settings for the OKD software.
The deployment is defined in a YAML file called configuration.yaml
.
You can have more than one deployment configuration, each describing a separate OKD cluster.
Deployment files are located in sub-directories of the deployments
directory.
Deployment directories are also used to house your own SSL certificates if you have them. You can, of course, use certbot/Let’s Encrypt to automatically create them for your site if you wish.
Further details of the deployment configuration can be found in the document Anatomy of a Deployment Configuration.
You can provide a path to your own (“out-of town”) deployment configuration by providing a path the parent of your own deployments directory in the
TF_VAR_deployments_directory
environment variable.
Provider Variables¶
Located in the provider-env
directory, a number of provider-specific
shell-scripts act as templates for the environment variables you are required
to provide for the OKD Orchestrator.
You typically copy a template and name it setenv.sh
and then adjust the
content as described. You should find built-in templates for Amazon and Google
cloud providers.
Terraform Templates¶
In the terraform
directory, these files, many of which are
created automatically based on the content of your deployment configuration,
provide provisioning instructions for the HashiCorp Terraform tool.
Terraform is used to create and destroy the OKD cluster hardware. It is a form of IaC tool that automates the construction of cloud infrastructure including additional volumes, networks, subnets and security groups.
It’s language is declarative, meaning that you simply need to describe what is connected to what and it manages the creation of objects and their connections.

Yacker scripts¶
In the yacker/3.11
directory, these files, typically of no particular
interest to you, provides provisioning instructions for OKD-compliant base
images for each cloud provider.
Yacker is used to create base images for the compute instances. It is a YAML wrapper around Packer. It is driven by YAML files that describe installation instructions that are executed on a base Operating System like CentOS in order to form an OS and utilities suitable for OKD.
The YAML template files are organised in directories relating to OKD
version and cloud provider. For example there is an AWS bastion image
template for OKD 3.11 in yacker/3.11/aws
.
Yacker is employed once per OKD release and cloud provider combination. The images produced are suitable for any cluster for the given OKD release on that cloud provider.
Credentials¶
Finally, in the root of the project, there are a number of files you need to provide, depending on the cloud provider your’re deploying into. There’s always the public and private files for the SSH key that’s used to create and connect to physical machines. You may also be required to put other files in the project root. One example is the Google Compute Engine (GCE) credentials file if you’re deploying to GCE. This is a JSON file you douwnload form your Google account.
None of these files are committed to revision control of course, you have to provide them and keep them local.
Tools¶
The Create Utility¶
Located in the root of the OKD Orchestrator project, create.py
is the
simplified utility wrapper that acts as the creator of your cluster and
interpreter of your deployment configuration.
It provides a simplified interface that allows you to create a cluster (and then install the OKD software) with a command like:
$ ./create.py --cluster
The Destroy Utility¶
A complement of create.py
, destroy.py
, found in the root of
the OKD orchestrator project, is used to quickly and conveniently
tear-down your OKD cluster once you no longer need it.
destroy
relies on cluster hardware state information that’s automatically
generated by the Terraform process employed by the create.py
utility.
This state can be local (on your development machine) or locked and managed for team access as defined by your configuration using a combination of S3 object storage and Dynamo database services that you setup and are provided by AWS.
See Anatomy of a Deployment Configuration for further details.
Jinja2 Templating Process¶
A file rendering process based on the Jinja2 templating language
is used by the create
utility to dynamically render Terraform and
Ansible inventory files based on the content of your
deployment configuration.
It is how your names and properties in your configuration get into your terraform and inventory files but it’s execution and design is beyond the scope of this documentation.


| I l@ve RuBoard |
Here are some of Python's distinctive features:
Python code lives in text files ending in .py . The program compiles the text files to a machine-independent set of bytecodes in a way similar to Java, which are usually saved in files ending in .pyc; these can then later be imported and run quickly. The source is recompiled only when necessary. Python's speed is of a similar order of magnitude to Java or Perl.
All languages support basic types such as strings, integers, and floating-point numbers. Python has higher-level built-in types such as lists and dictionaries, and high-level operations to work on them. For example, you can load a file into a string with one line and split it into chunks based on a delimiter with another line. This means writing less code. It also means that the speed is better than you might suppose: the built-in functions have been written in C and extensively optimized by a lot of smart people, and are faster than C or C++ code you might write yourself.
You can use Python interactively, entering expressions one line at a time. This mode allows you to try ideas quickly and cheaply, testing each function or method as you write it. This style of programming encourages experimentation and ideas. As with Smalltalk (with which it has much in common), the interactive mode is perhaps the major reason your productivity will increase with Python.
Every Python program has the ability to compile and execute text files while running; there is no distinction between the runtime and development environments. This makes it a great macro language for other programs.
The syntax is straightforward and obvious, and there are no cryptic special characters to learn. Indentation delimits blocks, so the visual structure of a chunk of code mirrors its logical structure; it's easy to read and learn. Eric Raymond, one of the leaders of the Open Source movement, now recommends Python as the ideal first language to learn. (See his essay, "How to Become a Hacker," located at http://www.tuxedo.org/~esr/faqs/hacker-howto.html.)
Python offers all the features expected in a modern programming language: object-oriented programming with multiple inheritance, exception handling, overloading of common operators, default arguments, namespaces, and packages.
Python can introspect to an uncanny degree. You can ask an object what attributes it has at runtime and give it new ones. Hooks are provided to let you control how functions are applied and what to, and when attributes are set and fetched. Magic Methods let you define the meaning of operators, so that you can define the + operation for a matrix class or trap what happens when someone accesses an item in a list. Features from other languages can often be easily implemented in Python itself.
Python is written in ANSI C and is available for a wide range of platforms including Windows, Unix, and Macintosh. The core language and standard libraries are identical on all platforms, although each platform offers its own dedicated extensions.
Python is written in C in a modular architecture. It can be extended easily to add new features or APIs. If you want a new feature, you can add it and find plenty of help to do so.
The Python library, included in the standard installation, includes over 200 modules, covering everything from operating-system functions and data structures to full-blown web servers. The main Python web site provides a comprehensive index to the many Python projects and third-party libraries. Whatever your problem domain, you will probably find someone else working on it and a good base of code to start with.
Python has a large and enthusiastic user community; it's currently doubling in size every two years. So far, there are four books by O'Reilly alone and several by other publishers, eight annual Python conferences have been held, the comp.lang.python newsgroup on Usenet attracts well over 100 posts a day, and there are a growing number of consultants and small firms offering commercial support.
| I l@ve RuBoard |


ArxivIdList
public struct ArxivIdList : ArxivRequest
A list of arXiv article identifiers.
The type conforms to ArxivRequest
and can be used for fetching the articles with specified IDs.
-
Returns identifiers from the list.
Declaration
Swift
public let idList: [String]
-
Creates an ID list.
To retrieve a specific version of an article, end the corresponding ID with
vN
suffix whereN
is the desired version number. If an identifier without the suffix is provided, the most recent version will be retrieved.ArxivEntry
type has properties for getting the version and versioned IDs of the corresponing article.For detailed explanation of arXiv identifiers see arXiv help.
Declaration
Swift
public init(_ firstID: String, _ otherIDs: String...)
Parameters
firstID
An arXiv article IDs.
otherIDs
Other optional IDs.
-
Creates an ID list.
To retrieve a specific version of an article, end the corresponding ID with
vN
suffix whereN
is the desired version number. If an identifier without the suffix is provided, the most recent version will be retrieved.ArxivEntry
type has properties for getting the version and versioned IDs of the corresponing article.For detailed explanation of arXiv identifiers see arXiv help.
Declaration
Swift
public init(ids: [String])
Parameters
idList
An array of arXiv article IDs.
-
Returns
ArxivRequestSpecification(idList: idList)
.Declaration
Swift
public var requestSpecification: ArxivRequestSpecification { get }


Hello I'm
At the age of 29 I decided to change profession. 8 month ago I started learning intensively with Codeberry Programming School. Since then, I’ve taken more online courses like JavaScript, basic Node.js, basic React. I know that I am still in the beginning, but I really enjoy this profession. I find it amazing what people are able to create, and I would like to know everything! :)
let hédi = [christmas, winter, snowflake, XBOX, planner, anime, nephew, family, padthai];


Twentieth Session of the Subsidiary Bodies to the UN Framework Convention on Climate Change
17-Jun-04 — original report
SBSTA Chair Abdullatif Benrageb (Libya) opened SBSTA-20.
Joke Waller-Hunter, UNFCCC Executive Secretary, welcomed Turkey as the 189th UNFCCC Party.
Delegates then adopted the agenda.
Submission of second, and where appropriate, third national communications: Several developing countries emphasized that the frequency of communications depends on the availability of financial and technical support.
The US said developing countries should submit national communications every four years, and greenhouse gas inventories every two years, while LDCs should submit communications every five years.
SAMOA emphasized the importance of avoiding duplication of work between the national communication and NAPA processes, and, with BARBADOS, noted that none of the projects proposed in their first national communications had been funded.
Chair Stoycheva said Sok Appadu (Mauritius) would chair a contact group on the issue. Work of the Consultative Group of Experts on non-Annex I national communications (CGE): CGE Chair Brian Challenger (Antigua and Barbuda) presented a report of the CGE meeting in May 2004.
He said the CGE would prioritize thematic hands-on training workshops.
SWITZERLAND said the effectiveness of these workshops could be improved by, inter alia, identifying specific issues and objectives in consultation with participating countries.
Chair Stoycheva said she would prepare draft conclusions on the issue.
The EU welcomed the information provided by the GEF on its support for the preparation of initial national communications, and encouraged SBI to request this information from the GEF for subsequent national communications.
Chair Stoycheva said she would draft conclusions on the issue.
Matters relating to the implementation of decision 5/CP.8 (review of the financial mechanism): AOSIS, with others, cautioned that the COP's role in providing guidance to the GEF is being 'undermined' by recent developments in the GEF Council.
ARGENTINA stressed the importance of accelerating the financial needs assessment under the UNFCCC prior to discussions on the next GEF replenishment.
SWITZERLAND said the assessment could not be conducted in time for the negotiations on the next GEF replenishment.
Chair Stoycheva requested Andrea Albán (Colombia) and Sarah Hendry (UK) to hold information consultations on the issue.
Budget performance for biennium 2004-5: The Secretariat presented the status of contributions to the UNFCCC core budget and trust funds.
Chair Stoycheva said she would prepare draft conclusions on the issue.
The Secretariat presented on the impacts of the practice of not funding the participation of Parties whose contributions are outstanding.
Several SIDS urged financial support for two participants from SIDS delegations.
ARGENTINA and COLOMBIA said outstanding contributions by developing countries should not be interpreted as lack of willingness to pay.
Germany briefed participants on progress in creating a UN campus for convention secretariats based in Bonn.
The EU expressed satisfaction that the majority of Annex I reviews had been completed and posted on the UNFCCC website.
SBI took note of the issue.
Fatou Ndeye Gaye (the Gambia) reviewed the outcomes of the African regional workshop on Article 6 held in January 2004.
UZBEKISTAN stressed the importance of inter-regional cooperation on Article 6 and the need for a clearing-house.
URUGUAY and SAINT LUCIA encouraged holding workshops in other regions.
The EU announced a contribution of €35,000 to Article 6 activities.
Chair Stoycheva said Markus Nauser (Switzerland) would chair a contact group to prepare draft conclusions on the issue, and consider input to further develop the clearing-house originally planned as a pre-sessional event.
TUVALU stressed the need to educate all sections of society, including government ministries, on climate change.
The EU and JAPAN stressed country-driven approaches to capacity building.
TANZANIA, for the G-77/China, said institutional capacity building had not yet been addressed.
Chair Stoycheva said Dechen Tsering (Bhutan) would chair a contact group on the issue.
Progress on the implementation of activities under decision 5/CP.7 (implementation of Article 4.8 and 4.9): TUVALU encouraged examining progress on implementation of the decision.
Stressing that decision 5/CP.7 represents a milestone, the US noted the divergent views on the success of the decision's implementation and urged finding common ground.
SAUDI ARABIA expressed concern about the lack of progress in implementing the decision.
The EU encouraged reviewing progress, setting out key areas requiring further progress, and negotiating and adopting a decision at COP-10.
Chair Stoycheva said Mohamed Mahmoud Ould El Ghaouth (Mauritania) and Paul Watkinson (France) would co-chair a contact group on the issue.
The EU said simplified modalities and procedures for small-scale A&R are a means to facilitate local participation and reduce transaction costs.
PERU, with several Latin American Parties, said that at US$ 6 per ton of CO2, small-scale A&R projects would not benefit from CDM, given high transaction costs.
BOLIVIA said that such projects may be the only way to involve local and indigenous peoples in 'proactive' climate action and urged innovative procedures to advance projects. CHINA, supported by BRAZIL and MALAYSIA, urged Parties not to revisit definitions agreed on at COP-9.
BANGLADESH said modalities and procedures should be compatible with existing capacity and expertise in developing countries.
TUVALU, with BRAZIL, said that CDM projects must be additional and not supported by official development assistance.
Chair Benrageb said Thelma Krug (Brazil) would chair a contact group on the issue.
LDC Expert Group (LEG) Chair La'avasa Malua (Samoa) reported on the meeting of the LEG in March 2004.
SWITZERLAND noted the relevance of the LEG's work to other UNFCCC processes.
He encouraged cooperation with the CGE, and cautioned against duplication of work.
GAMBIA offered to host the next LEG meeting.
UGANDA stressed the importance of the LEG.
Chair Stoycheva said she would draft conclusions on the issue.
Good practice guidance (GPG) for LULUCF: AUSTRALIA proposed an open-ended policy dialogue to ensure coherence on accounting for LULUCF activities.
BRAZIL urged including factoring out in the dialogue, while the US preferred not to engage in further recommendations on this matter.
CANADA and the EU said agreement on GPG and common reporting format tables for reporting under the Protocol is a priority for SBSTA-20.
The EU called for consistency with current IPCC tables and reporting recommendations.
JAPAN highlighted the contribution made by harvested wood products.
BELIZE, for AOSIS, urged concentrating on emissions rather than removals.
Chair Benrageb said William Kojo Agyemang-Bonsu (Ghana) and Audun Rosland (Norway) would co-chair a contact group on the issue.
SBI Chair Daniela Stoycheva (Bulgaria) opened SBI-20.
QATAR, for the G-77/China, requested SBI-20 to consider arrangements for COP/MOP-1, given the possibility that the Protocol will enter into force before the next session.
TUVALU, for AOSIS, emphasized the links between the UNFCCC and the 10-Year Review of the Barbados Programme of Action for the Sustainable Development of Small Island Developing States.
The EU welcomed a recent statement by Russian President Vladimir Putin in support of the Protocol. Parties then adopted the SBI agenda as amended by the G-77/China.
The G-77/CHINA stressed the principle of common but differentiated responsibilities.
The AFRICA GROUP highlighted the need to increase funding for adaptation.
On election of officers, Chair Stoycheva said Fadel Lari (Kuwait) would continue to serve as Vice-Chair of SBI, and Gonzalo Menéndez (Panama) would serve as Rapporteur.
While the corridors remained calm on day one, old controversies were revisited in the Plenary halls.
Discussions on non-Annex I communications in the SBI evoked a feeling of déjà vu for at least one delegate, and concerns were expressed that SBSTA negotiations might get bogged down by the same old issue of forestry and land use.
At the same time, observers expressed uncertainty at the potential shape or form of the brewing discussions on the financial mechanism.
The IPCC Inventories Task Force Bureau reported on progress in compiling the IPCC 2006 Guidelines for Greenhouse Gas Inventories.
KENYA emphasized that 'aggressive mitigation' is required by Annex I Parties.
NORWAY said the greenhouse gas inventory review process is a capacity-building activity beneficial to all Parties.
Chair Benrageb said Helen Plume (New Zealand) and Branca Americano (Brazil) would conduct informal consultations on the matter.
The EU noted the importance of access to all necessary information by expert review teams undertaking annual reviews of greenhouse gas inventories, including that deemed confidential by Parties.
The US stressed the importance of protecting confidential information.
Chair Benrageb said the issue would be addressed by the informal consultations on greenhouse gas inventories.
Chair Benrageb invited Murray Ward (New Zealand) to conduct informal consultations on the matter.
Expert Group on Technoloy Transfer (EGTT) Chair Margaret Martin (Canada) reported on the fifth meeting of the EGTT, held prior to SB-20.
The G-77/CHINA called on SBSTA to identify financial resources to address the needs identified in the Technology Needs Assessments.
The EU and JAPAN emphasized the importance of private sector involvement.
GHANA, for the Africa Group, urged developed Parties to provide financial and technical assistance.
BELIZE, for AOSIS, emphasized the need for technology transfer relevant to adaptation.
Chair Benrageb said Andrej Kranjc (Slovenia) and Kishan Kumarsingh (Trinidad and Tobago) would co-chair a contact group on the issue.
The EU welcomed further opportunities to implement P&Ms.
Chair Benrageb said a contact group would be formed and co-chairs would be announced following consultations.
The Global Climate Observing System Secretariat reported on relevant work.
JAPAN reported on the second Earth Observation Summit held in Tokyo in April 2004.
The AFRICA GROUP noted lack of available funding to improve climate observation.
CHINA urged strengthening data exchange.
WMO reported on its work on increasing the number of climate observations.
Chair Benrageb said Stefan Rösner (Germany) and Sok Appadu (Mauritius) would co-chair a contact group on this issue.
The IPCC updated participants on its work.
The UNCCD reported on the workshop on forests and forest ecosystems held in Viterbo, Italy, in April 2004.
The RAMSAR CONVENTION expressed regret at not having been invited to the recent Joint Liaison Group (JLG) meeting.
FAO said it will assume a more active role in climate change affairs.
The INTERNATIONAL STRATEGY FOR DISASTER REDUCTION said disaster reduction remains relevant to climate change. SWITZERLAND asked how involvement of CBD experts in the CDM EB can be achieved, and suggested extending permanent observer status to the Ramsar Convention in the JLG.
PALAU noted the merit of granting the Ramsar Convention full membership at the JLG.
He expressed concern that GEF encourages Parties to obtain funding for adaptation from focal areas other than climate change.
The US, CANADA and AUSTRALIA emphasized coordination among national focal points.
Chair Benrageb said Outi Berghäll (Finland) and Marcela Main (Chile) would facilitate informal consultations on the issue.


Next: endp, Previous: first, Up: Conses Dictionary
nth
n list ⇒ object
(setf ( nth
n list) new-object)
n—a non-negative integer.
list—a list,
which might be a dotted list or a circular list.
object—an object.
new-object—an object.
nth locates the nth element of list, where the car of the list is the "zeroth" element.
Specifically,
(nth n list) ≡ (car (nthcdr n list))
nth may be used to specify a place to setf.


Save over £9 on Christmas jumpers in the I Want One Of Those flash sale this weekend
There’s a 20% discount code that works on top of current offers meaning more savings for shoppers - but only for a limited time
by Linda HowardBlack Friday may be a few weeks away, but that isn’t stopping online retailers from setting out their stalls and giving bargain hunters a taste of what’s to come.
We’ve already seen great deals from all the mobile, broadband and TV providers offering free giveaways that include Nintendo Switch consoles, 4K Smart TVs, Xbox One consoles, PlayStation bundles and bluetooth speakers.
And there’s been huge savings from popular retailers including Boots , Regatta , GAP , Debenhams , John Lewis , ASOS and TK Maxx .
Well, now it’s the turn of popular website, I want One Of Those (IWOOT) , to offer online shoppers massive savings with a flash sale giving an additional 20% off purchases at checkout.
Shoppers can browse the IWOOT website for everything from Christmas jumpers to tech and toys or search for the best deals by room or occasion.
To get the additional 20% off, just enter the code FLASH20 at checkout and the discount will automatically be applied.
Browse the IWOOT website here
There’s a huge collection of Christmas jumpers on IWOOT, ranging from the traditional to the nostalgic, funny and fashionable - and they’ve all been reduced.
Originally priced at £24.99, the seasonal sweaters have been reduced to £18.99 ad when you apply the code FLASH20 , it takes the price down even further to £15.19 - overall a saving of £9.80!
Check out the Christmas jumpers here
Here are a few of our favourite Christmas jumpers available at IWOOT
Officially licensed Disney Frozen Olaf and Sven Christmas Jumper - £15.19 (with discount code applied)
The Grinch Christmas Sweatshirt - £15.19 (with discount code applied)
Officially licensed Star Wars Character Christmas Tree Jumper - £15.19 (with discount code applied)
Fleece Navidad Women's Christmas Jumper - £15.19 (with discount code applied)
IWOOT also offers free delivery on orders over £30 and a buy now, pay latter payment option.


Learn More
Interactive Floorplan »
Company
Booth
AAA Company Name
123
BBB Company Name
47
CCC Company Name
101
DDD Company Name
EEE Company Name
FFF Company Name
GGG Company Name
HHH Company Name


aden/Gold
Jaden/Gold is a programmer. He uses Python as his main language and JavaScript as his secondary. He crafts Discord bots and web pages!
Jaden/Gold is a programmer. He uses Python as his main language and JavaScript as his secondary. He crafts Discord bots and web pages!


Disclaimer: Returns estimate job numbers and salaries from Indeed. Its just our best guess so dont use it to make career decisions.


HTML Pages Ready
We analyze & anticipate your needs. Brook is the readymade template with every aspects that you may need.
Mega Menu
Mega Menu is the door that has the entrance to every pages of your site. It navigates things for bringing ease.
Parallax Rows & Footers
Super sleek 3D parallax effects are built for Brook’s rows and footers.
Infinite Loading
A scrolling style that makes content continuously loaded as users scroll down.
40 +
Stunning Homepages
Choose a homepage to start navigating Brook. Build strong & impressive websites using Brook’s premade templates.
Premade Headers
Power up your pages with beautifully designed header styles. Each style comes with a variety of header options for your choice.
Premade Footers
Enhance the navigation experience with 16+ footer styles exclusively designed for Brook. The power of customization is given in your hands.
Template Core Features
Grow your online business based on one of the best eCommerce plugins: html5


Rich Text Editor Example
Add a comment
Write your name:
Write your email:
Write a comment:
Did you like this article?
yes
no


Hey guys,
just wanted to add my setup to the showcase.
I ended up creating a dedicated blog post here:
http://blog.mrossi.com/2013/07/open-energy-monitor-and-home-automation.html
In short, my setup consists of two emonTx nodes (868Mhz), a raspberry pi, some weather sensors and a relay control board to activate flood pupms when needed
I used the https://github.com/openenergymonitor/emonTxFirmware/tree/master/emonTx_CT123_Voltage sketch as a base and added the temperature monitoring parts and the optical sensor parts.
Also, I added the ability to request data (thorugh I2C and Wire calls) to a slave board that has no wireless capability
Regards
Mattia
Re: Energy monitor, weather data and more
Very impressive Mattia.
With so many feeds, how are managing long-term data storage, or are you weeding data after 'x' months.
Paul
Re: Energy monitor, weather data and more
Hi Paul,
at the moment no weeding, and waiting for further experiments from Trystan on the new ways to store and use timedata series.
As for occupied space I decided to kill two birds with one stone and moved all frequently changing folders off the sd card on a network drive (mysql data, apache logs, weather station data and all other stuff that could wear down the sd card with too many writes).
At the moment (and it's been running with all the feeds for almost two months) the total space used by the emoncms schema is around 200MB, so it will need around 1-1.5GB per year of space. Unless the increasing rows in the feed tables cause a noticeable slowdown I don't think I'll ever need to prune them.
What I did to achieve this was mapping on boot some directories via nfs to my NAS, and change mysql to use the networked data directory and apache to write the logs on it's dedicated network mounted dir.
It's not a completely read only solution, but I think it reduces the writes by a lot and (Murphy notwihtstanding) should lenghten the life of the SD card. And even if it doesn't, all the data and the config files are on the network drive (that has mirrored drives) and with a little reconfiguration could be brought back online in a not too long time. As you can probably tell I'm much more experienced in using linux systems than fiddling with electronics stuff so for me it's the best balance between flexibility (not having a completely read only system that cannot change unless you recreate the image) and data security.
Regards
Re: Energy monitor, weather data and more
I found your fantastic project.
You've made many interesting changes. Also accompany the site openenergymonitor and have some applications. Nothing as professional as yours. I'm learning a lot in recent times. One of the coolest things I found was the arduino. I have a RS485 network connecting multiple slaves (Arduinos) and everyone talking to a supervisor opensource called scadabr. I live in Brazil and I'm using the google translator. Forgive me if I do not understand something.
I'll wait for you to post your photos of the assembly.
Congratulations.
Re: Energy monitor, weather data and more
Thanks farmsid,
I'm on vacation right now,but as soon as i get back I'll definitely have some photos to back up the post.
Take care
Re: Energy monitor, weather data and more
Hey guys, just added a new post that details the other part of my arduino home projects, as soon as I put it online (that will require to do some rewiring) I'll take some photos also of the OEM stuff
http://blog.mrossi.com/2013/07/arduino-relay-board-to-drive-two-flood.html
Regards
Mattia
Re: Energy monitor, weather data and more
Congrats, great work on the setup and on the reporting !!
Thanks for sharing.
Re: Energy monitor, weather data and more
Hi Mattia,
Excelent proyect and apoprtations to SWPI
I have the next configuration:
Base EmonBase (Raspberry)
RFM01 868 - Receive data from wheader station
RFM12Pi 868 - Recive data from EmonTX
Emontx
RFM12 868
Weather station: PCE-FW20
I would like to know how you connect EmonTx with EmonBase
My problem:
I have connected he RFM01(868) and RFM12PI_V2(868) at the same time
When alone connect, work perfectly, but when I connect them together, one does not work.
Both share the GPIO1 (3.3V) and GPIO6 (GND) of the raspberry.
They may interfere with each other?
how can you recommended for avoid this problem?
I understand you use a wire connection for emonBase (Raspberry) to emontx
thanks


Λrrow is a library for Typed Functional Programming in Kotlin.
Arrow aims to provide a lingua franca of interfaces and abstractions across Kotlin libraries.
For this, it includes the most popular data types, type classes and abstractions such as Option
, Try
, Either
, IO
, Functor
, Applicative
, Monad
to empower users to write pure FP apps and libraries built atop higher order abstractions.
Use the list below to learn more about Λrrow’s main features.
Make sure to have the latest version of JDK 1.8 installed.
In your project’s root build.gradle
append the jcenter repository to your list of repositories.
allprojects {
repositories {
mavenCentral()
jcenter()
maven { url "https://dl.bintray.com/arrow-kt/arrow-kt/" }
maven { url 'https://oss.jfrog.org/artifactory/oss-snapshot-local/' }
}
}
Starting in 0.9.1, Arrow follows the following convention for artifact publication.
The arrow modules are Core, Effects, Optics, Recursion, etc.
An Arrow module is composed of data types and type classes. Arrow modules are exported and published with the following semantics.
If we take for example arrow-core
.
Arrow core contains the basic arrow type classes and data types and it’s composed of 3 main artifacts that may be used a la carte:
Recomended for most use cases:
arrow-core
(Depends on data and extensions modules and exports both)Trimmed down versions:
arrow-core-data
(Only data types)arrow-core-extensions
(Only type class extensions)def arrow_version = "0.9.0"
You can find the dependencies necessary in the Basic Setup of the README at the 0.9.0 tag clicking here.
Add the dependencies into the project’s build.gradle
def arrow_version = "0.9.1-SNAPSHOT"
dependencies {
compile "io.arrow-kt:arrow-core-data:$arrow_version"
compile "io.arrow-kt:arrow-core-extensions:$arrow_version"
compile "io.arrow-kt:arrow-syntax:$arrow_version"
compile "io.arrow-kt:arrow-typeclasses:$arrow_version"
compile "io.arrow-kt:arrow-extras-data:$arrow_version"
compile "io.arrow-kt:arrow-extras-extensions:$arrow_version"
kapt "io.arrow-kt:arrow-meta:$arrow_version"
compile "io.arrow-kt:arrow-free-data:$arrow_version" //optional
compile "io.arrow-kt:arrow-free-extensions:$arrow_version" //optional
compile "io.arrow-kt:arrow-mtl:$arrow_version" //optional
compile "io.arrow-kt:arrow-effects-data:$arrow_version" //optional
compile "io.arrow-kt:arrow-effects-extensions:$arrow_version" //optional
compile "io.arrow-kt:arrow-effects-io-extensions:$arrow_version" //optional
compile "io.arrow-kt:arrow-effects-rx2-data:$arrow_version" //optional
compile "io.arrow-kt:arrow-effects-rx2-extensions:$arrow_version" //optional
compile "io.arrow-kt:arrow-effects-reactor-data:$arrow_version" //optional
compile "io.arrow-kt:arrow-effects-reactor-extensions:$arrow_version" //optional
compile "io.arrow-kt:arrow-optics:$arrow_version" //optional
compile "io.arrow-kt:arrow-generic:$arrow_version" //optional
compile "io.arrow-kt:arrow-recursion-data:$arrow_version" //optional
compile "io.arrow-kt:arrow-recursion-extensions:$arrow_version" //optional
compile "io.arrow-kt:arrow-query-language:$arrow_version" //optional
compile "io.arrow-kt:arrow-integration-retrofit-adapter:$arrow_version" //optional
}
For projects that wish to use their own @higherkind
, @optics
and other meta programming facilities provided by Λrrow
the setup below is also required:
Add the dependencies into the project’s build.gradle
apply plugin: 'kotlin-kapt' //optional
apply from: rootProject.file('gradle/generated-kotlin-sources.gradle') //only for Android projects
def arrow_version = "0.9.0"
dependencies {
...
kapt 'io.arrow-kt:arrow-meta:$arrow_version' //optional
...
}
gradle/generated-kotlin-sources.gradle
apply plugin: 'idea'
idea {
module {
sourceDirs += files(
'build/generated/source/kapt/main',
'build/generated/source/kapt/debug',
'build/generated/source/kapt/release',
'build/generated/source/kaptKotlin/main',
'build/generated/source/kaptKotlin/debug',
'build/generated/source/kaptKotlin/release',
'build/tmp/kapt/main/kotlinGenerated')
generatedSourceDirs += files(
'build/generated/source/kapt/main',
'build/generated/source/kapt/debug',
'build/generated/source/kapt/release',
'build/generated/source/kaptKotlin/main',
'build/generated/source/kaptKotlin/debug',
'build/generated/source/kaptKotlin/release',
'build/tmp/kapt/main/kotlinGenerated')
}
}
Make sure to have the at least the latest version of JDK 1.8 installed. Add to your pom.xml file the following properties:
<properties>
<kotlin.version>1.3.0</kotlin.version>
<arrow.version>0.9.0</arrow.version>
</properties>
Add the dependencies that you want to use
<dependency>
<groupId>io.arrow-kt</groupId>
<artifactId>arrow-core-data</artifactId>
<version>${arrow.version}</version>
</dependency>
<dependency>
<groupId>io.arrow-kt</groupId>
<artifactId>arrow-core-extensions</artifactId>
<version>${arrow.version}</version>
</dependency>
<dependency>
<groupId>io.arrow-kt</groupId>
<artifactId>arrow-syntax</artifactId>
<version>${arrow.version}</version>
</dependency>
<dependency>
<groupId>io.arrow-kt</groupId>
<artifactId>arrow-typeclasses</artifactId>
<version>${arrow.version}</version>
</dependency>
<dependency>
<groupId>io.arrow-kt</groupId>
<artifactId>arrow-extras-data</artifactId>
<version>${arrow.version}</version>
</dependency>
<dependency>
<groupId>io.arrow-kt</groupId>
<artifactId>arrow-extras-extensions</artifactId>
<version>${arrow.version}</version>
</dependency>
Enable annotaton processing using kotlin plugin
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<executions>
<execution>
<id>kapt</id>
<goals>
<goal>kapt</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>src/main/kotlin</sourceDir>
</sourceDirs>
<annotationProcessorPaths>
<annotationProcessorPath>
<groupId>io.arrow-kt</groupId>
<artifactId>arrow-meta</artifactId>
<version>${arrow.version}</version>
</annotationProcessorPath>
</annotationProcessorPaths>
</configuration>
</execution>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>src/main/kotlin</sourceDir>
</sourceDirs>
</configuration>
</execution>
<execution>
<id>test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>


30 Fox Pelt(s) required. To start this quest you need to speak with |HS| Lt. Ugare. For this quest you need to collect leaves, from Foxes. Foxes have a drop rate chance of 3 leaves for 1/5 and 10 leaves for 1/20 and are spread all over Haven. Mainly, above the Harbor. Once you have all the leaves, return to the quest giver and recieve your reward
Reward: 1500 EXP, 1 10K Bar. Level 1 Req
75 Sparrow Eggs required. Just like the above quest, you need to speak with |HS| Lt. Ugare once again to do this quest. Although you have to find him East of where you accepted the "A Little Warm Up" Quest. Sparrow Eggs, are dropped from Sparrow's in Haven, 1/1 for 1. In the same places as the Foxes. Once you have all the Eggs return to the quest giver to recieve your reward.
Reward: 1750 EXP, 15000 Gold Level 3 Req
50 Wolf Hides required. Once again you must find |HS| Lt. Ugare to start the quest, he's on the west side of Haven. Once you find him, he will ask you to collect 50 Wolf Hides. The hides are dropped from.. dun dun dunnn you guessed it! WOLVES :O 1/1 for 1.Once you collect 50 of their Hides return to the quest giver to recieve your reward.
Reward: 2000 EXP, 1 10k Bar Level 5 Req
65 Bananas required. This time you must find |HS| Cpt. Syrene to start the quest. (Who happens to be in the cabin below the last quest giver.) Bananas are dropped from Monkey(s). The drop rate is 1/1 for 1. Once you have all the Bananas return to the quest giver to recieve your reward.
Reward: 6000 EXP 18000 Gold Level 10 Req
50 Eaglet Meat required. Find |HS| Cpt. Syrene in Northern Haven Forest to start the quest. Eaglet Meat are dropped by Eaglets, they drop 1/2 for 1. Once you have all the meats return to the quest giver to recieve your reward.
Reward: 21000 EXP, 3 10k Bars Level 20 Req
75 Bear Hides required. Find |HS| Cpt. Syrene again, East/South ish from the last time you saw him to start the quest. Bear Hides are dropped from Bears, the drop rate is 1/1 for 1. Bears are spread all around Haven. Once you have the hides, return to the quest giver and recieve your reward.
Reward: 40000 EXP, 2 10k Bars Level 30 Req
50 Bronco Fillets required. Search for |HS| Cpt. Syrene North/West of where you last saw him to start the quest. Bronco Fillets are dropped from Bronco's 1/1 for 1. Once you have all the Fillets, return to the quest giver and recieve your reward
Reward: 71000 EXP 23000 Gold Level 40 Req
1 Wolf Lord's Skull required. Find |HS| Cpt. Syrene one last time, North of where he was last found to start this quest. The Wolf Lord's Skull is dropped by the Wold Lord Evissap. The drop rate of the skull is 1/10 for 1. Once you have the skull, return to the quest giver to recieve your reward.
Reward: 107000 EXP, 5 10k Bars, 3 Stat Points, The "Honorary Haven Sentinel" title.
100 Essence of Corruption required. Find =GoN= Lo. Tennaad in Nara to start this quest. To get to Nara, leave Haven Harbour, enter the world map and go down once, you then should see 'Nara' on the left hand side. Esscence of Corrupted are dropped by Corrupted Sprites. The drop chance is 1/2 for 1. Once you have the requirements, return to the quest giver to recieve your reward.
Reward: 130000 EXP, 5 10k bars Level 55 Req
150 Corrupted Necklaces required. Find =GoN= LoCpt. Alloir, North of the last quest giver in Nara to start this quest. Corrupted Necklaces are dropped from Corrupted Fairies. The Fairies are found West of when you enter Nara (Red zone.) The drop rate of Necklaces is 1/1 for 1. Once you have the needed materials head back to the quest giver and recieve your reward.
Reward: 150000 EXP, 7 10k Bars Level 60 Req
150 Vampire Fangs, 100 Golem Stones required. Find =GoN= LoCpt. Alloir South/East of the Corrupted Fairies to start this quest. Vampire Fangs are dopped by Vampires inside Nara Caverns (Red Zone), The drop rate is 1/1 for 2. Golem Stones are dropped by the RED zone Golems the drop rate is 1 for 1/1. Once all the needed materials are collected, head back to the quest giver to recieve your reward.
Reward: 400000 EXP, 4 100k Bars, A barrier Breaker Level 70 Req
175 Warrior Ghoul Souls required. For this quest you will need to have your Barrier Breaker with you. Walk past the red zone Golems, until you come to an NPC called the 'Beserk Golem' You need to kill him for his Rock Breaker then use it on the gate to get to the next map where you will see =GoN= LoCpt. Alloir again, speak with him to start the quest. Now, walk up to the Golden Gate and use your Barrier Breaker to open it (Doesn't Dissolve.) Up ahead is the Warrior Ghouls (Red Zone + Agro NPCS so be careful.) Warrior Ghoul Souls drop rate is 1/1 for 1.
Reward: 265000 EXP, 2 100k Bars Level 80 Req
Vampire Demise required. To start this quest read above to get into the Warrior Ghoul area. Once you reach there, talk to =GoN= LocCpt. Alloir inside the red zone. You need to slay Cain. Once you've accepted the quest, walk up to the Golden Gate and use your Barrier Breaker again to get through. (Dissolves) Kill weak Cain and he will drop the Vampire Demise (Cain only spawns once in daytime and once at night so choose wisely when you go.) Hand the Vampire Demise into the quest giver on the map and recieve your reward.
Reward: 660000 EXP, 3 100k Bars, 3 Stat points, The "Slayer of Cain" title. Level 90 Req
300 Black Sail Pendants required. To start this quest enter 'Crescent Island' on the world map where you entered Nara earlier. Once on the Island head east into the shop, now you will see a picture hanging on the wall, walk up to it and a hidden door will open, walk through until you come to 'Archavia Commons" then head left a map and talk to >CC< HCpt. Thelus. Black Sail Pendants are dropped from +BS+ Grunt(s) their drop rate is 1/1 for 3. Once collected head back to the quest giver and recieve your reward
Reward: 130000 EXP, 15 10k bars Level 55 Req
125 Ancestral Spirits required. To start this quest enter 'Crescent Island' and go left one map, now talk to >CC< HCpt. Thelus, talk to him. Ancestrial Spirit(s) are dropped by Ancestral Wraith(s). To get to those npcs head up Crescent Mountain until you see them. The drop rate is 1/2 for 1.
Reward: 150000 EXP, 8 10k Bars Level 60 Req
300 Imp Venom required. To start this quest head up Crescent Mountain until you see >CC< HCpt. Thelus, talk to him. Imp Venom are dropped by Imps of Mahazael which happen to be one map up from the quest giver and 1 map left as well. The drop rate is 1/1 for 2. Once you've collected the Venom, head back down hand the Venom's in to the quest giver and recieve your reward.
Reward: 180000 EXP, 2 100k Bar's Level 65 Req
Valalak's Soul, Faugor's Soul required. To start this quest head up Crescent Mountain onto the 3 Imps map, Go left pass the Imps and go up a map. Talk to >CC< Hcpt. Thelus. The soul's are dropped by +BS+ DGrd. Valalak and +BS+ DGrd. Faugor. Which are one map above where you accepted the quest. The Soul drop rates are both 1/8 for 1. Once you get both drops head back to the quest giver, hand in the Souls and recieve your reward.
Reward: 400000 EXP, 2 100k Bar's, 2 Stat Points, The "Vanquisher of the Demon Guardian Twins!" title. Level 70 Req
Porius's Soul, Krymeli's Soul, Ostega's Soul, Issmon's Soul required. To start this quest go North pass the last quest giver you were at until you see >CC< MGen. Nisonotem. He will tell you he wants the Four Lieutenants Souls. If it's not obvious yet, you have to kill the Four Npc's sitting on that map until you get all of their souls. The drop rate is 1/8 for 1. Once you have all four Souls hand them in to the quest giver to recieve your reward.
Reward: 467000 EXP, 3 100k Bars, 2 Stat Points Level 75 Req
600 Demon Wings required. To start this quest head up Crescent Mountain past the Ancestral Wraiths, past the Imps until you come across Demon Lords and Demon Spawns then, talk to >CC< MGen. Nisonotem. Demon Wings are dropped by Demon Spawns 1/1 for 3 or 1/1 for 6 from the Demon Lords. Once you have all the Wings, hand them into the quest giver and recieve your reward
Reward: 265000 EXP, 4 100k Bars, a Demonic Counter Seal. Level 80 Req
Nataro Soul and Right Claw required required. Before we start, make sure you have the Demonic Counter Seal with you. To start this quest head up Crescent Mountain, yet again (sheesh getting tired of typing this :[.) Go back into the Four Lieutenants map, and use your Demonic Counter Seal on the chest and walk threw the warp. Once you're threw talk to >CC< Gen. Aremon. The Demon King Narato is up one map above the quest giver, He drops the Soul.. the drop rate is 1/12 for 1. Once you get the drop, hand it in to the quest giver to recieve your reward.
Reward: 660000 EXP, 5 100k Bars, 6 Stat Points, The "Conquerer of Mahazael!" title. Level 90 Req
175 Lizard Shield(s) required. To start this quest enter Khatru from the world map. (Left of the Nara/Crescent Island world map.) As soon as you enter, walk up and talk to [SoH] Hunt. Rusi. Lizard Shield(s) are dropped 1/1 for 1 by Lizard Men, which are spread all over Khatru. Once you have gathered all the shields return to the quest giver to recieve your reward
Reward: 364800 EXP, 16 10k Bars Level 95 Re
85 Spark Crystals required. To start this quest once again enter Khatru and head North. You then will see [SoH] Hunt. Rusi again, talk to him. He needs 85 Spark Cyrstals which are dropped 1/2 for 1. Once you have them all gathered, hand them into the quest giver and recieve your reward.
Reward: 402737 EXP, 17 10k Bar's Level 100 Req
150 Toad Axes required. Guess what! To start this quest head to Khatru. D: Once you're on Khatru head completely North and you will see [SoH] Hunt. Rusi talk to him. :) He will tell you he needs 150 Toad Axes. Hmm... I wonder what drops those.. maybe... TOADS?! You betchaa! Get cracking =] Slay dem Toads. Haha, the Toad Axe drop rate is 1/1 for 1. Once you gathered all of those hand them in to the quest giver and recieve your reward.
Reward: 42550 EXP, 18 10k Bars Level 105 Req
30 Dragon Breaths required. Okay so to start this quest, if you remember where you did your last quest which should have been the 'They're Giant!' one, you just head right one map from where you last saw Hunt. Rusi. If you didn't do that quest... DO IT NOW. Heh Just kidding, So head to Khatru and go North/East Ish. You will see [SoH] Hunt Rusi and some little path that goes North. Talk to Rusi and he will tell you he needs 30 Dragon Breath's.. O.o what a weirdo? I mean c'mon.. he wants Dragon Breaths! Gross, no? Fine. However! Go up one map from the quest giver and you will see three Tyrant(s) so get going their drop rate is 1/5 for 1. Slay the beasts! Once you have all the Breaths hand them in to the quest giver and recieve your reward
Reward: 1021200 EXP, 8 100k Bar's, 2 Stat Points, The "Honorary Hunter 1!" title. Level 110 Req
1 Rainbow Core required. To start this quest head onto Khatru and stay East/North ish. Until you find yourself beside [SoH] Hunt. Iantal talk to him and he will tell you he wants one Rainbow Core, which are dropped from Khatru Rodent(s) 1/100 for 1. Rodents are found spread over Khatru and have a spawn time of around 15 minutes ish. So you may have to spend quite some time killing those it's all about luck my friend, so if you're Irish congratz ahah if not.. :( Sorry my friend. Anyways, once you have the Rainbow Core hand it into the quest giver to recieve your reward.
Reward: 729600 EXP, 1 1KK Bar, 1 Stat Point, The "Master Rodent Hunter" title. Level 95 Req
150 Penguin Beaks required. To start this quest head to Sub Zero. You can get there by entering Haven Forest and going all the way North/East until you come to a bridge. Cross the bridge go left a map, you will see =BH= Sct. Enict, but this is not the one you need to talk to, so head right one more map then talk to the quest giver. Penguin Beaks are dropped by Penguins (obviously heh.) The drop rate happens to be 1/1 for 1.
Reward: 555350 EXP, 25 10k Bar's Level 115 Req
150 Ice Snake Venom required. Once again enter Sub Zero (read above quest for location) and go right two maps than down one and you will come across =BH= Sct. Enict talk to him. He needs 150 Ice Snake Venom, which are evidently dropped by Ice Snake(s) 1/1 for 1. Once you have all these hand them in to the quest giver to recieve your reward.
Reward: 601975 EXP, 30 10k Bar's Level 120 Req
75 Yeti Hides required. To start this quest enter Sub Zero and head South/West until you see =BH= Sct. Enict (Red zone.) He needs 75 Yeti hides, which are dropped by Yeti's (Only found in Red Zones.) The drop rate for the Hides is 1/2 for 1. Once you have collected all of those head back to the quest giver to recieve your reward.
Reward: 650475 EXP, 5 100k Bars Level 125 Req
25 Perfect Yeti Hide(s) required. To start this quest head to Sub Zero and stay West along the Ledge until you see =BH= Sct. Hisa, speak with him.  The Yeti's are found in Red Zones, all along Sub Zero Icefields/Ledges. The Hide drop rate is 1/3 for 1. The Yeti's also have a spawn time of two hours... so yes it may take awhile to do this quest. Although, you will enjoy the reward :) Collect all the hides, head back to the quest giver hand in the Hides to recieve your reward
Reward: 1073381 EXP, 7 100k Bars, 2 Stat Points, The "Enraged Yeti Slayer" title. Level 130 Req
50 Alpha Yeti Claw(s) required. To start this quest go to Sub Zero, stay West along the Ledge again where you last saw =BH= Sct. Enict, now go right one map and you will see him again. Talk to him, he needs 50 Alpha Yeti Claw(s) which are dropped by Alpha Yeti's 1/3 for 1. Once you have all 50 gathered, trade them in to the quest giver to recieve your reward.
Reward: 715587 EXP, 7 100k Bars Level 130 Req
Blood of Suixile required. Once again to start this quest you must enter Sub Zero. You must find =BH= SctCpt. Vites who is located in Sub Zero Fields, West of Sub Zero the town. Once you find him, talk to him he will tell you that he found King Suixile and wants you to bring him his blood. Now you must find the Suixile Den which is on Southern Sub Zero Ledge, you will see a cave opening that you can enter. (The map also has Alpha Yeti(s) on it, and sometimes Enraged Yeti(s)).  So I do recommend that you do this quest with a few friends rather than alone. Once you get to King Suixile you must slay him until he drops the 'Blood of Suixile.' The drop rate is 1/25 for 1. Once you have the drop, leave the same way you came in and return to the quest giver to recieve your reward.
Reward: 1543600 EXP, 5 100k Bars, 4 Stat Points, The "Conquerer of Suixile!" title. Level 135 Req
1 Dark Emperor's Cloth, 75 Imp Spirit(s), 75 Soul Decay, 75 Warrior's Bone(s), 150 Shadow Eye's required. To Start this quest you need to speak with 'Disciple of Darkness,' who is West inside the Crypt of Darkness. Dark Emperor's Cloth drop rate is 1/1 for 1 dropped by the Dark Emperor, Imp Spirit(s) drop rate is 1/2 for 1 dropped by Dark Imp Spirit(s), Soul Decay drop rate is 1/4 for 1 dropped by Shaded Soul(s), Warrior's Bone(s) drop rates are 1/5 for 1, 1/10 for 2, 1/25 for 10, dropped by Warrior's Corpse(s), and Shadow Eye's drop rates are 1/9 for 2 from Shadow(s) or 1/5 for 2 from Shadow Kite(s) (Refer to the Chaos Blade Guide for further information)
Reward: 7000000 EXP, a Dark Emperor's Cape Level 300 Req
Moriganna's Soul, Mezdorzro's Soul, Dark Dragon Droppings, Cain's Soul, Dark Emperor's Soul required. To Start this quest you need to speak with 'Disciple of Darkness' once agian, who is West inside the Crypt of Darkness. As you probabley already guessed, these Souls are dropped from npcs. The npcs are spread around the Dark Fortress and Crypt of Darkness. Moriganna's drop rate is 1/10 for 1, Mezdorzro's drop rate is 1/10 for 1, Dark Dragon's drop rate is 1/10 for 1, Cain's drop rate is 1/10 for 1, and the Dark Emperor's drop rate is 1/10 for 1. (Refer To Chaos Blade Guide for further information, on needed keys, etc)
Reward: 7000000 EXP, an Emperor's Will Level 300 Req
450 Iceshard(s) required. First you need to get the keystone by trading a mates key(see Yeti King suixile quest, the mates beside king suixile drop mates key) into the Eastern man in Sub Zero, then go down below Wendigos, you should see Ice demonesses, make it down the mountain and you should see a little icewall at the bottom of the map, use they keystone on it, go in and up a map and you should see the quest person there. Go up and kill Frozen Golems, the guard ones(Orange name) drop 6 at a time and the Attack when attacked ones (yellow named) drop 2 at a time Also, Uhar Protector drops 5 every 1/2 Collect until you have 450 Iceshards and go back down to receive your reward.
Reward: 855688 EXP, 3 100k Gold Bars Level 185 Req
200 Frosted Pendant(s), 365 Icebound Rings required. Look up at the Mutiliate the Golem for information on how to get into hailstone, once you get in, go into the cave at the end of the tunnel. You should see some Frostbites. Those drop 4 Frosted pendants at a time. You can go farther into it, at the end of the tunnel is Uhar which is a boss, he drops 25 every 1/2 time, and his protectors drop 5 every 1/2 the time. Collect and go back to see ~QT~ Pvt. Lysander for your reward!
Reward: 4778898 EXP, 4 1kk Gold Bar(s) Level 260 Req
Alexithmiya's Blade, 1200 Mirror(s) of Vitality First you need to get a Keystone by trading in Mates key dropped by mates of Suixile in the yeti king suixile quest Then you go down into Hailstone by using it on the icewall below ice Demonesses. After you do that, go up past the Frosted Golems into you see ~Qt~ Cpt Ryker, talk to him if your of the required level. Once you do that, enter the castle using the same keystone you used to get into Hailstone. Miscreations drop 2 1/1, Colossus drop 5 1/1 and Provoked Soul drop 3 1/1. Collect 1200 of those, then go see Alexythmia farther in (you need to kill the keeper to enter the room with Alexithymia inside it. Alexythmia drops the blade you need 1/10. Once you get the drop, go back and to ryker to recieve your reward!
Reward: 9211000 EXP, 1 1KK Gold bar. Level 350 Req


Derek Adams encouraged by early signs at Morecambe ahead of his 500th game as a manager
by Gavin BrowneDerek Adams is prepared for a difficult day ahead as he prepares for his first league game as Morecambe manager.
Having defeated Carlisle United in the EFL Trophy on Tuesday night, Adams and his Shrimps players return to League Two action tomorrow.
The Shrimps head to Crawley Town, looking for a positive result to take them off the bottom of the table.
“It’s extremely tough,” Adams said of Saturday’s game, his 500th as a manager.
“Crawley had a very good win against Scunthorpe United on Saturday in the FA Cup and it’s a difficult place to go to.”
However, the Morecambe camp make the trip buoyed by their midweek win.
It might have been a less than full-strength Carlisle side which arrived at the Globe Arena but Adams’ players had to overturn a half-time deficit before winning 3-1.
“I thought the endeavour of the players was very good and we showed a bit of class of times,” he said.
“A-Jay Leitch-Smith linked up play with Cole Stockton, the midfield players showed a bit of class at times on the ball, defenders defended and I think they enjoyed winning the game.”
The midweek display was pleasing given the lack of preparation time.
Adams had only taken one training session and admitted it had been a hectic few days.
He said: “It’s been difficult because I’ve had so many people wanting to talk to me and give me information.
“We’ve won the game but I’d like to have had more time on the training field.
“I’ve gone into the game with a different formation in the second half, different set-plays, the different way I manage.
“The information I’ve been giving them is the taster course rather than the full course.”


4.6. Session Property Managers
Administrators can add session properties to control the behavior for subsets of their workload. These properties are defaults and can be overridden by users (if authorized to do so). Session properties can be used to control resource usage, enable or disable features, and change query characteristics. Session property managers are pluggable.
Add an etc/session-property-config.properties
file with the following contents to enable
the built-in manager that reads a JSON config file:
session-property-config.configuration-manager=file
session-property-manager.config-file=etc/session-property-config.json
Change the value of session-property-manager.config-file
to point to a JSON config file,
which can be an absolute path, or a path relative to the Presto data directory.
This configuration file consists of a list of match rules, each of which specify a list of conditions that the query must meet, and a list of session properties that should be applied by default. All matching rules contribute to constructing a list of session properties. Rules are applied in the order they are specified. Rules specified later in the file override values for properties that have been previously encountered.
Match Rules
user
(optional): regex to match against user name.source
(optional): regex to match against source string.queryType
(optional): string to match against the type of the query submitted:DATA_DEFINITION
: Queries that alter/create/drop the metadata of schemas/tables/views, and that manage prepared statements, privileges, sessions, and transactions.DELETE
:DELETE
queries.DESCRIBE
:DESCRIBE
,DESCRIBE INPUT
,DESCRIBE OUTPUT
, andSHOW
queries.EXPLAIN
:EXPLAIN
queries.INSERT
:INSERT
andCREATE TABLE AS
queries.SELECT
:SELECT
queries.
clientTags
(optional): list of tags. To match, every tag in this list must be in the list of client-provided tags associated with the query.group
(optional): regex to match against the fully qualified name of the resource group the query is routed to.sessionProperties
: map with string keys and values. Each entry is a system or catalog property name and corresponding value. Values must be specified as strings, no matter the actual data type.
Example
Consider the following set of requirements:
- All queries running under the
global
resource group must have an execution time limit of 8 hours. - All interactive queries are routed to subgroups under the
global.interactive
group, and have an execution time limit of 1 hour (tighter than the constraint onglobal
). - All ETL queries (tagged with ‘etl’) are routed to subgroups under the
global.pipeline
group, and must be configured with certain properties to control writer behavior.
These requirements can be expressed with the following rules:
[
{
"group": "global.*",
"sessionProperties": {
"query_max_execution_time": "8h",
}
},
{
"group": "global.interactive.*",
"sessionProperties": {
"query_max_execution_time": "1h"
}
},
{
"group": "global.pipeline.*",
"clientTags": ["etl"],
"sessionProperties": {
"scale_writers": "true",
"writer_min_size": "1GB"
}
}
]


txtq: A Small Message Queue for Parallel Processes
This queue is a data structure that lets
parallel processes send and receive messages,
and it can help coordinate the work
of complicated parallel tasks.
Processes can push new messages to the queue,
pop old messages, and obtain a
log of all the messages ever pushed. File locking
preserves the integrity of the data even when
multiple processes access the queue simultaneously.
Downloads:
Reverse dependencies:
| Reverse imports: |
ipc |
| Reverse suggests: |
drake |
Linking:
Please use the canonical form
https://CRAN.R-project.org/package=txtq
to link to this page.


--- layout: post title: Who Should Attend GrassRoots? image: posts/nerdvana.jpg by: Josh McBroom ---
GrassRoots is for anyone excited about the intersection of cannabis and technology. You don't need to be a veteran programmer or experienced entrepreneur to attend – you just need to be passionate about cannabis and willing to spend a weekend building and launching a company.
Because we designed GrassRoots to be more like a startup competition (like Startup Weekend or 3 Day Startup) than a “true” hackathon, we're not only allowing, but ENCOURAGING non-technically-skilled people to attend. Sure, it helps if you know how to code or are a graphic designer, but there's more to launching a startup than the product!
Below is a brief list of what might be expected of a GrassRoots attendee, but this list is by no means exhaustive:
While checking off most/all of these boxes would make you anyone's dream candidate, fitting just one is really all we're looking for! If you fit one or more of these criteria, we'd love to see you at the event! If you still aren't sure if GrassRoots is right for you, please email us at<EMAIL_ADDRESS>with any questions!


SIGNING OF THE KETUBAH
The ketubah is the Jewish marriage contract, traditionally documenting a legal transaction and outlining the contractual obligations of the marriage. Oren and Amy have written their own ketubah that is in keeping with the legalistic tone of the original but representing their unique promises to their marriage and each other. Two witnesses will attest to Oren and Amy’s promises and willing acceptance of the marriage contract. These witnesses will also validate the exchange of rings and witness Oren and Amy’s willing consent to the marriage during the ceremony itself.
BEDEKIN (VEILING OF THE BRIDE)
In Genesis, Jacob worked for seven years for the right to marry Rachel, but because he didn’t see the face of his bride, Jacob was tricked into marrying her sister Leah instead. Now the groom lowers the veil over the bride’s face to avoid making Jacob’s mistake. At the bedekin, Oren will look at Amy’s face and confirm that she is his chosen bride and lower the veil, thus symbolically setting her apart from others.
HUPPAH (BRIDAL CANOPY)
The wedding ceremony takes place under the huppah (bridal canopy), a symbol of the home that Oren and Amy will build together. It is open on all sides so that the guests may be part of the ceremony, also emphasizing the value of hospitality towards guests.
“It is the huppah that we take for our home when we are promising each other everything. It is the promise of a home. Its openness pledges that there will be no secrets. Friends and family stand at the corners, weighing the fragile structure down. The huppah does not promise that love or hope or pledges will keep out the weather or catastrophe. But its few lines are a sketch for what might be. The flimsiness of the huppah reminds us that the only thing that is real about a home is the people in it who love and choose to be together, to be a family. The only anchor that they will have will be holding onto each others’ hands. The huppah is the house of promises. It is the home of hope.”
Adapted from The Succah and the Huppah by Debra Cash
KIDDUSHIN/ERUSIN (BETROTHAL)
The traditional Jewish wedding ceremony is divided into two parts separated by the reading of the ketubah: kiddushin or erusin (betrothal) and nissuin (nuptials). Two cups of wine are used as remnants of a time with these parts took place on separate occasions. The Rabbi begins by reciting blessings over a cup of wine and expressing gratitude to God for allowing the sanctification of the relationship through marriage. After the blessings, Oren and Amy drink from the cup of wine. Marriage is a contract between a husband and wife and is transacted symbolically with a transfer of an object of worth. In keeping with Jewish tradition, the rings used are simple bands, unbroken and unadorned with stones or engravings.
READING OF THE KETUBAH
The ketubah is read aloud to make a clear separation between the two ceremonies, kiddushin and nissuin. It is then given to Amy to keep as her property after the wedding.
NISSUIN (NUPTIALS) AND SHEVAH BRACHOT (SEVEN BLESSINGS)
Historically, betrothal designated the bride and groom for each other while nissuin was accomplished by a symbolic act of intimacy that demonstrated the couple’s intention to create a new home and new life. Today, nissuin is marked by the recitation of the seven blessings. Seven is an important and mystical number in Jewish tradition: it is the number of days it took God to create the universe, and considered the number of completion and perfection. Oren and Amy have chosen to honor their family by asking them to read each of the first six blessings. After the final, seventh blessing, Oren and Amy drink from the second cup.
BREAKING OF THE GLASS
The wedding ceremony ends with Oren breaking a glass with his foot. There are many meanings attached to this well-known element of the Jewish wedding ceremony. It serves as a reminder of the destruction of the Temple in Jerusalem, reminding us that even in times of great joy, we remember times of great sadness. It reminds us that love, like glass, is fragile and must be protected. The wedding represents answered prayers, a taste of redemption, but the world is still broken, requiring our care. The glass signals the end of the ceremony; the silence and hush of mythic time under the huppah ends with an explosion. Once the glass is broken, the guests shout, “mazel tov!” (congratulations!) and accompany Oren and Amy, now husband and wife, with joyous singing and dancing.
YICHUD (SECLUSION/TOGETHERNESS)
Immediately following the ceremony, Oren and Amy will spend a few minutes alone together in a private room, for a chance to reflect upon the joyous occasion and enjoy the first few moments of married life together.