-
1
class ApplicationController < ActionController::Base
-
1
protect_from_forgery
-
1
rescue_from CanCan::AccessDenied do |exception|
-
redirect_to root_path, :alert => exception.message
-
end
-
-
1
before_filter do
-
if !current_user
-
redirect_to new_user_session_url unless request.filtered_parameters["controller"] =~ /^devise\/|^users\//
-
elsif current_user.roles.count == 0
-
redirect_to interpreter_sign_up_url unless request.filtered_parameters["controller"] =~ /^users\//
-
end
-
end
-
-
1
protected
-
-
1
def self.uses_an_organization!
-
1
before_filter do
-
@organization =
-
if !current_user.nil? && current_user.has_role?( :client ) && current_user.person.has_exactly_one_organization?
-
current_user.person.organizations.first
-
elsif session[ :client_id ]
-
Client.find( session[ :client_id ] )
-
else
-
redirect_to root_path, notice: "You need to select a client somehow..."
-
end
-
end
-
end
-
-
end
-
1
class ClientsController < ApplicationController
-
-
1
def create_scheduled_location
-
@organization = Client.find( params[:id] )
-
@location = @organization.schedulable_locations.build( params[:address] )
-
-
respond_to do |format|
-
-
if @location.save
-
format.html { render json: @location }
-
format.json { render json: @location }
-
else
-
format.html { render json: @location.errors, status: :unprocessable_entity }
-
format.json { render json: @location.errors, status: :unprocessable_entity }
-
end
-
-
end
-
end
-
-
-
end
-
1
class HomeController < ApplicationController
-
1
def index
-
@users = User.all
-
end
-
end
-
1
class InterpretersController < ApplicationController
-
# GET /interpreters
-
# GET /interpreters.json
-
1
def index
-
@interpreters = Interpreter.all
-
-
respond_to do |format|
-
format.html # index.html.erb
-
format.json { render json: @interpreters }
-
end
-
end
-
-
# GET /interpreters/1
-
# GET /interpreters/1.json
-
1
def show
-
@interpreter = Interpreter.find(params[:id])
-
-
respond_to do |format|
-
format.html # show.html.erb
-
format.json { render json: @interpreter }
-
end
-
end
-
-
# GET /interpreters/new
-
# GET /interpreters/new.json
-
1
def new
-
@interpreter = Interpreter.new
-
<EMAIL_ADDRESS>-
-
respond_to do |format|
-
format.html # new.html.erb
-
format.json { render json: @interpreter }
-
end
-
end
-
-
# GET /interpreters/1/edit
-
1
def edit
-
@interpreter = Interpreter.find(params[:id])
-
end
-
-
# POST /interpreters
-
# POST /interpreters.json
-
1
def create
-
@interpreter = Interpreter.new(params[:interpreter])
-
-
respond_to do |format|
-
if @interpreter.save
-
format.html { redirect_to @interpreter, notice: 'Interpreter was successfully created.' }
-
format.json { render json: @interpreter, status: :created, location: @interpreter }
-
else
-
format.html { render action: "new" }
-
format.json { render json: @interpreter.errors, status: :unprocessable_entity }
-
end
-
end
-
end
-
-
# PUT /interpreters/1
-
# PUT /interpreters/1.json
-
1
def update
-
@interpreter = Interpreter.find(params[:id])
-
-
respond_to do |format|
-
if @interpreter.update_attributes(params[:interpreter])
-
format.html { redirect_to @interpreter, notice: 'Interpreter was successfully updated.' }
-
format.json { head :no_content }
-
else
-
format.html { render action: "edit" }
-
format.json { render json: @interpreter.errors, status: :unprocessable_entity }
-
end
-
end
-
end
-
-
# DELETE /interpreters/1
-
# DELETE /interpreters/1.json
-
1
def destroy
-
@interpreter = Interpreter.find(params[:id])
-
@interpreter.destroy
-
-
respond_to do |format|
-
format.html { redirect_to interpreters_url }
-
format.json { head :no_content }
-
end
-
end
-
end
-
1
class JobRequestsController < ApplicationController
-
-
1
uses_an_organization!
-
-
# GET /job_requests/new
-
1
def new
-
@locations = @organization.schedulable_locations
-
@job_request = @organization.job_requests.build
-
@job_request.build_physical_address
-
@job_request.build_virtual_address
-
@certifications = Certification.active.all
-
@job_types = JobType.all
-
end
-
-
# POST /job_requests/interpreters_available.json
-
1
def interpreters_available
-
addy = Address.new params[:job_request][:physical_address_attributes]
-
time = Date.parse params[:job_request][:start_datetime]
-
duration = params[:job_request][:duration_in_hours].to_f
-
gender = params[:gender]
-
-
@interpreters = Interpreter.
-
willing_to_travel_to( addy.full_address ).
-
available_between_the_times( time, time + duration.hours ).
-
with_gender( gender ).
-
all
-
-
respond_to do |format|
-
format.json { render json: @interpreters }
-
end
-
end
-
-
-
# POST /job_requests
-
# POST /job_requests.json
-
1
def create
-
@job_request = @organization.job_requests.build( params[ :job_request ] )
-
-
if params[:add_to_address_book]
-
location = @organization.schedulable_locations.build( params[ :job_request ][:physical_address_attributes] )
-
location.save!
-
end
-
-
respond_to do |format|
-
if @job_request.save
-
format.html { redirect_to root_path, notice: "Job Request Created" }
-
format.json { render json: @job_request }
-
else
-
format.html { render action: "new" }
-
format.json { render json: @job_request.errors, status: :unprocessable_entity }
-
end
-
end
-
end
-
-
# PUT /job_requests/1
-
# PUT /job_requests/1.json
-
1
def update
-
begin
-
@job_request = @organization.job_requests.find( params[ :id ] )
-
rescue ActiveRecord::RecordNotFound
-
@job_request = nil
-
end
-
-
respond_to do |format|
-
if @job_request && @job_request.update_attributes( params[ :job_request ] )
-
format.html { redirect_to root_path, notice: "Job Requests Updated Successfully"}
-
format.json { head :no_content }
-
else
-
format.html { redirect_to root_path, notice: "Update Failed" }
-
format.json { render json: @job_request.errors, status: :unprocessable_entity }
-
end
-
end
-
end
-
-
1
def create_location
-
-
end
-
-
end
-
1
class Users::RegistrationsController < Devise::RegistrationsController
-
-
1
def create
-
super
-
## Example - add a user_type enum to user for registration, add rolify/cancan role at registration
-
# if current_user
-
# current_user.add_role current_user.user_type
-
# end
-
end
-
-
1
def interpreter_create
-
if current_user
-
-
# Look for simple rates
-
if params[:rates]
-
error = false
-
availabilities = []
-
avail = SimpleAvailability.new
-
begin
-
avail.start_day = :monday
-
avail.end_day = :friday
-
avail.start_time = params[:rates][:normal][:start].to_i.hours
-
avail.end_time = params[:rates][:normal][:end].to_i.hours
-
normal_rates = avail.to_pricing_rates
-
normal_rates.each do |rate|
-
rate.hourly_rate = params[:normal_hour_rate].to_i
-
end
-
avail.inverse_time!
-
after_rates = avail.to_pricing_rates
-
avail.start_day = :saturday
-
avail.end_day = :sunday
-
avail.start_time = 0
-
avail.end_time = 24.hours - 1.second
-
after_rates += avail.to_pricing_rates
-
after_rates.each do |rate|
-
rate.hourly_rate = params[:after_hour_rate].to_i
-
end
-
availabilities += ( normal_rates + after_rates )
-
rescue
-
error = true
-
availabilities = []
-
end
-
end
-
-
debugger
-
-
@interpreter = Interpreter.new( params[:interpreter] )
-
@interpreter.user_id = current_user.id
-
@interpreter.build_pricing_plan
-
@interpreter.pricing_plan.pricing_rates = availabilities if availabilities
-
-
if @interpreter.save
-
current_user.add_role :interpreter
-
redirect_to root_path
-
else
-
render :interpreter_sign_up
-
end
-
else
-
redirect_to new_user_registration_url
-
end
-
end
-
-
1
def interpreter_sign_up
-
if current_user
-
@certifications = Certification.all
-
@interpreter = Interpreter.new
-
@availability = SimpleAvailability.new
-
-
@interpreter.build_payment_method
-
@interpreter.build_mailing_address
-
@interpreter.build_work_address
-
@interpreter.build_pricing_plan
-
-
@availability.start_time = 8.hours
-
@availability.end_time = 16.hours
-
@interpreter.pricing_plan.pricing_rates = @availability.to_pricing_rates
-
-
respond_to do |format|
-
format.html #
-
end
-
else
-
redirect_to new_user_registration_url
-
end
-
end
-
-
end
-
1
class UsersController < ApplicationController
-
1
before_filter :authenticate_user!
-
-
1
def index
-
authorize! :index, @user, :message => 'Not authorized as an administrator.'
-
@users = User.all
-
end
-
-
1
def show
-
@user = User.find(params[:id])
-
end
-
-
end
-
1
module ApplicationHelper
-
end
-
1
module HourdropsHelper
-
1
def hourdrops day, start, stop, type
-
-
times = ['12AM', '01AM', '02AM', '03AM', '04AM', '05AM', '06AM', '07AM', '08AM', '09AM', '10AM', '11AM', '12PM', '01PM', '02PM', '03PM', '04PM', '05PM', '06PM', '07PM', '08PM', '09PM', '10PM', '11PM', '----' ]
-
-
data = ''
-
if start == 24 || stop == 24
-
data = 'data-was_nil="true"'
-
end
-
-
html = <<-HTML
-
<select name="[rates][#{day}][#{type}][start]" id="#{type}_start_#{day}" #{data}>
-
HTML
-
-
i = 0
-
times.each do |t|
-
-
if i == start
-
html += <<-HTML
-
<option value="#{i}" selected="selected" >#{t}</option>
-
HTML
-
else
-
html += <<-HTML
-
<option value="#{i}">#{t}</option>
-
HTML
-
end
-
-
i+=1
-
end
-
-
html += <<-HTML
-
</select>
-
<br/>
-
HTML
-
-
html += <<-HTML
-
<select name="[rates][#{day}][#{type}][stop]" id="#{type}_stop_#{day}">
-
HTML
-
-
j = 0
-
times.each do |t|
-
-
if j == stop
-
html += <<-HTML
-
<option value="#{j}" selected="selected" >#{t}</option>
-
HTML
-
else
-
html += <<-HTML
-
<option value="#{j}">#{t}</option>
-
HTML
-
end
-
-
j+=1
-
end
-
-
html += <<-HTML
-
</select>
-
HTML
-
-
html.html_safe
-
end
-
end
-
1
module InterpretersHelper
-
end
-
1
class Ability
-
1
include CanCan::Ability
-
-
1
def initialize(user)
-
user ||= User.new # guest user (not logged in)
-
if user.has_role? :admin
-
can :manage, :all
-
end
-
# Define abilities for the passed in user here. For example:
-
#
-
# user ||= User.new # guest user (not logged in)
-
# if user.admin?
-
# can :manage, :all
-
# else
-
# can :read, :all
-
# end
-
#
-
# The first argument to `can` is the action you are giving the user permission to do.
-
# If you pass :manage it will apply to every action. Other common actions here are
-
# :read, :create, :update and :destroy.
-
#
-
# The second argument is the resource the user can perform the action on. If you pass
-
# :all it will apply to every resource. Otherwise pass a Ruby class of the resource.
-
#
-
# The third argument is an optional hash of conditions to further filter the objects.
-
# For example, here the user can only update published articles.
-
#
-
# can :update, Article, :published => true
-
#
-
# See the wiki for details: https://github.com/ryanb/cancan/wiki/Defining-Abilities
-
end
-
end
-
# ==== Class Attributes
-
#
-
# @!attribute [r] id
-
# @return [Integer] unique database id of this address
-
#
-
# @!attribute city
-
# @return [String] urban area name like Austin, Dallas, New Year... etc
-
#
-
# @!attribute state
-
# @return [String] country region name like Indiana, Texas... etc
-
#
-
# @!attribute street
-
# @return [String] first line of a typical address
-
#
-
# @!attribute street2
-
# @return [String] second line of a typical address, normally something like
-
# a suite or apartment number
-
#
-
# @!attribute name
-
# @return [String] Identifier for the address, when used in an address list / book format
-
#
-
# @!attribute room
-
# @return [String]
-
#
-
# @!attribute zip
-
# @return [String] mailing postal code
-
#
-
# @!attribute county
-
# @return [String] sub state region
-
#
-
# @!attribute latitude
-
# @return [Float] geo coordinate
-
#
-
# @!attribute longitude
-
# @return [Float] geo coordinate
-
#
-
# @!attribute [r] addressable_type
-
# @return [String] the class name and/or relationship that this address belongs to
-
#
-
# @!attribute [r] addressable_id
-
# @return [Integer] id of the object that the address belongs to
-
#
-
# @!attribute [r] created_at
-
# @return [Date] when this address was made
-
#
-
# @!attribute [r] updated_at
-
# @return [Date] last time address was updated
-
#
-
# @!attribute address_type
-
# @return [String] enumeration descriptor of the address :physical, :mailing, :billing, :schedulable
-
#
-
# ==== Class Relationships
-
#
-
# @!attribute addressable
-
# @return [Person, JobRequest, Client]
-
#
-
1
class Address < ActiveRecord::Base
-
1
attr_accessible :city, :state, :street, :street2, :zip, :county, :latitude, :longitude, :room, :name, :address_type
-
-
# Geo Coding for addresses
-
1
geocoded_by :full_address
-
1
after_validation :geocode
-
-
1
validates_presence_of :city, :state, :street, :zip
-
-
1
belongs_to :addressable, :polymorphic => true
-
1
enum_attr :address_type, %w( ^physical mailing billing schedulable )
-
-
1
def full_address
-
"#{street} #{street2} #{city},#{state} #{zip}".squish!
-
end
-
end
-
1
class Attachment < ActiveRecord::Base
-
1
attr_accessible :file
-
-
1
mount_uploader :file, AttachmentUploader
-
-
1
belongs_to :attachable, :polymorphic => true
-
end
-
-
# ==== Class Attributes
-
#
-
# @!attribute [r] id
-
# @return [Integer] unique database id of this address
-
#
-
# @!attribute day_of_week
-
# @return [String] enum string representation of they day of week, monday
-
# tuesday, wednesday, thursday, friday, saturday, sunday
-
#
-
# @!attribute start_time
-
# @return [Time] the clock mark of when the time range starts
-
#
-
# @!attribute end_time
-
# @return [Time] the clock mark of when the time range ends
-
#
-
# @!attribute not_available
-
# @return [TrueClass, FalseClass] boolean flag on if this availability time
-
# is describing an 'availability' or an 'in-availability'
-
#
-
# @!attribute [r] created_at
-
# @return [Date] when availability was created
-
#
-
# @!attribute [r] updated_at
-
# @return [Date] when availability was update
-
#
-
# ==== Class Relationships
-
#
-
# @!attribute interpreter
-
# @return [Interpreter] person this availability belongs to
-
#
-
1
class Availability < ActiveRecord::Base
-
-
1
attr_accessible :day_of_week, :end_time, :exception_date, :not_available, :start_time
-
-
1
belongs_to :interpreter
-
-
1
enum_attr :day_of_week, %w( monday tuesday wednesday thursday friday saturday sunday )
-
-
end
-
1
class BillingMethod < ActiveRecord::Base
-
1
attr_accessible :billing_type, :billing_address, :cc_number, :cc_ccv, :cc_exp, :billing_name, :mas90_id
-
-
1
belongs_to :billable, :polymorphic => true
-
-
1
has_one :billing_address, :class_name => 'Address', :as => :addressable, :dependent => :destroy, :conditions => { :address_type => :billing }
-
-
1
enum_attr :billing_type, %w(invoice cc)
-
end
-
# ==== Class Attributes
-
#
-
# @!attribute [r] id
-
# @return [Integer] unique database id of this address
-
#
-
# @!attribute [r] created_at
-
# @return [Date] when availability was created
-
#
-
# @!attribute [r] updated_at
-
# @return [Date] when availability was update
-
#
-
# @!attribute certifiable_id
-
# @return [Integer]
-
#
-
# @!attribute certification
-
# @return [String] free form text field describing the certification
-
#
-
#
-
1
class Certification < ActiveRecord::Base
-
-
1
attr_accessible :name
-
-
1
has_many :interpreter_certifications
-
-
end
-
# ==== Class Attributes
-
#
-
# @!attribute [r] id
-
# @return [Integer] unique database id of this address
-
#
-
# @!attribute [r] created_at
-
# @return [Date] when availability was created
-
#
-
# @!attribute [r] updated_at
-
# @return [Date] when availability was update
-
#
-
# @!attribute mas90_id
-
# @return [String] foreign key to an external accounting system
-
#
-
# ==== Class Relationships
-
#
-
#
-
# @!attribute notes
-
# @return [Array<Note>]
-
#
-
# @!attribute contracts
-
# @return [Array<Contract>]
-
#
-
# @!attribute mailing_address
-
# @return [Address]
-
#
-
# @!attribute billing_address
-
# @return [Address]
-
#
-
# @!attribute virtual_address
-
# @return [Array<VirtualAddress>] types of communication identification such as voice, email, im, and text
-
#
-
1
class Client < Person
-
-
1
has_one :billing_method, :class_name => 'BillingMethod', :as => :billable, :dependent => :destroy
-
-
1
belongs_to :organization, :class_name => 'Organization', :inverse_of => :clients
-
-
1
has_many :job_requests
-
-
1
has_many :notes, :class_name => 'Note', :as => :notable, :dependent => :destroy
-
-
1
has_many :schedulable_locations, :class_name => 'Address', :as => :addressable, :dependent => :destroy, :conditions => { :address_type => :schedulable }
-
-
-
1
def has_exactly_one_organization?
-
organizations.count == 1
-
end
-
-
# # Making sure the type is set correctly on assignment
-
# def mailing_address=( address )
-
# address.address_type=( 'mailing' ) if address.respond_to? :address_type=
-
# super( address )
-
# end
-
-
end
-
# ==== Class Attributes
-
#
-
# @!attribute [r] id
-
# @return [Integer] unique database id of this address
-
#
-
# @!attribute [r] created_at
-
# @return [Date] when this address was made
-
#
-
# @!attribute [r] updated_at
-
# @return [Date] last time address was updated
-
#
-
# @!attribute contractable_id
-
# @return [Integer] foreign key
-
#
-
# @!attribute contractable_type
-
# @return [String] class that owns the foreign key
-
#
-
# @!attribute start_date
-
# @return [Date] when the contract begins
-
#
-
# @!attribute end_date
-
# @return [Date] when the contract ends
-
#
-
# ==== Class Relationships
-
#
-
# @!attribute contractable
-
# @return [Client,Interpreter]
-
#
-
# @!attribute notes
-
# @return [Array<Note>]
-
#
-
# @!attribute billing_plan
-
# @return [BillingPlan]
-
1
class Contract < ActiveRecord::Base
-
-
# TODO what is the reference field? it's not in the migrations or schema
-
1
attr_accessible :end_date, :start_date, :reference
-
-
1
belongs_to :contractable, :polymorphic => true
-
-
1
has_many :notes, :class_name => 'Note', :as => :notable
-
-
1
has_one :billing_method, :class_name => 'BillingMethod', :as => :billable, :dependent => :destroy
-
-
end
-
# ==== Class Attributes
-
#
-
# @!attribute [r] id
-
# @return [Integer] unique database id of this address
-
#
-
# @!attribute [r] created_at
-
# @return [Date] when this address was made
-
#
-
# @!attribute [r] updated_at
-
# @return [Date] last time address was updated
-
#
-
# @!attribute certification_id
-
# @return [Integer]
-
#
-
# @!attribute job_criteria_id
-
# @return [Integer]
-
#
-
# @!attribute required
-
# @return [TrueClass,FalseClass] specifies if the criteria is a "need" or "want"
-
#
-
# ==== Class Relationships
-
#
-
# @!attribute certification
-
# @return [Certification]
-
#
-
# @!attribute job_criteria
-
# @return [JobCriteria]
-
1
class CriteriaCertification < ActiveRecord::Base
-
-
1
validate :only_instance?
-
-
1
attr_accessible :required
-
-
1
belongs_to :certification
-
-
1
belongs_to :job_criteria
-
-
# The same certification cannot exist for a job criteria twice
-
1
def only_instance?
-
if new_record? && CriteriaCertification.where( :job_criteria_id => job_criteria_id, :certification_id => certification_id ).count > 0
-
errors[:base] << "You may not define the same JobCriteria <==> Certification Twice"
-
elsif not new_record? and ( job_criteria_id_changed? or certification_id_changed? )
-
errors[:base] << "JobCriteria <==> Certification relationship may not be remapped"
-
end
-
end
-
-
end
-
1
class CriteriaSkill < ActiveRecord::Base
-
# attr_accessible :title, :body
-
1
attr_accessible :job_request, :skill_type
-
-
1
belongs_to :job_request
-
1
enum_attr :skill_type, %w(legal medical music theatrical meeting blind_deaf limited_proficiency)
-
end
-
1
class Insurance < ActiveRecord::Base
-
-
1
mount_uploader :insurance_proof, InsuranceProofUploader
-
-
1
attr_accessible :account, :carrier, :coverage
-
-
1
belongs_to :interpreter
-
-
end
-
# ==== Class Attributes
-
#
-
# @!attribute years_experience
-
# @return [Float]
-
#
-
# @!attribute miles_willing_to_travel
-
# @return [Integer]
-
#
-
# ==== Class Relationships
-
#
-
# @!attribute notes
-
# @return [Array<Note>]
-
#
-
# @!attribute availabilities
-
# @return [Array<Availability>]
-
#
-
# @!attribute certifications
-
# @return [Array<Certification>]
-
#
-
# @!attribute contracts
-
# @return [Array<Contract>]
-
#
-
# @!attribute job_assignments
-
# @return [Array<JobAssignment>]
-
#
-
1
class Interpreter < Person
-
-
1
has_many :skills, :class_name => 'Skill', :dependent => :destroy
-
-
1
has_many :insurance, :class_name => 'Insurance', :dependent => :destroy
-
-
1
has_one :payment_method, :class_name => 'PaymentMethod', :as => :payable, :dependent => :destroy
-
-
1
has_many :notes, :class_name => 'Note', :as => :notable, :dependent => :destroy
-
-
1
has_one :work_address, :class_name => 'Address', :as => :addressable, :dependent => :destroy, :conditions => { :address_type => :physical }
-
-
1
has_many :availabilities, :class_name => 'Availability', :dependent => :destroy
-
-
1
has_many :interpreter_certifications, :class_name => 'InterpreterCertification', :dependent => :destroy
-
-
1
has_many :certifications, :through => :interpreter_certifications
-
-
1
has_many :contracts, :class_name => 'Contract', :as => :contractable, :dependent => :destroy
-
-
1
has_many :job_assignments, :class_name => 'JobAssignment'
-
-
1
has_one :pricing_plan
-
-
1
has_many :pricing_rates, :through => :pricing_plan
-
-
1
accepts_nested_attributes_for :notes, :availabilities, :interpreter_certifications, :payment_method,
-
:insurance, :skills, :user, :work_address, :pricing_plan
-
-
1
attr_accessible :notes_attributes, :availabilities_attributes, :interpreter_certifications_attributes,
-
:payment_method_attributes, :insurance_attributes, :skills_attributes, :years_experience, :miles_willing_to_travel,
-
:user_attributes, :work_address_attributes, :written_languages, :spoken_languages, :pricing_plan_attributes
-
-
# The almighty validation
-
#validates_presence_of :gender, :mailing_address, :work_address, :insurance, :payment_method, :miles_willing_to_travel
-
-
-
# Returns interpreters who are close enough to the
-
# given address based on their miles willing to travel
-
#
-
# @param String address
-
# @return ActiveRecord::Relation
-
1
def self.willing_to_travel_to( address )
-
addresses = Address.
-
joins('INNER JOIN people ON people.id = addresses.addressable_id AND addresses.addressable_type = "Person"').
-
where("#{Address.distance_from_sql( address )} < people.miles_willing_to_travel")
-
-
where( :id => addresses.collect { |addy| addy.addressable_id } )
-
end
-
-
1
def self.with_minimum_years_experience( years )
-
raise "years must be numeric" unless years.is_numeric?
-
raise "invalid years (#{years}" if years.to_f < 0
-
return scoped if years == 0
-
where('people.years_experience >= ?', years.to_f )
-
end
-
-
# TODO need to also look into factoring in their 'availabilities'
-
1
def self.available_between_the_times( start, finish )
-
joins("LEFT JOIN job_assignments ON job_assignments.interpreter_id = people.id
-
AND ((job_assignments.estimated_end > '#{sanitize_sql_array(["%s", start])}' AND job_assignments.scheduled_start < '#{sanitize_sql_array(["%s", start])}')
-
OR (job_assignments.estimated_end > '#{sanitize_sql_array(["%s", finish])}' AND job_assignments.scheduled_start < '#{sanitize_sql_array(["%s", finish])}'))").
-
where('job_assignments.id IS NULL')
-
end
-
-
1
def self.with_gender( gender )
-
case gender.to_s.downcase.to_sym
-
when :male
-
where( :gender => :male )
-
when :female
-
where( :gender => :female )
-
when :either
-
scoped
-
else
-
raise "invalid gender"
-
end
-
end
-
-
1
def self.having_the_following_certifications( cert_ids )
-
return scoped if cert_ids.nil? || cert_ids.empty?
-
raise "a collection is required" unless cert_ids.respond_to?( :each )
-
joins(:interpreter_certifications).
-
where("interpreter_certifications.certification_id IN (?)", cert_ids )
-
end
-
-
#agreed to term
-
#max distance to travel
-
#skills - years experience, primary language or learned, where/when learned
-
#ASL specialty skills - legal, medical, music, theatrical, speech, business meeting, blind/deaf, limited proficiency
-
#Liability insurance - Carrier name, Account #, Coverage Amount, Upload Scanned Copy of proof of Insurance
-
# Additional info required for CSD Certification:
-
# *ever arrested - if yes, date and reason
-
# *ever convicted of a felony - if yes, date, charge, court, and whether currently on probation
-
# Professional Liability insurance, TB test, Criminal Background check, Memorandum of Agreement, Statement of Work, HIPAA compliance forms, and medical records.
-
#blacklist terps, clients, orgs
-
-
end
-
# ==== Class Attributes
-
#
-
# @!attribute [r] id
-
# @return [Integer] unique database id of this address
-
#
-
# @!attribute [r] created_at
-
# @return [Date] when availability was created
-
#
-
# @!attribute [r] updated_at
-
# @return [Date] when availability was update
-
#
-
# @!attribute certification_id
-
# @return [Integer]
-
#
-
# @!attribute certifier
-
# @return [String] free form text field describing the authoritative body providing the certification
-
#
-
# @!attribute comment
-
# @return [String] additional free form text field
-
#
-
# @!attribute end_date
-
# @return [Time] when the certification expires
-
#
-
# @!attribute start_time
-
# @return [Time] when the certification begins
-
#
-
# ==== Class Relationships
-
#
-
# @!attribute certification_id
-
# @return []
-
#
-
# @!attribute interpreter_id
-
# @return []
-
-
1
class InterpreterCertification < ActiveRecord::Base
-
-
1
attr_accessible :start_date, :end_date, :comment, :certifier, :interpreter, :name, :certification_id
-
-
1
belongs_to :certification
-
1
belongs_to :interpreter
-
-
1
scope :active, where( 'end_date > :time AND start_date < :time', time: DateTime.now.beginning_of_day )
-
-
1
def name
-
if super && !super.empty?
-
super
-
else
-
certification.name
-
end
-
end
-
-
1
def name=(name)
-
match = Certification.find_by_name(name)
-
if match
-
self.certification_id = match.id
-
super
-
else
-
self.certification_id = nil
-
super
-
end
-
end
-
-
end
-
# ==== Class Attributes
-
#
-
# @!attribute [r] id
-
# @return [Integer] unique database id of this address
-
#
-
# @!attribute [r] created_at
-
# @return [Date] when this address was made
-
#
-
# @!attribute [r] updated_at
-
# @return [Date] last time address was updated
-
#
-
# @!attribute contract_id
-
# @return [Integer]
-
#
-
# @!attribute invoice_type
-
# @return [String] either "client" or "interpreter"
-
#
-
# @!attribute invoiceable_type
-
# @return [String] class that the foreign key references
-
#
-
# @!attribute invoiceable_id
-
# @return [Integer]
-
#
-
# @!attribute period_start
-
# @return [Date]
-
#
-
# @!attribute period_end
-
# @return [Date]
-
#
-
# @!attribute reference
-
# @return [String]
-
#
-
# ==== Class Attributes
-
#
-
# @!attribute job_assignments
-
# @return [Array<JobAssignment>]
-
#
-
# @!attribute contract
-
# @return [Contract]
-
#
-
# @!attribute invoiceable
-
# @return [JobAssignment]
-
#
-
1
class Invoice < ActiveRecord::Base
-
1
attr_accessible :invoice_type, :period_end, :period_start, :reference, :job_assignments, :contract
-
-
1
belongs_to :invoiceable, :polymorphic => true
-
-
1
enum_attr :invoice_type, %w(client interpreter)
-
1
has_many :job_assignments
-
1
belongs_to :contract
-
end
-
# ==== Class Attributes
-
#
-
# @!attribute [r] id
-
# @return [Integer] unique database id of this address
-
#
-
# @!attribute [r] created_at
-
# @return [Date] when this address was made
-
#
-
# @!attribute [r] updated_at
-
# @return [Date] last time address was updated
-
#
-
# @!attribute job_date
-
# @return [Date]
-
#
-
# @!attribute calculation_description
-
# @return [String]
-
#
-
# @!attribute amount_cents
-
# @return [Integer]
-
#
-
# ==== Class Relationships
-
#
-
# @!attribute job_assignment
-
# @return [JobAssignment]
-
#
-
# @!attribute billing_plan
-
# @return [BillingPlan]
-
#
-
# @!attribute contract
-
# @return [Contract]
-
1
class InvoiceItem < ActiveRecord::Base
-
1
attr_accessible :amount_cents, :calculation_description, :job_date,
-
:job_assignment_attributes, :billing_plan_attributes, :contract_attributes, # TODO we may not need these three in the mass setter
-
:invoice_item_type
-
-
1
enum_attr :invoice_item_type, %w( client interpreter )
-
1
monetize :amount_cents
-
1
belongs_to :job_assignment # must have
-
1
belongs_to :billing_plan # must have
-
1
belongs_to :contract # may or may not have a contract
-
end
-
# ==== Class Attributes
-
#
-
# @!attribute [r] id
-
# @return [Integer] unique database id of this address
-
#
-
# @!attribute [r] created_at
-
# @return [Date] when this address was made
-
#
-
# @!attribute [r] updated_at
-
# @return [Date] last time address was updated
-
#
-
# @!attribute status
-
# @return [String] "pending", "completed", "cancelled"
-
#
-
# @!attribute scheduled_start
-
# @return [Date]
-
#
-
# @!attribute estimated_end
-
# @return [Date]
-
#
-
# @!attribute actual_start
-
# @return [Date]
-
#
-
# @!attribute actual_end
-
# @return [Date]
-
#
-
# @!attribute client_billing_plan_id
-
# @return [Integer]
-
#
-
# @!attribute interpreter_billing_plan_id
-
# @return [Integer]
-
#
-
# @!attribute client_id
-
# @return [Integer]
-
#
-
# @!attribute interpreter_id
-
# @return [Integer]
-
#
-
# @!attribute job_request_id
-
# @return [Integer]
-
#
-
# ==== Class Relationships
-
#
-
# @!attribute client
-
# @return [Client]
-
#
-
# @!attribute interpreter
-
# @return [Interpreter]
-
#
-
# @!attribute job_request
-
# @return [JobRequest]
-
#
-
# @!attribute client_billing_plan
-
# @return [BillingPlan]
-
#
-
# @!attribute interpreter_billing_plan
-
# @return [BillingPlan]
-
1
class JobAssignment < ActiveRecord::Base
-
1
attr_accessible :actual_end, :actual_start, :estimated_end, :scheduled_start,
-
:status, :client, :interpreter, :job_request, :client_billing_plan, :interpreter_billing_plan
-
-
1
enum_attr :status, %w(pending, completed, cancelled)
-
1
belongs_to :client
-
1
belongs_to :interpreter
-
1
belongs_to :job_request
-
-
1
belongs_to :client_billing_plan, :class_name => "BillingPlan", :foreign_key => "client_billing_plan_id" # must have
-
1
belongs_to :interpreter_billing_plan, :class_name => "BillingPlan", :foreign_key => "interpreter_billing_plan_id" # must have
-
-
1
has_many :invoice_items
-
1
has_many :interpreter_invoice_items, :through => 'invoice_items', :conditions => { :invoice_item_type => :interpreter }
-
1
has_many :client_invoice_items, :through => 'invoice_items', :conditions => { :invoice_item_type => :client }
-
-
1
belongs_to :interpreter_invoice, :class_name => "Invoice", :dependent => :destroy, :foreign_key => "interpreter_invoice_id"
-
1
belongs_to :client_invoice, :class_name => "Invoice", :dependent => :destroy, :foreign_key => "client_invoice_id"
-
end
-
# ==== Class Attributes
-
#
-
# @!attribute [r] id
-
# @return [Integer] unique database id of this address
-
#
-
# @!attribute [r] created_at
-
# @return [Date] when this address was made
-
#
-
# @!attribute [r] updated_at
-
# @return [Date] last time address was updated
-
#
-
# @!attribute recurring
-
# @return [String] describes the frequency of which the request will happen, options are 'none', 'daily', 'weekly',
-
# 'biweekly', 'monthly', 'quarterly', 'yearly'
-
#
-
# @!attribute request_status
-
# => when request is first created, it is in 'unfilled' state.
-
# => when payment approval is done, request should be moved to 'pending' state and sent off to interpreters
-
# => when an interpreter is associated with the request, it should be moved to a 'filled' state and no longer available for filling. Confirmation emails should be sent to client and terp
-
# => when both client and terp confirm the assignment, then request should be moved into a 'confirmed' state and a JobAssignment created.
-
# @return [String] flag detailing where in the process the request is, options are 'unfilled', 'pending', 'filled', 'confirmed'
-
#
-
# @!attribute request_type
-
# @return [String] options are 'site', 'vri'
-
#
-
# @!attribute start_datetime
-
# @return [Date]
-
#
-
# @!attribute client_id
-
# @return [Integer] foreign key for the Client to whom this job request belongs to
-
#
-
# @!attribute name
-
# @return [String]
-
#
-
# @!attribute reference
-
# @return [String] used by client to attach a reference id for their own records
-
#
-
# @!attribute start_window
-
# @return [Date]
-
#
-
# @!attribute estimated_period
-
# @return [Integer]
-
#
-
# @!attribute period_window
-
# @return [Integer]
-
#
-
# @!attribute hourly_max_cents
-
# @return [Integer]
-
#
-
# @!attribute total_max_cents
-
# @return [Integer]
-
#
-
# @!attribute gender_range
-
# @return [String] enum of three selections 'any', 'male', 'female'
-
#
-
# ==== Class Relationships
-
#
-
# @!attribute client
-
# @return [Client]
-
#
-
# @!attribute physical_address
-
# @return [Address]
-
#
-
# @!attribute virtual_address
-
# @return [VirtualAddress]
-
#
-
# @!attribute criteria_certifications_desired
-
# @return [Array<CriteriaCertification>] non-required certification criteria
-
#
-
# @!attribute criteria_certifications_required
-
# @return [Array<CriteriaCertification>] Criteria that must be held by an interpreter for the job_request
-
#
-
# @!attribute certifications_desired
-
# @return [Array<Certification>]
-
#
-
# @!attribute certifications_required
-
# @return [Array<Certification>]
-
1
class JobRequest < ActiveRecord::Base
-
-
# TODO the client, physical_address, and virtual_address accessors may need to be nuked and refitted with nested workers
-
1
attr_accessible :recurring, :request_status, :request_type, :start_datetime, :client, :physical_address, :virtual_address, :name, :reference, :description
-
1
attr_accessible :estimated_period, :gender_range, :hourly_max_cents, :period_window, :start_window, :total_max_cents
-
1
attr_accessible :job_type, :percent_interpreting, :services_for, :onsite_contact
-
1
attr_accessible :physical_address_attributes, :services_for_attributes, :onsite_contact_attributes, :client_id
-
-
1
belongs_to :client
-
1
belongs_to :services_for, :class_name => 'Person'
-
1
belongs_to :onsite_contact, :class_name => 'Person'
-
-
# For onsite
-
1
has_one :physical_address, :class_name => 'Address', :as => :addressable
-
# For VRI
-
1
has_one :virtual_address, :class_name => 'VirtualAddress', :as => :virtual_addressable
-
-
-
1
has_many :criteria_certifications_desired, :class_name => 'CriteriaCertification', :conditions => { :required => false }
-
-
1
has_many :criteria_certifications_required, :class_name => 'CriteriaCertification', :conditions => { :required => true }
-
-
1
has_many :certifications_desired, :through => :criteria_certifications_desired, :source => :certification
-
-
1
has_many :certifications_required, :through => :criteria_certifications_required, :source => :certification
-
-
1
has_many :criteria_skills, :class_name => 'CriteriaSkill'
-
-
1
has_many :attachments, :as => :attachable
-
-
1
monetize :hourly_max_cents
-
1
monetize :total_max_cents
-
-
1
accepts_nested_attributes_for :physical_address, :services_for, :onsite_contact
-
-
1
enum_attr :gender_range, %w(any, male, female)
-
1
enum_attr :request_status, %w(unfilled pending filled confirmed) # on confirmed it should kick off an assignment
-
1
enum_attr :request_type, %w(site vri)
-
1
enum_attr :recurring, %w(none daily weekly biweekly monthly quarterly yearly)
-
-
end
-
1
class JobType < ActiveRecord::Base
-
1
attr_accessible :title
-
end
-
# ==== Class Attributes
-
#
-
# @!attribute [r] id
-
# @return [Integer] unique database id of this address
-
#
-
# @!attribute [r] created_at
-
# @return [Date] when this address was made
-
#
-
# @!attribute [r] updated_at
-
# @return [Date] last time address was updated
-
#
-
# @!attribute comment
-
# @return [String]
-
#
-
# @!attribute visibility
-
# @return [String] enum of four options 'call_center', 'interpreter', 'client', 'all'
-
#
-
# @!attribute notable_id
-
# @return [Integer] foreign key to which the note belongs
-
#
-
# @!attribute notable_type
-
# @return [String] object table that the foreign key points to
-
#
-
# ==== Class Relationships
-
#
-
# @!attribute notable
-
# @return [Client,Contract,Interpreter]
-
#
-
1
class Note < ActiveRecord::Base
-
-
1
attr_accessible :comment, :notable_id, :notable_type, :visibility
-
-
1
belongs_to :notable, :polymorphic => true, :dependent => :destroy
-
-
1
enum_attr :visibility, %w( call_center interpreter client all ) # should really be a hash or bit representation
-
-
end
-
1
class Organization < ActiveRecord::Base
-
-
1
resourcify
-
-
1
attr_accessible :formal_name, :name, :org_type
-
-
1
enum_attr :org_type, %w(Medical, Legal, Education, Government, Other)
-
-
1
has_one :billing_method, :class_name => 'BillingMethod', :as => :billable, :dependent => :destroy
-
-
1
has_many :clients, :class_name => 'Client', :inverse_of => :organization
-
-
1
has_many :contracts, :class_name => 'Contract', :as => :contractable
-
-
1
has_one :mailing_address, :class_name => 'Address', :as => :addressable, :dependent => :destroy, :conditions => { :address_type => :mailing }
-
-
1
has_many :schedulable_locations, :class_name => 'Address', :as => :addressable, :dependent => :destroy, :conditions => { :address_type => :schedulable }
-
1
has_many :notes, :class_name => 'Note', :as => :notable, :dependent => :destroy
-
-
# Making sure the type is set correctly on assignment
-
1
def mailing_address=( address )
-
address.address_type=( 'mailing' ) if address.respond_to? :address_type=
-
super( address )
-
end
-
-
end
-
1
class PaymentMethod < ActiveRecord::Base
-
1
attr_accessible :bank_account, :bank_name, :bank_routing, :payment_type, :paypal_account, :mailing_address, :mas90_id
-
-
1
belongs_to :payable, :polymorphic => true
-
-
1
has_one :mailing_address, :class_name => 'Address', :as => :addressable, :dependent => :destroy, :conditions => { :address_type => :mailing }
-
-
1
enum_attr :payment_type, %w(paypal direct check)
-
end
-
# ==== Class Attributes
-
#
-
# @!attribute [r] id
-
# @return [Integer] unique database id of this address
-
#
-
# @!attribute dob
-
# @return [Date] date of birth
-
#
-
# @!attribute first_name
-
# @return [String]
-
#
-
# @!attribute gender
-
# @return [String] enumeration of either 'male' or 'female'
-
#
-
# @!attribute last_name
-
# @return [String]
-
#
-
# @!attribute middle_name
-
# @return [String]
-
#
-
# @!attribute postfix_name
-
# @return [String]
-
#
-
# @!attribute preferred_language
-
# @return [String]
-
# @todo this is free form, should make it an enumeration ?
-
#
-
# @!attribute prefix_name
-
# @return [String]
-
#
-
# @!attribute user_id
-
# @return [Integer] unique id of the user, if any, that this person is bound to
-
#
-
# @!attribute [r] created_at
-
# @return [Date] when this address was made
-
#
-
# @!attribute [r] updated_at
-
# @return [Date] last time address was updated
-
#
-
# @!attribute type
-
# @return [String] Used by the rails model to determine inheritance selects on models that extend Person
-
#
-
# ==== Class Relationships
-
#
-
# @!attribute physical_address
-
# @return [Array<Address>]
-
#
-
# @!attribute virtual_addresses
-
# @return [Array<VirtualAddress>]
-
#
-
# @!attribute user
-
# @return [User, NilClass]
-
-
1
class Person < ActiveRecord::Base
-
-
1
attr_accessible :dob, :first_name, :gender, :last_name, :middle_name, :postfix_name, :preferred_language, :prefix_name
-
-
1
has_one :mailing_address, :class_name => 'Address', :as => :addressable, :dependent => :destroy, :conditions => { :address_type => :mailing }
-
-
1
has_many :virtual_addresses, :class_name => 'VirtualAddress', :as => :virtual_addressable, :dependent => :destroy
-
1
has_many :emails, :class_name => 'VirtualAddress', :as => :virtual_addressable, :conditions => { :contact_type => :email }
-
-
1
accepts_nested_attributes_for :mailing_address, :virtual_addresses
-
1
attr_accessible :mailing_address_attributes, :virtual_addresses_attributes, :user_id
-
-
1
serialize :virtual_addresses_attributes
-
-
1
belongs_to :user
-
-
1
enum_attr :gender, %w(male female)
-
-
1
validates :last_name, :presence => true
-
1
validates :first_name, :presence => true
-
-
# @return [String] combines the first, middle, and last names and any prefix or postfix names
-
1
def full_name
-
"#{self.prefix_name} #{self.first_name} #{self.middle_name} #{self.last_name} #{self.postfix_name}".squish!
-
end
-
-
# @return [String] returns a formatted string with the last name
-
1
def last_first
-
"#{self.last_name}, #{self.first_name} #{self.middle_name}".squish!
-
end
-
-
1
def email
-
return self.user.email unless (self.user.nil? || self.user.email.empty?)
-
return self.emails[0] unless (self.emails.nil || self.emails.empty?)
-
end
-
-
end
-
1
class PersonRelationship < ActiveRecord::Base
-
-
1
attr_accessible :from_person, :to_person, :to_organization, :relationship_type
-
-
1
belongs_to :from_person, :class_name => 'Person'
-
1
belongs_to :to_person, :class_name => 'Person'
-
1
belongs_to :to_organization, :class_name => 'Organization'
-
-
1
enum_attr :relationship_type, %w(blacklist preferred)
-
-
1
def person_relationship?
-
return !self.to_person.nil?
-
end
-
-
1
def organization_relationship?
-
return !self.to_organization.nil?
-
end
-
-
1
def person_or_organization
-
self.to_person || self.to_organization
-
end
-
end
-
# ==== Class Attributes
-
#
-
# @!attribute [r] id
-
# @return [Integer] unique database id of this address
-
#
-
# @!attribute [r] created_at
-
# @return [Date] when this address was made
-
#
-
# @!attribute [r] updated_at
-
# @return [Date] last time address was updated
-
#
-
# @!attribute date_from
-
# @return [Date] start date of the schedule
-
#
-
# @!attribute date_to
-
# @return [Date] end date of the schedule
-
#
-
# ==== Class Relationships
-
#
-
# @!attribute pricing_rate
-
# @return [pricingRate]
-
1
class PricingBlockPeriod < ActiveRecord::Base
-
-
1
attr_accessible :effective_date, :end_date, :start_time, :end_time, :day_of_week
-
-
1
belongs_to :pricing_plan, :class_name => 'PricingPlan'
-
-
1
enum_attr :day_of_week, %w( monday tuesday wednesday thursday friday saturday sunday )
-
end
-
# ==== Class Attributes
-
#
-
# @!attribute [r] id
-
# @return [Integer] unique database id of this address
-
#
-
# @!attribute [r] created_at
-
# @return [Date] when this address was made
-
#
-
# @!attribute [r] updated_at
-
# @return [Date] last time address was updated
-
#
-
# @!attribute billable_plan_id
-
# @return [Integer]
-
#
-
# @!attribute billable_plan_type
-
# @return [String]
-
#
-
# @!attribute title
-
# @return [String]
-
#
-
# ==== Class Relationships
-
#
-
# @!attribute pricing_rate_schedules
-
# @return [Array<pricingRateSchedule>]
-
#
-
# @!attribute billable_plan
-
# @return [Contract]
-
#
-
# @!attribute interpreter
-
# @return Interpreter
-
1
class PricingPlan < ActiveRecord::Base
-
-
#rates effective from effective_date to end_date
-
1
has_many :pricing_rates, :dependent => :destroy
-
-
1
has_many :pricing_rate_premiums, :dependent => :destroy
-
-
#periods of time that are blocked - no rate = no availability
-
1
has_many :pricing_block_periods, :dependent => :destroy
-
-
1
accepts_nested_attributes_for :pricing_rates, :pricing_rate_premiums, :pricing_block_periods
-
-
1
belongs_to :interpreter
-
-
1
attr_accessible :title, :pricing_rates_attributes, :pricing_rate_premiums_attributes, :pricing_block_periods_attributes
-
-
1
def self.available_during( starting, ending )
-
joins( :pricing_rates )
-
.joins( :pricing_block_periods )
-
.where("pricing_block_periods.effective_date < :starting", :starting=>starting )
-
.where("pricing_block_periods.end_date IS NULL OR pricing_block_periods.end_date < :ending", :ending=>ending )
-
.where("pricing_block_periods.day_of_week = :week_day", :week_day=>extract_day(starting) )
-
.where("pricing_block_periods.start_time <= :start_time", :start_time=>extract_time(starting) )
-
.where("pricing_block_periods.end_time >= :end_time", :end_time=>extract_time(ending) )
-
-
end
-
-
1
private
-
-
1
def self.extract_day( date )
-
date.strftime('%A').downcase!
-
end
-
-
1
def self.extract_time( date )
-
Time.at( date.hour.hours + date.min.minutes + date.sec.seconds ).utc
-
end
-
-
-
end
-
# ==== Class Attributes
-
#
-
# @!attribute [r] id
-
# @return [Integer] unique database id of this address
-
#
-
# @!attribute [r] created_at
-
# @return [Date] when availability was created
-
#
-
# @!attribute [r] updated_at
-
# @return [Date] when availability was update
-
#
-
# @!attribute pricing_rate_schedule_id
-
# @return [Integer]
-
#
-
# @!attribute start_time
-
# @return [Time]
-
#
-
# @!attribute end_time
-
# @return [Time]
-
#
-
# @!attribute title
-
# @return [String]
-
#
-
# @!attribute increment_rate
-
# => the rate per increment_type unit
-
# @return [Integer]
-
#
-
# @!attribute increment_type
-
# => the unit to apply to increment_rate
-
# @return [String] enumeration of 'minute', 'hour', 'day', 'weekday', 'weekend', 'month', 'year'
-
#
-
# @!attribute min_increments
-
# the minimum increments any billing requires (ie, minimum 1 hr)
-
# @return [Integer]
-
#
-
# @!attribute overtime_rate
-
# rate to apply when time has gone over the overtime_threshold
-
# @return [Integer]
-
#
-
# @!attribute overtime_threshold
-
# after this number of hours, the overtime_rate then applies
-
# @return [Integer]
-
#
-
# ==== Class Relationships
-
#
-
# @!attribute pricing_rate_schedule
-
# @return [pricingRateSchedule]
-
#
-
1
class PricingRate < ActiveRecord::Base
-
-
1
attr_accessible :title, :effective_date, :end_date, :start_time, :end_time, :day_of_week, :hourly_rate, :min_billing_amount, :overtime_rate, :overtime_threshold
-
-
1
belongs_to :interpreter
-
-
1
enum_attr :day_of_week, %w( monday tuesday wednesday thursday friday saturday sunday )
-
-
1
belongs_to :pricing_plan, :class_name => 'PricingPlan'
-
-
-
end
-
# ==== Class Attributes
-
#
-
# @!attribute [r] id
-
# @return [Integer] unique database id of this address
-
#
-
# @!attribute [r] created_at
-
# @return [Date] when availability was created
-
#
-
# @!attribute [r] updated_at
-
# @return [Date] when availability was update
-
#
-
# @!attribute billing_rate_schedule_id
-
# @return [Integer]
-
#
-
# @!attribute skill
-
# @return [String]
-
#
-
# @!attribute increment_rate
-
# @return [Integer]
-
#
-
# @!attribute increment_type
-
# @return [String] enumeration of 'minute', 'hour', 'day', 'weekday', 'weekend', 'month', 'year'
-
#
-
# @!attribute min_increments
-
# @return [Integer]
-
#
-
# ==== Class Relationships
-
#
-
# @!attribute billing_rate_schedule
-
# @return [BillingRateSchedule]
-
#
-
1
class PricingRatePremium < ActiveRecord::Base
-
-
1
attr_accessible :effective_date, :end_date, :skill, :min_increments, :additional_amount
-
-
1
belongs_to :pricing_plan, :class_name => 'PricingPlan'
-
-
1
enum_attr :skill, %w(legal medical music theatrical meeting blind_deaf limited_proficiency)
-
-
end
-
# ==== Class Attributes
-
#
-
# @!attribute [r] id
-
# @return [Integer] unique database id of this address
-
#
-
# @!attribute [r] created_at
-
# @return [Date] when this address was made
-
#
-
# @!attribute [r] updated_at
-
# @return [Date] last time address was updated
-
#
-
# @!attribute notification
-
# @return [String]
-
#
-
# @!attribute reminder_type
-
# @return [String]
-
#
-
# @!attribute job_assignment_id
-
# @return [Integer]
-
#
-
# @!attribute person_id
-
# @return [Integer]
-
#
-
# ==== Class Relationships
-
#
-
# @!attribute person
-
# @return [Person]
-
#
-
# @!attribute job_assignment
-
# @return [JobAssignment]
-
#
-
# @!attribute reminder_times
-
# @return [Array<ReminderTime>]
-
#
-
1
class Reminder < ActiveRecord::Base
-
1
attr_accessible :notification, :reminder_type, :reminder_times, :job_assignment, :person
-
-
1
has_many :reminder_times
-
1
belongs_to :job_assignment
-
1
belongs_to :person
-
-
end
-
# ==== Class Attributes
-
#
-
# @!attribute [r] id
-
# @return [Integer] unique database id of this address
-
#
-
# @!attribute [r] created_at
-
# @return [Date] when this address was made
-
#
-
# @!attribute [r] updated_at
-
# @return [Date] last time address was updated
-
#
-
# @!attribute acknowledged_time
-
# @return [Date]
-
#
-
# @!attribute alert_time
-
# @return [Date]
-
#
-
# @!attribute sent_time
-
# @return [Date]
-
#
-
# @!attribute reminder_id
-
# @return [Integer]
-
#
-
# ==== Class Relationships
-
#
-
# @!attribute reminder
-
# @return [Reminder]
-
#
-
# @!attribute virtual_address
-
# @return [VirtualAddress]
-
#
-
1
class ReminderTime < ActiveRecord::Base
-
1
attr_accessible :acknowledged_time, :alert_time, :sent_time, :virtual_address, :reminder
-
-
1
belongs_to :reminder
-
1
has_one :virtual_address, :class_name => "VirtualAddress", :as => :virtual_addressable
-
end
-
1
class Role < ActiveRecord::Base
-
1
has_and_belongs_to_many :users, :join_table => :users_roles
-
1
belongs_to :resource, :polymorphic => true
-
-
1
scopify
-
end
-
1
class SimpleAvailability
-
-
# Invalid Day Exception
-
1
class InvalidDay < ::Exception; end
-
-
# Invalid Time Exception
-
1
class InvalidTime < ::Exception; end
-
-
# Structure to hold a start and an end time
-
1
TimeBlock = Struct.new(:start_time, :end_time) do
-
1
def is_during?(time)
-
time >= start_time && time < end_time
-
end
-
-
1
def duration
-
end_time - start_time
-
end
-
-
1
def overlaps?(block)
-
!( block.start_time >= end_time || block.end_time <= start_time )
-
end
-
end
-
-
# Days of the week, this constant is very important, the order determines
-
# the beginning of the week and it also describes what each day is
-
1
DAYS = [ :monday, :tuesday, :wednesday, :thursday, :friday, :saturday, :sunday ]
-
-
# Earliest timestamp aloud for keeping track of time
-
1
MINIMUM_SECONDS = 0
-
-
# Latest timestamp aloud for keeping track of time
-
1
MAXIMUM_SECONDS = 86399
-
-
1
attr_accessor :start_time, :end_time, :start_day, :end_day
-
-
1
def initialize(attributes={})
-
self.start_day = attributes.fetch(:start_day,default_start_day)
-
self.end_day = attributes.fetch(:end_day,default_end_day)
-
self.start_time = attributes.fetch(:start_time,default_start_time)
-
self.end_time = attributes.fetch(:end_time,default_end_time)
-
yield self if block_given?
-
end
-
-
1
def to_pricing_block_periods
-
create_records_for PricingBlockPeriod
-
end
-
-
1
def to_pricing_rates
-
create_records_for PricingRate
-
end
-
-
1
def overlaps_with?(availability)
-
if availability.days.any? { |day| self.days.include?(day) }
-
times = availability.time_blocks
-
time_blocks.any? { |block| times.any?{ |time| block.overlaps?(time) } }
-
else
-
false
-
end
-
end
-
-
1
def days
-
if spans_end_of_week?
-
DAYS.select { |day| DAYS.index(day) >= DAYS.index(start_day) || DAYS.index(day) <= DAYS.index(end_day) }
-
else
-
DAYS.select { |day| DAYS.index(day) >= DAYS.index(start_day) && DAYS.index(day) <= DAYS.index(end_day) }
-
end
-
end
-
-
# Give the availability an inverse time on the same days
-
1
def inverse_time!
-
tmp = @start_time
-
@start_time = @end_time
-
@end_time = tmp
-
self
-
end
-
-
1
def valid_day?(day)
-
day.respond_to?(:to_sym) && DAYS.include?(day.to_sym)
-
end
-
-
1
def start_day=(day)
-
raise InvalidDay unless valid_day? day
-
@start_day = day.to_sym
-
end
-
-
1
def end_day=(day)
-
raise InvalidDay unless valid_day? day
-
@end_day = day.to_sym
-
end
-
-
1
def time_blocks
-
blocks = []
-
if spans_midnight?
-
blocks << TimeBlock.new(make_time(MINIMUM_SECONDS),start_time)
-
blocks << TimeBlock.new(end_time,make_time(MAXIMUM_SECONDS))
-
else
-
blocks << TimeBlock.new(start_time,end_time)
-
end
-
blocks
-
end
-
-
1
def start_time=(time)
-
formatted = convert_to_time(time)
-
raise InvalidTime unless formatted
-
@start_time = formatted
-
end
-
-
1
def end_time=(time)
-
formatted = convert_to_time(time)
-
raise InvalidTime unless formatted
-
@end_time = formatted
-
end
-
-
1
def single_day?
-
start_day == end_day
-
end
-
-
1
def multiple_days?
-
start_day != end_day
-
end
-
-
1
def spans_midnight?
-
start_time > end_time
-
end
-
-
1
def spans_end_of_week?
-
DAYS.index(start_day) > DAYS.index(end_day)
-
end
-
-
1
protected
-
-
1
def default_start_day
-
DAYS.first
-
end
-
-
1
def default_end_day
-
DAYS.last
-
end
-
-
1
def default_start_time
-
make_time(MINIMUM_SECONDS)
-
end
-
-
1
def default_end_time
-
make_time(MAXIMUM_SECONDS)
-
end
-
-
# Returns a simple hash of keys that can be used to initialize
-
# both a PricingBlockPeriod or PricingRate class
-
1
def compatability_hash(day,time_block)
-
{ :day_of_week => day, :start_time => time_block.start_time, :end_time => time_block.end_time }
-
end
-
-
1
private
-
-
1
def create_records_for(klass)
-
items = []
-
blocks = time_blocks
-
days.each do |day|
-
blocks.each { |block| items << klass.new( compatability_hash(day,block) ) }
-
end
-
items
-
end
-
-
# Attempts to try and convert seconds to a point in a day or
-
# a Time object to a normalized time, all times are set to UTC
-
# and set at the start of EPOC
-
1
def convert_to_time(obj)
-
case
-
when obj.respond_to?(:seconds)
-
obj.seconds >= MINIMUM_SECONDS && obj.seconds <= MAXIMUM_SECONDS ? make_time( obj.seconds ) : nil
-
when obj.instance_of?(Time)
-
make_time( obj.hour.hours + obj.min.minutes + obj.sec.seconds )
-
else
-
nil
-
end
-
end
-
-
# Creates a time object from a timestamp of seconds and sets
-
# it to UTC time
-
1
def make_time(seconds)
-
Time.at( seconds ).utc
-
end
-
-
end
-
1
class Skill < ActiveRecord::Base
-
1
attr_accessible :skill_type, :where, :experience
-
-
1
belongs_to :interpreter
-
-
1
enum_attr :skill_type, %w(legal medical music theatrical meeting blind_deaf limited_proficiency)
-
end
-
# ==== Class Attributes
-
#
-
# @!attribute [r] id
-
# @return [Integer] unique database id of this address
-
#
-
# @!attribute [r] created_at
-
# @return [Date] when this address was made
-
#
-
# @!attribute [r] updated_at
-
# @return [Date] last time address was updated
-
#
-
# @!attribute name
-
# @return [String]
-
#
-
# @!attribute email
-
# @return [String]
-
#
-
# @!attribute [w] password
-
# @return [String]
-
#
-
# @!attribute [w] password_confirmation
-
# @return [String]
-
#
-
# @!attribute user_type
-
# @return [Symbol] either :interpreter or :other
-
#
-
1
class User < ActiveRecord::Base
-
1
rolify
-
# Include default devise modules. Others available are:
-
# :token_authenticatable, :confirmable,
-
# :lockable, :timeoutable and :omniauthable
-
1
devise :database_authenticatable, :registerable,
-
:recoverable, :rememberable, :trackable, :validatable
-
-
# Setup accessible (or protected) attributes for your model
-
1
attr_accessible :email, :password, :password_confirmation, :remember_me, :user_type
-
-
1
enum_attr :user_type, %w( ^other interpreter )
-
-
1
has_one :person
-
-
1
def name
-
return self.person.last_first unless self.person.nil?
-
return self.email
-
end
-
-
end
-
# ==== Class Attributes
-
#
-
# @!attribute [r] id
-
# @return [Integer] unique database id of this address
-
#
-
# @!attribute [r] created_at
-
# @return [Date] when this address was made
-
#
-
# @!attribute [r] updated_at
-
# @return [Date] last time address was updated
-
#
-
# @!attribute contact_label
-
# @return [String]
-
#
-
# @!attribute contact_type
-
# @return [String] enumeration of types :voice, :email, :im, :text
-
#
-
# @!attribute contact_value
-
# @return [String]
-
#
-
# ==== Class Relationships
-
#
-
# @!attribute virtual_addressable
-
# @return [Person, Client, JobRequest, ReminderTime]
-
1
class VirtualAddress < ActiveRecord::Base
-
-
1
attr_accessible :contact_label, :contact_type, :contact_value
-
-
1
belongs_to :virtual_addressable, :polymorphic => true
-
-
1
enum_attr :contact_type, %w( voice email im text pager )
-
-
-
end
-
# encoding: utf-8
-
1
require 'carrierwave/processing/mime_types'
-
-
1
class AttachmentUploader < CarrierWave::Uploader::Base
-
1
include CarrierWave::MimeTypes
-
# Include RMagick or MiniMagick support:
-
# include CarrierWave::RMagick
-
# include CarrierWave::MiniMagick
-
-
# Include the Sprockets helpers for Rails 3.1+ asset pipeline compatibility:
-
# include Sprockets::Helpers::RailsHelper
-
# include Sprockets::Helpers::IsolatedHelper
-
-
# Choose what kind of storage to use for this uploader:
-
1
storage :file
-
# storage :fog
-
# Override the directory where uploaded files will be stored.
-
# This is a sensible default for uploaders that are meant to be mounted:
-
1
def store_dir
-
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
-
end
-
-
1
process :set_content_type
-
# Provide a default URL as a default if there hasn't been a file uploaded:
-
# def default_url
-
# # For Rails 3.1+ asset pipeline compatibility:
-
# # asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
-
#
-
# "/images/fallback/" + [version_name, "default.png"].compact.join('_')
-
# end
-
-
# Process files as they are uploaded:
-
# process :scale => [200, 300]
-
#
-
# def scale(width, height)
-
# # do something
-
# end
-
-
# Create different versions of your uploaded files:
-
# version :thumb do
-
# process :scale => [50, 50]
-
# end
-
-
# Add a white list of extensions which are allowed to be uploaded.
-
# For images you might use something like this:
-
# def extension_white_list
-
# %w(jpg jpeg gif png)
-
# end
-
-
# Override the filename of the uploaded files:
-
# Avoid using model.id or version_name here, see uploader/store.rb for details.
-
# def filename
-
# "something.jpg" if original_filename
-
# end
-
-
end
-
# encoding: utf-8
-
-
1
class InsuranceProofUploader < CarrierWave::Uploader::Base
-
-
# Include RMagick or MiniMagick support:
-
# include CarrierWave::RMagick
-
# include CarrierWave::MiniMagick
-
-
# Include the Sprockets helpers for Rails 3.1+ asset pipeline compatibility:
-
# include Sprockets::Helpers::RailsHelper
-
# include Sprockets::Helpers::IsolatedHelper
-
-
# Choose what kind of storage to use for this uploader:
-
1
storage :file
-
# storage :fog
-
-
# Override the directory where uploaded files will be stored.
-
# This is a sensible default for uploaders that are meant to be mounted:
-
1
def store_dir
-
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
-
end
-
-
# Provide a default URL as a default if there hasn't been a file uploaded:
-
# def default_url
-
# # For Rails 3.1+ asset pipeline compatibility:
-
# # asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
-
#
-
# "/images/fallback/" + [version_name, "default.png"].compact.join('_')
-
# end
-
-
# Process files as they are uploaded:
-
# process :scale => [200, 300]
-
#
-
# def scale(width, height)
-
# # do something
-
# end
-
-
# Create different versions of your uploaded files:
-
# version :thumb do
-
# process :scale => [50, 50]
-
# end
-
-
# Add a white list of extensions which are allowed to be uploaded.
-
# For images you might use something like this:
-
# def extension_white_list
-
# %w(jpg jpeg gif png)
-
# end
-
-
# Override the filename of the uploaded files:
-
# Avoid using model.id or version_name here, see uploader/store.rb for details.
-
# def filename
-
# "something.jpg" if original_filename
-
# end
-
-
end


We build Real Time Enterprise apps with clients on Desktop, in Browser, on iOS, Android, WP.
We use Trift, WebSockets, Message Queues, REST APIs and Enterprise in .NET and Java, Azure Web Services, Azure Mobile Services, Amazon Mobile Services.
We use Patterns, Principles, Enteprise Patterns, Resource Oritented Style, Service Oritented Style, ESB, Orchestration, Event Sourcing, CQRS, DDD, SOLID, OOP, OOD, TDD, BDD, Kanban, Lean
We support Win and Linux Server Side, Mobile Clients (native iOS and Android), AWS, Azure, RackSpace, DigitalOcean, Parse, Arduino, Netduino, Rabsberry Pi
We work with .NET, .NET Core, C#, REST, SOAP, WS*, WCF, WIF, (TCP, UDP, HTTP), Spring Boot Framework, Python/Django/Flask/FastAPI, JavaScript, Objective-C, Swift, Java, Kotlin


Number of files in directory: {{ count_number_of_files(data_dir + 'EAGE2018/Well-' + well + '_finished/') }}
Number of LAS files in directory: {{ count_number_of_particular_files(data_dir + 'EAGE2018/Well-' + well + '_finished/', 'las') }}
Number of PDF files in directory: {{ count_number_of_particular_files(data_dir + 'EAGE2018/Well-' + well + '_finished/', 'pdf') }}
Number of TXT files in directory: {{ count_number_of_particular_files(data_dir + 'EAGE2018/Well-' + well + '_finished/', 'txt') }}


| DOSE: |
20 mg |
oral |
2C-B |
(powder / crystals) |
SETTING
-------
It was a friday evening. Everyone had left leaving the entire house in my hands. However I only expected that the bedroom would be used given that my darling 'A' would be attending this evening with me. It was cold but fresh outside, the crisp winter air was chilling yet invigorating. The experience was to be shared by my partner and I. We had left the entire evening open to the experience. It was to be 'A's' first ever experience of any such type and I felt that 2CB was a great introduction. This was my third experience with 2CB.
SET
---
The week prior to the experience was quite relaxed. Midweek saw me finish off my exams and thus I felt a need not only to reward myself for the hard work, but take a step forward in my life and my new relationship. I was feeling great. Ready to complete a cycle that had been hanging around the last few months. That evening, I was nervous but happy to be as such.
EXPERIENCE
----------
7:30 pm - Time of ingestion. Nervous jitters but a clear sense that everything would be ok. It was our evening.
ME = 20mg
A = 15mg
+0:20 - Feeling a touch of something. Alert always comes to me as a 'is that just me or...'. Time is spent playing around and anticipating.
+0:45 - Definite push. Euphoria building. 2CB does definitely have distinct euphoria and clarity that it provides. I usually feel a certain sense of peace, followed quickly by a muddle and mix of confusion and ideas. Very similar to 2ct7 in this case. A is feeling little, she unsure whether what she is feeling is just her or the substance. I am easily at a +2.
+1:00 - Full body intoxication, I am losing a bit of coordination. Definite +3. This is the most intense phenethylamine experience I have had thus far. A shower is had. Perfect. Body sense is amazing. Definitely building still. I feel each of my muscles and easily detect tension and discomfort. Euphoria is shifting a bit between new emotions, complex, entertaining. Making my way into the psychedelic headspace. There is insight, but nothing profound at this point.
+2:00 - Full development in the complex sensual experience. This is all new to me, I realise just how little A and I know about each other and that for the past few weeks there has been a blind following of love that has brought us together. I am happy to know that there is still so much between us that can grow. A definite connection is made. Passionate, ecstatic and moving. A wonderul experience... No words can describe it. The point at which each of us begins or ends is undefined.
+3:00 - Slowly levelling out. Still at a +3. The visual experience is quit interesting, colorful neon imagery so common of phenethylamines is present. I am building a theory in the visual experience as I gain my knowledge about it. Still much more research to be done. ;) 'A' said she doesn't feel too much, a picture she was looking at slowly shifted and morphed. Whereas for me the entire room morphed and melted.
+4:00 - The physical and mental experience is slowly dropping. There is a jittery and tense feeing present, my memory has been shaken dramatically and the physical properties are still there, with mild uncoordination. 'A' and I are presented with a test of wits and sanity when 'C', my ex makes an unexpected presense in the experience through a voice message on my mobile. After this test, the cycle of which I spoke of in setting has come to a close. A new step in my life is taken... We take a walk in the fresh winter outdoors. I feel the cold like never before, in my bones. It is amazing.
+6:00 - Easy and relaxed drop off, finish off with some lovely liquer. Watch movies and take a breath after the intensity of the last four hours.
+8:00 - After cuddles with 'A' we drift off into a lovely deeply relaxing sleep with the knowledge that the full impact of the experience would take another few days to make sense and sink in.
+ ---- Initially the next few days were lovely, but 5 days later a tension and anxiety developed that was only released when a milestone at work was delivered. Afterwhich a deep sense of relief has taken over since and I am still relaxed... Is there a connection? Two weeks after the exprience it is still fresh in my mind. I am still integrating the experience.
CONCLUSION
----------
An important note to conclude on is the feeling that 2CB was a wonderful introductory psychedelic. It leaves the ego intact with few side effects such as anxiety. There is a wonderul body push, plus room for insight.
For me there were no insights. But a feeling of completion. That certain dreams of mine had come to play that night. I had finally explored the sensual delights I had hoped to. As always there is a feeling that more could be done. However I am hard pressed to find what else could have improved the evening. Not much at all.
The heart and soul were open and we became lost in each others arms, learning, exploring and laughing. It was an experience of discovery that should be shared by every couple. I am grateful for partaking in it and learning its lessons.
I really don't understand why this drug is illegal and has no theraputic value. Its usefullness in the right hands can be truly amazing. I suggest developing education into the correct and responsible use of these substances. They are truly a gift to us as humans and should be treated with gratitude and respect.
Thankyou to everything and everyone involved. :)
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


This document explains how to get started with Lean and mathlib.
If you get stuck, please come to the chat room to ask for assistance.
There is a video walkthrough of these instructions on YouTube.
We'll need to set up Lean, an editor that knows about Lean, and mathlib
(the standard library).
Rather than installing Lean directly, we'll install a small program called elan
which
automatically provides the correct version of Lean on a per-project basis. This is recommended for
all users.
elan
#We'll need a terminal, along with some basic prerequisites.
We recommend that you use git bash
and not msys2
, since installing the supporting tools (below) causes issues in msys2
.
Install Git for Windows (you can accept all default answers during installation).
Then open a terminal by typing git bash
in the Windows search bar.
In terminal, run the command
curl https://raw.githubusercontent.com/Kha/elan/master/elan-init.sh -sSf | sh
and hit enter when a question is asked.
To make sure the terminal will find the installed files, run echo 'PATH="$HOME/.elan/bin:$PATH"' >> $HOME/.profile
.
Then close and reopen Git Bash.
In order to use mathlib supporting tools, you need to get python first.
python-3.x.x.exe
)Add Python 3.x to PATH
.git bash
in the Start Menu)which python
/c/Users/<user>/AppData/Local/Programs/Python/Pythonxx-xx/python
. In this case, proceed to the next step./c/Users/<user>/AppData/Local/Microsoft/WindowsApps/python
, then
Add Python 3.x to PATH
during the installation?
manage app execution aliases
into the Windows search prompt (start menu) and open the corresponding System Settings page.App Installer python.exe
and App Installer python3.exe
. Ensure that both of these are set to Off
.command not found
, you should add the Python directory to your path. Google how to do this, or ask on Zulip.cp "$(which python)" "$(which python)"3
. This ensures that we can use the command python3
to call Python.python3 --version
and pip3 --version
. If both commands give a short output and no error, everything is set up correctly.
pip3 --version
doesn't give any output, run the command python3 -m pip install --upgrade pip
, which should fix it.git config --global core.autocrlf input
in Git Bash
false
. If it is set to true
, you might run into issues when running leanproject
.Then, at a terminal, run the command
pip3 install mathlibtools
There are two Lean-aware editors, VS Code and emacs. This document describes using VS Code (for emacs, look at https://github.com/leanprover/lean-mode).
leanprover
.git bash
, press ctrl-shift-p
to open the command palette, and type
Select Default Shell
, then select git bash
from the menu.msys2
, press ctrl-comma
again to open the settings, and add two settings:"terminal.integrated.shell.windows": "C:\\msys64\\usr\\bin\\bash.exe",
"terminal.integrated.shellArgs.windows": ["--login", "-i"]
test.lean
and entering #eval 1+1
.
A green line should appear underneath #eval 1+1
, and hovering the mouse over it you should see 2
displayed.You can now read instructions about creating and working on Lean projects


WELCOME TO
B
O
U
N
C
Y
-BALL
An upcoming classic arcade game, where users can throw the colored ball to the correlating color.
Download
Join Our Discord


test1
The past can hurt. But you can either run from it or learn from it
过去是痛楚的，但你要么逃避，要么从中成长
One meets his destiny on the road he takes to avoid it
往往在逃避命运的路上，却与之不期而遇
Rules are meant to be broken
规则就该被打破。
Years may wrinkle the skin, but to give up enthusiasm wrinkles the soul.
岁月流逝只令容颜苍老，激情不再却使心灵枯萎。
test2
只有不断地练习学到的知识，你才能真正掌握它。
Live every day to the fullest.
尽享每日。
Keep your eyes on the stars, and your feet on the ground.
志存高远，脚踏实地。
Always be up for an unexpected adventure.
随时准备开始一场意外冒险吧。
Life is full of disappointment. You can't dwell on things. You have to move on.
生活常不如意，别沉溺往事，要勇往直前。
I'm a free spirit. I can't be caged.
我的灵魂是自由的，不该被束缚。
Sometimes the heart sees what is invisible to the eye.
目不见者，心可感之
The simple things are also the most extraordinary things, and only the wise can see them.
最平凡的事也是最非凡的事，只有智者才明白。
test3
how many xxxxxx
how many xxxxxx
how many xxxxxx
how many xxxxxx
how many xxxxxx
how many xxxxxx
how many xxxxxx
how many xxxxxx
how many xxxxxx
how many xxxxxx
how many xxxxxx
how many xxxxxx
how many xxxxxx
how many xxxxxx
how many xxxxxx
how many xxxxxx
test4
how many xxxxxx
how many xxxxxx
how many xxxxxx
how many xxxxxx
how many xxxxxx
how many xxxxxx
how many xxxxxx
how many xxxxxx
how many xxxxxx
how many xxxxxx
how many xxxxxx
how many xxxxxx
how many xxxxxx
how many xxxxxx
how many xxxxxx
how many xxxxxx


three things I have learnt about my self
first I listen in conversations, I listen a lot and well its strange.
Second I have a lot of characteristic of a dog not all of the traits are bad.
Third the more you look inward the more there is to understand.
The role of values empathy and self awareness in learning and programming.
Empathy and values are an important part of programming as being a part of a team or working with others is a big part of programming,
even if its just by yourself you can use them when dealing with others in order to solve problems. While self awareness can help in programming
it is very important in learning as being self aware can help understand why some things are hard to learn, when the best time for you to study
or even increase productivity.
What surprised me about the core learning.
The thing that most surprised me is that some of the things I did in my personal; life to understand others had names emotional inelegance
understanding the emotions of others is not just empathy.
Challenging aspects of core learning.
The most challenging part of learning the core skills is overcoming the bias against some of them and thinking they aren't worth learning.
However after looking in to them I found some ideas quite useful.
Why does EDA spend time on core skills.
I think EDA spends so much time on the core shills because they
Does the time spent studying core skills feel like a waste of time.
Well yes and no, its complicated. Some of the things that were studied were less than useful while others were very useful. for instance the
mindfulness things while useful didn't help me with anything and felt like people trying to push something on me but that's most likely because I
encountered prior and it was just some people trying to push something. While the things on emotional awareness and emotional intelligence was very
useful in understanding some of the things I do and helped in my understandings of others.
My long term goal.
I'm not too sure just of yet, but right one my longest term goal is to become a programmer and then to think more on it after I have started.
My biggest strengths and limitations.
I feel my biggest strengths is the facts that I am both smart and highly independent leading me to be able learn quickly and stand on my own.
However being both smart and independent leads me to get stuck on strange problems and finding it very hard to ask for help when I encounter
these problems.
The biggest problem with the non-technical challenge.
My biggest non tech challenge during this boot camp will most likely be something to do with public speaking or presenting just because I get a
little nervous when talking to groups of people so I start to speed up my speech or forget some of the finer points I was meant to push across.
My Exceptions of me in boot camp.
I expect myself to seek help more from the people who are going through this with me seeing physical people. I find it easier to talk to people
face to face rather than indirectly over the internet.
Timetables, timetables and timetables, in order to manage my workload I will keep timetables to keeps me on track with work.


|
| void | ComSdoEventObjectReady (uint8_t ubNetV, uint8_t ubNodeIdV, CoObject_ts *ptsCoObjV, uint32_t *pulAbortV) |
| |
| void | ComSdoEventProgress (uint8_t ubNetV, uint8_t ubNodeIdV, uint16_t uwIndexV, uint8_t ubSubIndexV, uint32_t ulByteCntV) |
| |
| void | ComSdoEventTimeout (uint8_t ubNetV, uint8_t ubNodeIdV, uint16_t uwIndexV, uint8_t ubSubIndexV) |
| |
| ComStatus_tv | ComSdoGetAbortCode (uint8_t ubNetV, uint8_t ubSdoV, uint32_t *pulAbortV) |
| |
| uint8_t | ComSdoGetClient (uint8_t ubNetV) |
| |
| ComStatus_tv | ComSdoGetStatus (uint8_t ubNetV, uint8_t ubSdoV) |
| |
| ComStatus_tv | ComSdoReadObject (uint8_t ubNetV, uint8_t ubSdoV, uint8_t ubNodeIdV, CoObject_ts *ptsCoObjV, uint32_t *pulObjCntV) |
| |
| ComStatus_tv | ComSdoSetTimeout (uint8_t ubNetV, uint8_t ubSdoV, uint16_t uwTimeV) |
| |
| ComStatus_tv | ComSdoWriteObject (uint8_t ubNetV, uint8_t ubSdoV, uint8_t ubNodeIdV, CoObject_ts *ptsCoObjV, uint32_t *pulObjCntV) |
| |
With Service Data Objects (SDOs) the access to entries of a device Object Dictionary is provided. As these entries may contain data of arbitrary size and data type SDOs can be used to transfer multiple data sets (each containing an arbitrary large block of data) from a client to a server and vice versa. The client can control via a multiplexor (index and sub-index of the Object Dictionary) which data set is to be transferred. The contents of the data set are defined within the Object Dictionary.
The communication timeout between SDO client request and SDO server response is device/application specific. The initial SDO communication timeout for the client is set to 50 milliseconds. The connection timeout value can be change with the ComSdoSetTimeout() function.
◆ ComSdoEventObjectReady()
| void ComSdoEventObjectReady |
( |
uint8_t |
ubNetV, |
|
|
uint8_t |
ubNodeIdV, |
|
|
CoObject_ts * |
ptsCoObjV, |
|
|
uint32_t * |
pulAbortV |
|
) |
| |
- Parameters
-
| [in] | ubNetV | - CANopen Network channel |
| [in] | ubNodeIdV | - Node-ID value |
| [in,out] | ptsCoObjV | - Pointer to object structure |
| [out] | pulAbortV | - Pointer to SDO abort code |
This handler is called after the SDO data transfer has finished. If the SDO transfer has been initiated by ComSdoReadObject() or ComSdoWriteObject() the parameter ptsCoObjV points to the last object which has been read or written. Otherwise the pointer ptsCoObjV is 0L. The user defined marker within the structure CoObject_ts can be used to track SDO operations.
In case of a SDO abort, the pointer pulAbortV allows to read the last abort code. The value of pulAbortV is 0L when no SDO error occurred.
◆ ComSdoEventProgress()
| void ComSdoEventProgress |
( |
uint8_t |
ubNetV, |
|
|
uint8_t |
ubNodeIdV, |
|
|
uint16_t |
uwIndexV, |
|
|
uint8_t |
ubSubIndexV, |
|
|
uint32_t |
ulByteCntV |
|
) |
| |
- Parameters
-
| [in] | ubNetV | - CANopen Network channel |
| [in] | ubNodeIdV | - Node-ID value |
| [in] | uwIndexV | - Object index value |
| [in] | ubSubIndexV | - Object sub-index value |
| [in] | ulByteCntV | - Byte counter value |
This handler is called during a SDO block download or upload. The parameters uwIndexV and ubSubIndexV define the object which is accessed. The value ulByteCntV denotes the number of bytes that have been transmitted.
◆ ComSdoEventTimeout()
| void ComSdoEventTimeout |
( |
uint8_t |
ubNetV, |
|
|
uint8_t |
ubNodeIdV, |
|
|
uint16_t |
uwIndexV, |
|
|
uint8_t |
ubSubIndexV |
|
) |
| |
- Parameters
-
| [in] | ubNetV | - CANopen Network channel |
| [in] | ubNodeIdV | - Node-ID value |
| [in] | uwIndexV | - Object index value |
| [in] | ubSubIndexV | - Object sub-index value |
- See also
- ComSdoSetTimeout()
This handler is called if a SDO response time-out condition occurred. The parameters uwIndexV and ubSubIndexV define the object that was accessed. The SDO communication timeout can be configured by the ComSdoSetTimeout() function.
◆ ComSdoGetAbortCode()
| ComStatus_tv ComSdoGetAbortCode |
( |
uint8_t |
ubNetV, |
|
|
uint8_t |
ubSdoV, |
|
|
uint32_t * |
pulAbortV |
|
) |
| |
- Parameters
-
| [in] | ubNetV | - CANopen Network channel |
| [in] | ubSdoV | - SDO client index |
| [out] | pulAbortV | - Pointer to variable for abort code |
- Returns
- ComSdoStat_e value on success, negative ComErr_e value on failure
This function returns the last SDO abort code, if any occurred. The SDO client connection is selected by the index ubSdoV
. A negative return value indicates an error. The error values are taken from the ComErr_e enumeration. The return value eCOM_ERR_NONE indicates that there was a SDO abort on the selected SDO client, which is copied to the variable pointed by pulAbortV
.
Positive return values indicate the status of a SDO client in use.
◆ ComSdoGetClient()
| uint8_t ComSdoGetClient |
( |
uint8_t |
ubNetV | ) |
|
Get available SDO client index.
- Parameters
-
| [in] | ubNetV | - CANopen Network channel |
- Returns
- SDO client index
This function returns the index of an available SDO client. If no SDO client is free, the function will return the value COM_SDO_CLIENT_MAX. The first SDO client starts at index 0.
◆ ComSdoGetStatus()
| ComStatus_tv ComSdoGetStatus |
( |
uint8_t |
ubNetV, |
|
|
uint8_t |
ubSdoV |
|
) |
| |
- Parameters
-
| [in] | ubNetV | - CANopen Network channel |
| [in] | ubSdoV | - SDO client index |
- Returns
- ComSdoStat_e value on success, negative ComErr_e value on failure
This function returns the status of a SDO transmission for the SDO client connection given by its index ubSdoV
. A negative return value indicates an error. The error values are taken from the ComErr_e enumeration. The return value eCOM_SDO_STAT_EMPTY indicates that the SDO client is available for a read/write operation. Positive return values (see ComSdoStat_e) indicate the status of a SDO client in use.
◆ ComSdoReadObject()
| ComStatus_tv ComSdoReadObject |
( |
uint8_t |
ubNetV, |
|
|
uint8_t |
ubSdoV, |
|
|
uint8_t |
ubNodeIdV, |
|
|
CoObject_ts * |
ptsCoObjV, |
|
|
uint32_t * |
pulObjCntV |
|
) |
| |
Read object from CANopen device.
- Parameters
-
| [in] | ubNetV | - CANopen Network channel |
| [in] | ubSdoV | - SDO client index |
| [in] | ubNodeIdV | - Node-ID value |
| ptsCoObjV | - Pointer to CANopen object entry |
| pulObjCntV | - Pointer to variable for object count |
- Returns
- Value of enumeration ComErr_e
- See also
- ComSdoWriteObject()
This function will start the read request for an object that is defined by the structure CoObject_ts.
◆ ComSdoSetTimeout()
| ComStatus_tv ComSdoSetTimeout |
( |
uint8_t |
ubNetV, |
|
|
uint8_t |
ubSdoV, |
|
|
uint16_t |
uwTimeV |
|
) |
| |
Set communication timeout.
- Parameters
-
| [in] | ubNetV | - CANopen Network channel |
| [in] | ubSdoV | - SDO client index |
| [in] | uwTimeV | - timeout value in milliseconds |
- Returns
- Value of enumeration ComErr_e
This function sets a timeout value for a SDO communication. If the response to a SDO request by the master takes longer than this timeout value, the state of the communication will be changed to eCOM_SDO_STAT_TIMEOUT. The state of the SDO communication can be evaluated by calling ComSdoGetStatus(). Please note that the timeout value is passed in multiples of 1 millisecond. The timeout value supplied to this function will be rounded towards the next lower value if necessary (depends on timer granularity).
◆ ComSdoWriteObject()
| ComStatus_tv ComSdoWriteObject |
( |
uint8_t |
ubNetV, |
|
|
uint8_t |
ubSdoV, |
|
|
uint8_t |
ubNodeIdV, |
|
|
CoObject_ts * |
ptsCoObjV, |
|
|
uint32_t * |
pulObjCntV |
|
) |
| |
Write object to CANopen device.
- Parameters
-
| [in] | ubNetV | - CANopen Network channel |
| [in] | ubSdoV | - SDO client index |
| [in] | ubNodeIdV | - Node-ID value |
| [in] | ptsCoObjV | - Pointer to CANopen object entry |
| [in,out] | pulObjCntV | - Pointer to variable for object count |
- Returns
- Value of enumeration ComErr_e
- See also
- ComSdoReadObject()
This function will start the write request for an object that is defined by the structure CoObject_ts.


We're sorry, but registration for this session ended at =$signupEndFormat?>.
If you need additional help with your registration, please contact us.


Background¶
This package implements a modified version of the ε-PAL algorithm from Zuluaga et al. in an object-oriented design. The algorithm effeciently searches for the Pareto efficient points in an unbiased manner for any number of dimensions. This package can be used with any regression model that can output means and standard deviations.
This implementation has the following features:
We ensure that the sampling is scale-invariant and that the algorithm can deal with positive and negative objective values.
Instead of using the predicted \(\hat{\mu}\) and \(\hat{\sigma}\) also for the sampled points we use the measured \(\mu\) and \(\sigma\).
This implementation is directly scalable to \(n\)-dimensional problems.
It can be easily used with any kind of regression model with uncertainty measures. For example, one can replace the Gaussian process model with a neural network with Dropout Monte Carlo for the uncertainty estimate.
The support for missing data is implemented. For example, if you measure for labeled data for only some of the objectives, you will simply need to provide np.nan for the missing measurements. The code will automatically estimate these measurements. If using coregionalized GPR models, the models will try to utilize the correlations between the objectives to improve these predictions.
In our own work, we used this algorithm for materials discovery applications.
The intuition behind the algorithm¶
The PAL algorithm iterates through the following steps:
Training a machine learning model to predict means and standard deviations for all points of the design space. This can be used to construct uncertainty hyperrectangles.
Using these points, we can use the Pareto dominance relation to classify points as Pareto optimal or to discard them. In some cases, e.g., when uncertainty hyperrectangles overlap, we will not be able to perform a classification with confidence. This is different from many Bayesian optimization approaches that couples an acquisition function such as expected improvement, which introduces a total order in the design space and hence biases the search.
Since in step (b) we discard many points (with confidence) the effective design space shrinks. This enables us to sample the next experiment from the regions near the Pareto front with points labeled as Pareto optimal and “unclassified”. Since the ultimate goal is to perform a classification of the full design space—with confidence—we sample the point with the largest hyperrectangle.
Retraining a model with this new measurement will reduce the width of the hyperrectangles.
How do the hyperparameters influence the algorithm?¶
To test the influence of hyperparameter settings we provide an example where we ran one step of the algorithm on the Binh-Korn test function.
We model every objective seperately with a Matérn-3/2 kernel, leave \(\delta=0.05\) fixed and vary \(\epsilon\) and \(\beta_\mathrm{scale}\).
We find that increasing \(\epsilon\) speeds up the algorithm, but gives us a sparser Pareto frontier. Similarly, \(\beta_\mathrm{scale}\) speeds up the algorithm by scaling the size of the hyperrectangles.
As shown in the figure below, \(\beta\) depends on \(\delta\) and scaling beta down will drastically reduce the size of the uncertainty rectangles and in this way influence the convergence behavior.


ResCuE-HPC 2018 @ SC'18 is a half day workshop scheduled in the morning starting at 9:00 on November 11, 2018 (room 1).
Program is under preparation...


|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.json.zip.JSONzip
public abstract class JSONzip
JSONzip is a binary-encoded JSON dialect. It is designed to compress the messages in a session in bandwidth constrained applications, such as mobile. JSONzip is adaptive, so with each message seen, it should improve its compression. It minimizes JSON's overhead, reducing punctuation to a small number of bits. It uses Huffman encoding to reduce the average size of characters. It uses caches (or Keeps) to keep recently seen strings and values, so repetitive content (such as object keys) can be substantially reduced. It uses a character encoding called Kim (Keep it minimal) that is smaller than UTF-8 for most East European, African, and Asian scripts. JSONzip tends to reduce most content by about half. If there is a lot of recurring information, the reduction can be much more dramatic. FOR EVALUATION PURPOSES ONLY. THIS PACKAGE HAS NOT YET BEEN TESTED ADEQUATELY FOR PRODUCTION USE.
| Field Summary | |
|---|---|
static byte[] |
bcd
The characters in JSON numbers can be reduced to 4 bits each. |
static int |
end
The end of string code. |
static int |
endOfNumber
The end of number code. |
static long |
int14
The first positive integer that cannot be encoded in 14 bits. |
static long |
int4
The first positive integer that cannot be encoded in 4 bits. |
static long |
int7
The first positive integer that cannot be encoded in 7 bits. |
protected Huff |
namehuff
A Huffman encoder for names. |
protected Huff |
namehuffext
A Huffman encoder for names extended bytes. |
protected org.json.zip.Keep |
namekeep
A place to keep the names (keys). |
static boolean |
probe
The package supports tracing for debugging. |
protected Huff |
stringhuff
A Huffman encoder for string values. |
protected Huff |
stringhuffext
A Huffman encoder for string values extended bytes. |
protected org.json.zip.Keep |
stringkeep
A place to keep the strings. |
protected org.json.zip.Keep |
valuekeep
A place to keep the values. |
static int |
zipArrayString
The value code for an array with a string as its first element. |
static int |
zipArrayValue
The value code for an array with a non-string value as its first element. |
static int |
zipEmptyArray
The value code for an empty array. |
static int |
zipEmptyObject
The value code for an empty object. |
static int |
zipFalse
The value code for false. |
static int |
zipNull
The value code for null. |
static int |
zipObject
The value code for a non-empty object. |
static int |
zipTrue
The value code for true. |
| Fields inherited from interface org.json.zip.None |
|---|
none |
| Constructor Summary | |
|---|---|
protected |
JSONzip()
Initialize the data structures. |
| Method Summary | |
|---|---|
protected void |
generate()
Generate the Huffman tables. |
boolean |
postMortem(PostMortem pm)
This method is used for testing the implementation of JSONzip. |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
public static final byte[] bcd
public static final int end
public static final int endOfNumber
public static final long int4
public static final long int7
public static final long int14
public static final boolean probe
public static final int zipEmptyObject
public static final int zipEmptyArray
public static final int zipTrue
public static final int zipFalse
public static final int zipNull
public static final int zipObject
public static final int zipArrayString
public static final int zipArrayValue
protected final Huff namehuff
protected final Huff namehuffext
protected final org.json.zip.Keep namekeep
protected final Huff stringhuff
protected final Huff stringhuffext
protected final org.json.zip.Keep stringkeep
protected final org.json.zip.Keep valuekeep
| Constructor Detail |
|---|
protected JSONzip()
| Method Detail |
|---|
protected void generate()
public boolean postMortem(PostMortem pm)
postMortem
in interface PostMortem
pm
- Another object of the same type.
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


NFS Port 2049 open
NFS Enumeration
showmount -e hostname/ip_address
mount -t nfs ip_address:/directory_found_exported /local_mount_point
NFS Brute Force
Interact with NFS share and try to add/delete
Exploit and Confuse Unix
Examine Configuration Files
/etc/exports
/etc/lib/nfs/xtab
nmap nse script
nfs-showmount


Asteroids Clone
Canvas
- 960 x 540 px
- background: BLACK
Ship
- Triangle
- Movement
- Rotate
- Shoot
- Starts at current ship location
- Direction is current angle
- Destroyed on out of player area
- Controls:
- ArrowLeft: rotate left
- ArrowRight: rotate right
- ArrowUp: thrust forward
- ArrowDown: stop rotation
- Space: shoot
Asteroids
- Generate Shape
- Size
- Movement
- Constant speed at a randomly generated constant direction
- Floating out of the canvas - reenters on the opposite end
- Split when shot
- Pre-set number of sizes ( 3 - 5)
Enemy Flying Saucers
- Large
- shoots in a random direction
- Small


Tabs Widget parameters
Events
Options
active Type: Integer
Default:
0
Which panel is currently open.
- Integer: The zero-based index of the panel that is active (open). A negative value selects panels going backward from the last panel.
Initialize the tabs with the active
option specified:
|
1
|
|
disabledType: Integer or Array
Default:
false
Which tabs are disabled.
-
Array: An array containing the zero-based indexes of the tabs that should be disabled, e.g.,
[ 0, 2 ]
would disable the first and third tab.
Initialize the tabs with the disabled
option specified:
|
1
|
|
openEventType: String
Default:
"click"
The type of event that the tabs should react to in order to activate the tab. To activate on hover, use
Code examples:"mouseover"
.Initialize the tabs with the openEvent
option specified:
|
1
|
|
heightStyle (pending)Type: String
Default:
"content"
Controls the height of the tabs widget and each panel. Possible values:
Code examples:-
"auto"
: All panels will be set to the height of the tallest panel. -
"fill"
: Expand to the available height based on the tabs' parent height. -
"content"
: Each panel will be only as tall as its content.
Initialize the tabs with the heightStyle
option specified:
|
1
|
|


Yubin reveals she met Lee Hyori when they were both naked?
by germainejYubin revealed she met Lee Hyori when they were both naked.
On the November 12th episode of 'Choi Hwa Jung's Power Time', Yubin and Lee Jin Hyuk featured as guests and talked about their role-models in music. Lee Jin Hyuk revealed, "I met my role-model TVXQ's Yunho in the bathroom once. We were waiting for a music show to start, and I was so surprised when I ran into him. As soon as he saw me, he raised his hand and said hello. He then immediately left the bathroom. It was a short moment, but it left a deep memory in my brain."
Yubin then shared, "In the beginning days of my debut, I went to get beauty care done, and Lee Hyori was there. But it was strange to see who would talk to the other first because we were both naked. I told the attendant that I would like to greet her for sure, but in the end, I wasn't able to say hello. I was disappointed. Afterwards, we met at a music show, and she said that she heard I wasn't able to greet her. That's when I formally greeted her."
In other news, Yubin recently made a comeback with "Silent Movie".


Summarized concentrations of phenothiazines inhibiting RNA virus replication.
DENV-2 - Dengue virus serotype 2, MERS - Middle East respiratory syndrome, SFV - Semliki Forest virus, SINV - Sindbis virus, ZEBOV - GFP-expressing replication-competent EBOV Zaire.


How it works
- JS editor widget
- node.js server API endpoint
- Display output
OSS
- golden-layout
- monaco
- CodeMirror
- node.js / express
- underscore
- jquery
- bootstrap
- lru-cache
- ...
- gcc
- clang
- go
- gdc
- ldc
- rustc
- objdump
- nginx
- ...
Duct tape
- Server: 2,300 LoC
- Client: 3,700 LoC
Deployment
EC2 on AWS
But
- 40GB of compiler binaries
- Hours to build and upload images
Solution
Solution
- Compiler binaries on NFS mount
- Scripts to update and deploy locally
I've run out of time
- Building compilers
- Security
- Handling load
- "Zero" downtime


{% load static %} {% static "images" as baseUrl %}
If you already have account press login button
{{message}}
A lowercase letter
A capital (uppercase) letter
A number
Minimum 8 characters
By creating an account you agree to our Terms & Privacy.


Welcome to the Casbah Documentation. Casbah is a Scala toolkit for MongoDB—We use the term “toolkit” rather than “driver”, as Casbah integrates a layer on top of the official mongo-java-driver for better integration with Scala. This is as opposed to a native implementation of the MongoDB wire protocol, which the Java driver does exceptionally well. Rather than a complete rewrite, Casbah uses implicits, and Pimp My Library code to enhance the existing Java code.
Casbah’s approach is intended to add fluid, Scala-friendly syntax on top of MongoDB and handle conversions of common types. If you try to save a Scala List or Seq to MongoDB, we automatically convert it to a type the Java driver can serialize. If you read a Java type, we convert it to a comparable Scala type before it hits your code. All of this is intended to let you focus on writing the best possible Scala code using Scala idioms. A great deal of effort is put into providing you the functional and implicit conversion tools you’ve come to expect from Scala, with the power and flexibility of MongoDB.
Casbah provides improved interfaces to GridFS, Map/Reduce and the core Mongo APIs. It also provides a fluid query syntax which emulates an internal DSL and allows you to write code which looks like what you might write in the JS Shell. There is also support for easily adding new serialization/deserialization mechanisms for common data types (including Joda Time, if you so choose; with some caveats - See the GridFS Section).
With version 2.0, Casbah has become an official MongoDB project and will continue to improve the interaction of Scala + MongoDB. Casbah aims to remain fully compatible with the existing Java driver—it does not talk to MongoDB directly, preferring to wrap the Java code. This means you shouldn’t see any wildly unexpected behavior from the underlying Mongo interfaces when a data bug is fixed.
The ScalaDocs for Casbah along with SXR cross referenced source are available at the MongoDB API site.
You may also download this documentation in other formats.


.. about a Pickaxe
.. and slow things
.. and a presentation
In the early days of the great Dev and Ops wars when Docker was still in the shipyard and AWS had little competition.
Communication
With a Keyboard
.. at a distance
There once was a ticket system. It was as slow as a system could be. To "admin" a job would take 10 minutes, for an action that only took three..
!ticket flarnscorp "Widget 5421 has busted grommet" Slack message, grommet has ripped at weld joint
!time 4311 @today 10am until 10:15 "Dab some snodder at the joint, all good"
!ticket status 4311 completed
Software development to manage your Operations
Two great things merged together
New Buzzword for something we have been doing for ages.
A Chat Bot..
..provides an alternative User Interface for DevOps automation


Is there anything quite so cheery as a yellow tang? Stunningly colored, tangs are a delightful addition to your tank. Imagine the majesty of the Naso Tang in your tank. These delightfully colored fish are sure to bring a smile to your face.


Shep's Ice Cream has been at the same site for more than one hundred years. Located in the small town of Hefferton, Vermont, people all over New England come to Shep's Ice Cream Parlour. You must drop by and try our dream supreme ice cream.
Shep's Ice Cream is noted for making ice cream from very unusual flavors. Some of our new flavors inclue cheesecake banana mint and white chocolate brownie. Try all of our flavors with IST®, our Incredibly Scrumptious Toppings.
Shep's Ice Cream sundaes can be made to your specifications by topping them off with cherries, berries, shaved fudge, twice whipped cream, sprinkles or showers. Pick one topping or pick may. Make your sundae your own!
James Dunn1 says "This is certainly one of the finer Ice Cream Parlours in all of New England. I am always amazed at the freshness of the ingredients. Many people travel to Hefferton just to visit Shep's. It's definitely worth the trip."
1Food critic for the Lancaster Gazette


Home Ownership Across Ages
Student Loan Debt Over Time
Assett and Liability Flows Across Ages (Fake Data)