All Files (89.24% covered at 1.7 hits/line)
59 files in total.
697 relevant lines.
622 lines covered and
75 lines missed
- 1
module ApplicationCable
- 1
class Channel < ActionCable::Channel::Base
end
end
- 1
module ApplicationCable
- 1
class Connection < ActionCable::Connection::Base
end
end
- 1
class ApplicationController < ActionController::Base
- 1
protect_from_forgery with: :exception
- 1
before_action :configure_permitted_parameters, if: :devise_controller?
- 1
helper_method :mailbox, :conversation
- 1
def after_sign_in_path_for(resource)
- 15
profile_path(current_user) #your path
end
- 1
private
- 1
def mailbox
@mailbox ||= current_user.mailbox
end
- 1
def conversation
@conversation ||= mailbox.conversations.find(params[:id])
end
- 1
protected
- 1
def configure_permitted_parameters
- 32
devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :email, :password] )
- 32
devise_parameter_sanitizer.permit(:account_update, keys: [:name, :email, :password, :current_password] )
end
end
- 1
class BeersController < ApplicationController
- 1
before_action :authenticate_user!, only: [ :new, :create, :edit, :update, :destroy ]
- 1
before_action :require_permission, only: [ :edit, :destroy ]
- 1
def index
@beers = Beer.where(nil)
@recent_beers = Beer.first(4)
@styled_beers = Beer.style_id(params[:style_id]) if params[:style_id].present?
@hash = Gmaps4rails.build_markers(@beers) do |beer, marker|
marker.lat beer.user.profile.latitude
marker.lng beer.user.profile.longitude
end
end
- 1
def new
- 2
@user = User.find(params[:user_id])
- 2
@beer = @user.beers.new
- 2
@styles = Style.all
end
- 1
def create
- 2
@user = User.find(params[:user_id])
- 2
@beer = @user.beers.new(beer_params)
- 2
@styles = Style.all
- 2
if @beer.save
- 1
respond_to do |format|
- 1
format.html {redirect_to profile_path(@user)}
- 1
format.js
end
else
- 1
flash[:alert] = "Oops, something went wrong!"
- 1
redirect_to profile_path(@user)
end
end
- 1
def edit
@user = User.find(params[:user_id])
@beer = @user.beers.find(params[:id])
@styles = Style.all
end
- 1
def update
@user = User.find(params[:user_id])
@beer = @user.beers.find(params[:id])
@styles = Style.all
if @beer.update(beer_params)
flash[:notice] = "Beer successfully updated!"
redirect_to profile_path(@user)
else
flash[:alert] = "Oops, something went wrong!"
render :edit
end
end
- 1
def destroy
@user = User.find(params[:user_id])
@beer = @user.beers.find(params[:id])
@beer.destroy
redirect_to profile_path(@user)
end
- 1
private
- 1
def beer_params
- 2
params.require(:beer).permit(:name, :description, :abv, :container_type, :brew_date, :homebrew, :brewery_name, :user_id, :style_id)
end
- 1
def require_permission
if current_user != User.find(params[:user_id])
flash[:alert] = "Whoops! Only the beer's author can edit or delete a beer."
redirect_to profile_path(Profile.find(params[:profile_id]))
end
end
- 1
def filtering_params(params)
params.slice(:style_id)
end
end
- 1
class CommentsController < ApplicationController
- 1
before_action :authenticate_user!
- 1
before_action :require_permission, only: [ :edit, :destroy ]
- 1
def new
- 5
@post = Post.find(params[:post_id])
- 5
@comment = @post.comments.new
end
- 1
def create
- 5
@post = Post.find(params[:post_id])
- 5
@comment = @post.comments.new(comment_params)
- 5
@user =<EMAIL_ADDRESS>- 5
if @comment.save
- 4
flash[:notice] = "Thanks for your comment!"
- 4
respond_to do |format|
- 8
format.html {redirect_to post_path(@comment.post)}
- 4
format.js
end
else
- 1
flash[:alert] = "Oops, something went wrong!"
- 1
redirect_to<EMAIL_ADDRESS>end
end
- 1
def edit
- 2
@post = Post.find(params[:post_id])
- 2
@comment = @post.comments.find(params[:id])
end
- 1
def update
- 2
@post = Post.find(params[:post_id])
- 2
@comment = @post.comments.find(params[:id])
- 2
if @comment.update(comment_params)
- 1
flash[:notice] = "Comment successfully updated!"
- 1
redirect_to<EMAIL_ADDRESS>else
- 1
flash[:alert] = "Oops, something went wrong!"
- 1
render :edit
end
end
- 1
def destroy
- 1
@comment = Comment.find(params[:id])
- 1
@comment.destroy
- 1
redirect_to<EMAIL_ADDRESS>end
- 1
private
- 1
def comment_params
- 7
params.require(:comment).permit(:content, :post_id, :user_id)
end
- 1
def require_permission
- 3
if current_user != Comment.find(params[:id]).user
flash[:alert] = "Whoops! Only the comment's author can edit or delete a comment."
redirect_to post_path(Post.find(params[:post_id]))
end
end
end
- 1
class ConversationsController < ApplicationController
- 1
before_action :authenticate_user!
- 1
def new
@beer = Beer.find(params[:beer_id])
end
- 1
def create
recipients = User.where(id: conversation_params[:recipients])
conversation = current_user.send_message(recipients, conversation_params[:body], conversation_params[:subject]).conversation
flash[:success] = "Your message was successfully sent!"
redirect_to conversation_path(conversation)
end
- 1
def show
@beer = Beer.find_by(:name => conversation.subject)
@receipts = conversation.receipts_for(current_user).order(created_at: :asc)
# mark conversation as read
conversation.mark_as_read(current_user)
end
- 1
def reply
current_user.reply_to_conversation(conversation, message_params[:body])
flash[:notice] = "Your reply message was successfully sent!"
redirect_to conversation_path(conversation)
end
- 1
def trash
conversation.move_to_trash(current_user)
redirect_to mailbox_inbox_path
end
- 1
def untrash
conversation.untrash(current_user)
redirect_to mailbox_inbox_path
end
- 1
private
- 1
def conversation_params
params.require(:conversation).permit(:subject, :body, recipients:[])
end
- 1
def message_params
params.require(:message).permit(:body, :subject, recipients:[])
end
end
- 1
class MailboxController < ApplicationController
- 1
before_action :authenticate_user!
- 1
def inbox
@inbox = mailbox.inbox
@active = :inbox
end
- 1
def sent
@sent = mailbox.sentbox
@active = :sent
end
- 1
def trash
@trash = mailbox.trash
@active = :trash
end
end
- 1
class PostsController < ApplicationController
- 1
before_action :ensure_admin!, except: [ :index, :show ]
- 1
def index
- 28
@posts = Post.all
end
- 1
def show
- 16
@post = Post.find(params[:id])
- 16
@comments = Comment.all
end
- 1
def new
- 2
@post = Post.new
end
- 1
def create
- 2
@post = Post.new(post_params)
- 2
@post.category_id = params[:post][:category_id].to_i
- 2
if @post.save
- 1
flash[:notice] = "Post successfully created!"
- 1
redirect_to posts_path
else
- 1
flash[:alert] = "Oops, something went wrong!"
- 1
render :new
end
end
- 1
def edit
- 2
@post = Post.find(params[:id])
end
- 1
def update
- 2
@post = Post.find(params[:id])
- 2
if @post.update(post_params)
- 1
redirect_to post_path(@post)
else
- 1
render :edit
end
end
- 1
def destroy
- 1
@post = Post.find(params[:id])
- 1
@post.destroy
- 1
redirect_to posts_path
end
- 1
private
- 1
def post_params
- 4
params.require(:post).permit(:title, :content, :category_id, :image, :user_id)
end
- 1
def ensure_admin!
- 9
unless current_user.admin?
redirect_to root_path
return false
end
end
end
- 1
class ProfilesController < ApplicationController
- 1
def show
- 20
@user = User.find(params[:id])
- 20
@profile =<EMAIL_ADDRESS>end
- 1
def new
@profile= Profile.new
end
- 1
def create
@user = User.find(current_user)
@profile = Profile.new(@user)
@profile.save
end
- 1
def edit
@profile = Profile.find_by(user_id: current_user.id)
end
- 1
def update
@profile = Profile.find_by(user_id: current_user.id)
if @profile.update(profile_params)
flash[:notice] = "Profile successfully updated."
redirect_to profile_path(@profile)
else
flash[:alert] = "Oops, something went wrong!"
render :edit
end
end
- 1
private
- 1
def profile_params
params.require(:profile).permit(:about, :homebrewer, :kegerator, :favorites, :address, :city, :state, :zipcode, :avatar)
end
end
- 1
class RegistrationsController < Devise::RegistrationsController
- 1
def create
super
if resource.save
resource.create_profile
end
end
end
- 1
class StaticPagesController < ApplicationController
- 1
def show
render template: "pages/#{params[:page]}"
end
end
- 1
module ApplicationHelper
- 1
def active_page(active_page)
@active == active_page ? "active" : ""
end
- 1
def flash_class(level)
- 12
case level
- 8
when 'notice' then "alert alert-info"
when 'success' then "alert alert-success"
when 'error' then "alert alert-danger"
- 4
when 'alert' then "alert alert-warning"
end
end
end
- 1
module MailboxHelper
end
- 1
class ApplicationJob < ActiveJob::Base
end
- 1
class ApplicationMailer < ActionMailer::Base
- 1
default from<EMAIL_ADDRESS>- 1
layout 'mailer'
end
- 1
class ApplicationRecord < ActiveRecord::Base
- 1
self.abstract_class = true
end
- 1
class Beer < ActiveRecord::Base
- 1
belongs_to :user
- 1
belongs_to :style
- 1
validates :name, :container_type, :description, :brew_date, :user_id, :style_id, :presence => true
- 80
default_scope { order('created_at DESC') }
- 1
scope :style_id, -> (style_id) { where style_id: style_id }
end
- 1
class Category < ActiveRecord::Base
- 1
has_many :posts
- 1
validates :name, :presence => true
end
- 1
class Comment < ActiveRecord::Base
- 1
belongs_to :post
- 1
belongs_to :user
- 1
validates :content, :presence => true
end
- 1
class Post < ActiveRecord::Base
- 1
has_many :comments
- 1
belongs_to :category
- 1
belongs_to :user
- 1
validates :title, :content, :presence => true
- 1
has_attached_file :image, :styles => { :medium => "250x250>", :large => "700x700>"}, :default_url => "/images/:style/brewers.jpg"
- 1
validates_attachment_content_type :image, :content_type => %w(image/jpeg image/jpg image/png)
- 86
default_scope {order('created_at DESC')}
end
- 1
class Profile < ActiveRecord::Base
- 1
belongs_to :user
- 1
has_attached_file :avatar, :styles => { :medium => "200x200#", :thumb => "100x100#" }, :default_url => "/images/:style/missing.png"
- 1
validates_attachment_content_type :avatar, :content_type => %w(image/jpeg image/jpg image/png)
- 1
before_validation :create_full_address
- 1
geocoded_by :full_address
- 1
after_validation :geocode, :if => :address_changed?
- 1
private
- 1
def create_full_address
- 19
self.full_address = [address, city, state, zipcode].compact.join(', ')
end
end
- 1
class Style < ActiveRecord::Base
- 1
has_many :beers
- 1
validates :name, :presence => true
end
- 1
class User < ApplicationRecord
- 1
has_one :profile, dependent: :destroy
- 1
accepts_nested_attributes_for :profile, :update_only => true
- 1
has_many :comments
- 1
has_many :posts
- 1
has_many :beers, dependent: :destroy
- 1
after_create :create_profile
- 1
acts_as_messageable
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
- 1
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
- 1
def mailboxer_name
self.name
end
- 1
def mailboxer_email(object)
self.email
end
end
- 1
require_relative 'boot'
- 1
require "rails"
# Pick the frameworks you want:
- 1
require "active_model/railtie"
- 1
require "active_job/railtie"
- 1
require "active_record/railtie"
- 1
require "action_controller/railtie"
- 1
require "action_mailer/railtie"
- 1
require "action_view/railtie"
- 1
require "action_cable/engine"
- 1
require "sprockets/railtie"
# require "rails/test_unit/railtie"
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
- 1
Bundler.require(*Rails.groups)
- 1
module BeerSwap
- 1
class Application < Rails::Application
# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded.
end
end
- 1
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
- 1
require 'bundler/setup' # Set up gems listed in the Gemfile.
# Load the Rails application.
- 1
require_relative 'application'
# Initialize the Rails application.
- 1
Rails.application.initialize!
- 1
Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb.
# The test environment is used exclusively to run your application's
# test suite. You never need to work with it otherwise. Remember that
# your test database is "scratch space" for the test suite and is wiped
# and recreated between test runs. Don't rely on the data there!
- 1
config.cache_classes = true
# Do not eager load code on boot. This avoids loading your whole application
# just for the purpose of running a single test. If you are using a tool that
# preloads Rails for running tests, you may have to set it to true.
- 1
config.eager_load = true
# Configure public file server for tests with Cache-Control for performance.
- 1
config.public_file_server.enabled = true
- 1
config.public_file_server.headers = {
'Cache-Control' => 'public, max-age=3600'
}
# Show full error reports and disable caching.
- 1
config.consider_all_requests_local = true
- 1
config.action_controller.perform_caching = false
# Raise exceptions instead of rendering exception templates.
- 1
config.action_dispatch.show_exceptions = false
# Disable request forgery protection in test environment.
- 1
config.action_controller.allow_forgery_protection = false
- 1
config.action_mailer.perform_caching = false
# Tell Action Mailer not to deliver emails to the real world.
# The :test delivery method accumulates sent emails in the
# ActionMailer::Base.deliveries array.
- 1
config.action_mailer.delivery_method = :test
# Print deprecation notices to the stderr.
- 1
config.active_support.deprecation = :stderr
# Raises error for missing translations
# config.action_view.raise_on_missing_translations = true
end
# Be sure to restart your server when you modify this file.
# ApplicationController.renderer.defaults.merge!(
# http_host: 'example.org',
# https: false
# )
# Be sure to restart your server when you modify this file.
# Version of your assets, change this if you want to expire all your assets.
- 1
Rails.application.config.assets.version = '1.0'
# Add additional assets to the asset load path
# Rails.application.config.assets.paths << Emoji.images_path
# Precompile additional assets.
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
# Rails.application.config.assets.precompile += %w( search.js )
# Be sure to restart your server when you modify this file.
# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
# Rails.backtrace_cleaner.remove_silencers!
# Be sure to restart your server when you modify this file.
# Specify a serializer for the signed and encrypted cookie jars.
# Valid options are :json, :marshal, and :hybrid.
- 1
Rails.application.config.action_dispatch.cookies_serializer = :json
# Use this hook to configure devise mailer, warden hooks and so forth.
# Many of these configuration options can be set straight in your model.
- 1
Devise.setup do |config|
# The secret key used by Devise. Devise uses this key to generate
# random tokens. Changing this key will render invalid all existing
# confirmation, reset password and unlock tokens in the database.
# Devise will use the `secret_key_base` as its `secret_key`
# by default. You can change it below and use your own secret key.
# config.secret_key = 'd3400a7a41e68b3f750f66916e5f644df7c8d23328a1ba73285dba5a621807a81147daf757b75946fd94a4defade6b684767e7c4ea7334f9e09a033f4a80781b'
# ==> Mailer Configuration
# Configure the e-mail address which will be shown in Devise::Mailer,
# note that it will be overwritten if you use your own mailer class
# with default "from" parameter.
- 1
config.mailer_sender =<EMAIL_ADDRESS># Configure the class responsible to send e-mails.
# config.mailer = 'Devise::Mailer'
# Configure the parent class responsible to send e-mails.
# config.parent_mailer = 'ActionMailer::Base'
# ==> ORM configuration
# Load and configure the ORM. Supports :active_record (default) and
# :mongoid (bson_ext recommended) by default. Other ORMs may be
# available as additional gems.
- 1
require 'devise/orm/active_record'
# ==> Configuration for any authentication mechanism
# Configure which keys are used when authenticating a user. The default is
# just :email. You can configure it to use [:username, :subdomain], so for
# authenticating a user, both parameters are required. Remember that those
# parameters are used only when authenticating and not when retrieving from
# session. If you need permissions, you should implement that in a before filter.
# You can also supply a hash where the value is a boolean determining whether
# or not authentication should be aborted when the value is not present.
# config.authentication_keys = [:email]
# Configure parameters from the request object used for authentication. Each entry
# given should be a request method and it will automatically be passed to the
# find_for_authentication method and considered in your model lookup. For instance,
# if you set :request_keys to [:subdomain], :subdomain will be used on authentication.
# The same considerations mentioned for authentication_keys also apply to request_keys.
# config.request_keys = []
# Configure which authentication keys should be case-insensitive.
# These keys will be downcased upon creating or modifying a user and when used
# to authenticate or find a user. Default is :email.
- 1
config.case_insensitive_keys = [:email]
# Configure which authentication keys should have whitespace stripped.
# These keys will have whitespace before and after removed upon creating or
# modifying a user and when used to authenticate or find a user. Default is :email.
- 1
config.strip_whitespace_keys = [:email]
# Tell if authentication through request.params is enabled. True by default.
# It can be set to an array that will enable params authentication only for the
# given strategies, for example, `config.params_authenticatable = [:database]` will
# enable it only for database (email + password) authentication.
# config.params_authenticatable = true
# Tell if authentication through HTTP Auth is enabled. False by default.
# It can be set to an array that will enable http authentication only for the
# given strategies, for example, `config.http_authenticatable = [:database]` will
# enable it only for database authentication. The supported strategies are:
# :database = Support basic authentication with authentication key + password
# config.http_authenticatable = false
# If 401 status code should be returned for AJAX requests. True by default.
# config.http_authenticatable_on_xhr = true
# The realm used in Http Basic Authentication. 'Application' by default.
# config.http_authentication_realm = 'Application'
# It will change confirmation, password recovery and other workflows
# to behave the same regardless if the e-mail provided was right or wrong.
# Does not affect registerable.
# config.paranoid = true
# By default Devise will store the user in session. You can skip storage for
# particular strategies by setting this option.
# Notice that if you are skipping storage for all authentication paths, you
# may want to disable generating routes to Devise's sessions controller by
# passing skip: :sessions to `devise_for` in your config/routes.rb
- 1
config.skip_session_storage = [:http_auth]
# By default, Devise cleans up the CSRF token on authentication to
# avoid CSRF token fixation attacks. This means that, when using AJAX
# requests for sign in and sign up, you need to get a new CSRF token
# from the server. You can disable this option at your own risk.
# config.clean_up_csrf_token_on_authentication = true
# When false, Devise will not attempt to reload routes on eager load.
# This can reduce the time taken to boot the app but if your application
# requires the Devise mappings to be loaded during boot time the application
# won't boot properly.
# config.reload_routes = true
# ==> Configuration for :database_authenticatable
# For bcrypt, this is the cost for hashing the password and defaults to 11. If
# using other algorithms, it sets how many times you want the password to be hashed.
#
# Limiting the stretches to just one in testing will increase the performance of
# your test suite dramatically. However, it is STRONGLY RECOMMENDED to not use
# a value less than 10 in other environments. Note that, for bcrypt (the default
# algorithm), the cost increases exponentially with the number of stretches (e.g.
# a value of 20 is already extremely slow: approx. 60 seconds for 1 calculation).
- 1
config.stretches = Rails.env.test? ? 1 : 11
# Set up a pepper to generate the hashed password.
# config.pepper = 'ab7428c0d74ff60dc847658a795d5624bf8fb5fc5ac0087123ca6b1053b189e1bd3af7d5c9b07360923e3a62b3c8b55d8f64bba17fb0f9bfb307c1ac4f22678a'
# Send a notification email when the user's password is changed
# config.send_password_change_notification = false
# ==> Configuration for :confirmable
# A period that the user is allowed to access the website even without
# confirming their account. For instance, if set to 2.days, the user will be
# able to access the website for two days without confirming their account,
# access will be blocked just in the third day. Default is 0.days, meaning
# the user cannot access the website without confirming their account.
# config.allow_unconfirmed_access_for = 2.days
# A period that the user is allowed to confirm their account before their
# token becomes invalid. For example, if set to 3.days, the user can confirm
# their account within 3 days after the mail was sent, but on the fourth day
# their account can't be confirmed with the token any more.
# Default is nil, meaning there is no restriction on how long a user can take
# before confirming their account.
# config.confirm_within = 3.days
# If true, requires any email changes to be confirmed (exactly the same way as
# initial account confirmation) to be applied. Requires additional unconfirmed_email
# db field (see migrations). Until confirmed, new email is stored in
# unconfirmed_email column, and copied to email column on successful confirmation.
- 1
config.reconfirmable = true
# Defines which key will be used when confirming an account
# config.confirmation_keys = [:email]
# ==> Configuration for :rememberable
# The time the user will be remembered without asking for credentials again.
# config.remember_for = 2.weeks
# Invalidates all the remember me tokens when the user signs out.
- 1
config.expire_all_remember_me_on_sign_out = true
# If true, extends the user's remember period when remembered via cookie.
# config.extend_remember_period = false
# Options to be passed to the created cookie. For instance, you can set
# secure: true in order to force SSL only cookies.
# config.rememberable_options = {}
# ==> Configuration for :validatable
# Range for password length.
- 1
config.password_length = 6..128
# Email regex used to validate email formats. It simply asserts that
# one (and only one) @ exists in the given string. This is mainly
# to give user feedback and not to assert the e-mail validity.
- 1
config.email_regexp = /\A[^@\s]+@[^@\s]+\z/
# ==> Configuration for :timeoutable
# The time you want to timeout the user session without activity. After this
# time the user will be asked for credentials again. Default is 30 minutes.
# config.timeout_in = 30.minutes
# ==> Configuration for :lockable
# Defines which strategy will be used to lock an account.
# :failed_attempts = Locks an account after a number of failed attempts to sign in.
# :none = No lock strategy. You should handle locking by yourself.
# config.lock_strategy = :failed_attempts
# Defines which key will be used when locking and unlocking an account
# config.unlock_keys = [:email]
# Defines which strategy will be used to unlock an account.
# :email = Sends an unlock link to the user email
# :time = Re-enables login after a certain amount of time (see :unlock_in below)
# :both = Enables both strategies
# :none = No unlock strategy. You should handle unlocking by yourself.
# config.unlock_strategy = :both
# Number of authentication tries before locking an account if lock_strategy
# is failed attempts.
# config.maximum_attempts = 20
# Time interval to unlock the account if :time is enabled as unlock_strategy.
# config.unlock_in = 1.hour
# Warn on the last attempt before the account is locked.
# config.last_attempt_warning = true
# ==> Configuration for :recoverable
#
# Defines which key will be used when recovering the password for an account
# config.reset_password_keys = [:email]
# Time interval you can reset your password with a reset password key.
# Don't put a too small interval or your users won't have the time to
# change their passwords.
- 1
config.reset_password_within = 6.hours
# When set to false, does not sign a user in automatically after their password is
# reset. Defaults to true, so a user is signed in automatically after a reset.
# config.sign_in_after_reset_password = true
# ==> Configuration for :encryptable
# Allow you to use another hashing or encryption algorithm besides bcrypt (default).
# You can use :sha1, :sha512 or algorithms from others authentication tools as
# :clearance_sha1, :authlogic_sha512 (then you should set stretches above to 20
# for default behavior) and :restful_authentication_sha1 (then you should set
# stretches to 10, and copy REST_AUTH_SITE_KEY to pepper).
#
# Require the `devise-encryptable` gem when using anything other than bcrypt
# config.encryptor = :sha512
# ==> Scopes configuration
# Turn scoped views on. Before rendering "sessions/new", it will first check for
# "users/sessions/new". It's turned off by default because it's slower if you
# are using only default views.
- 1
config.scoped_views = true
# Configure the default scope given to Warden. By default it's the first
# devise role declared in your routes (usually :user).
# config.default_scope = :user
# Set this configuration to false if you want /users/sign_out to sign out
# only the current scope. By default, Devise signs out all scopes.
# config.sign_out_all_scopes = true
# ==> Navigation configuration
# Lists the formats that should be treated as navigational. Formats like
# :html, should redirect to the sign in page when the user does not have
# access, but formats like :xml or :json, should return 401.
#
# If you have any extra navigational formats, like :iphone or :mobile, you
# should add them to the navigational formats lists.
#
# The "*/*" below is required to match Internet Explorer requests.
# config.navigational_formats = ['*/*', :html]
# The default HTTP method used to sign out a resource. Default is :delete.
- 1
config.sign_out_via = :delete
# ==> OmniAuth
# Add a new OmniAuth provider. Check the wiki for more information on setting
# up on your models and hooks.
# config.omniauth :github, 'APP_ID', 'APP_SECRET', scope: 'user,public_repo'
# ==> Warden configuration
# If you want to use other strategies, that are not supported by Devise, or
# change the failure app, you can configure them inside the config.warden block.
#
# config.warden do |manager|
# manager.intercept_401 = false
# manager.default_strategies(scope: :user).unshift :some_external_strategy
# end
# ==> Mountable engine configurations
# When using Devise inside an engine, let's call it `MyEngine`, and this engine
# is mountable, there are some extra configurations to be taken into account.
# The following options are available, assuming the engine is mounted as:
#
# mount MyEngine, at: '/my_engine'
#
# The router that invoked `devise_for`, in the example above, would be:
# config.router_name = :my_engine
#
# When using OmniAuth, Devise cannot automatically set OmniAuth path,
# so you need to do it manually. For the users scope, it would be:
# config.omniauth_path_prefix = '/my_engine/users/auth'
end
# Be sure to restart your server when you modify this file.
# Configure sensitive parameters which will be filtered from the log file.
- 1
Rails.application.config.filter_parameters += [:password]
# Be sure to restart your server when you modify this file.
# Add new inflection rules using the following format. Inflections
# are locale specific, and you may define rules for as many different
# locales as you wish. All of these examples are active by default:
# ActiveSupport::Inflector.inflections(:en) do |inflect|
# inflect.plural /^(ox)$/i, '\1en'
# inflect.singular /^(ox)en/i, '\1'
# inflect.irregular 'person', 'people'
# inflect.uncountable %w( fish sheep )
# end
# These inflection rules are supported but not enabled by default:
# ActiveSupport::Inflector.inflections(:en) do |inflect|
# inflect.acronym 'RESTful'
# end
- 1
Mailboxer.setup do |config|
#Configures if your application uses or not email sending for Notifications and Messages
- 1
config.uses_emails = true
#Configures the default from for emails sent for Messages and Notifications
- 1
config.default_from =<EMAIL_ADDRESS>#Configures the methods needed by mailboxer
- 1
config.email_method = :mailboxer_email
- 1
config.name_method = :mailboxer_name
#Configures if you use or not a search engine and which one you are using
#Supported engines: [:solr,:sphinx]
- 1
config.search_enabled = false
- 1
config.search_engine = :solr
#Configures maximum length of the message subject and body
- 1
config.subject_max_length = 255
- 1
config.body_max_length = 32000
end
# Be sure to restart your server when you modify this file.
# Add new mime types for use in respond_to blocks:
# Mime::Type.register "text/richtext", :rtf
# Be sure to restart your server when you modify this file.
#
# This file contains migration options to ease your Rails 5.0 upgrade.
#
# Read the Rails 5.0 release notes for more info on each option.
# Enable per-form CSRF tokens. Previous versions had false.
- 1
Rails.application.config.action_controller.per_form_csrf_tokens = true
# Enable origin-checking CSRF mitigation. Previous versions had false.
- 1
Rails.application.config.action_controller.forgery_protection_origin_check = true
# Make Ruby 2.4 preserve the timezone of the receiver when calling `to_time`.
# Previous versions had false.
- 1
ActiveSupport.to_time_preserves_timezone = true
# Require `belongs_to` associations by default. Previous versions had false.
- 1
Rails.application.config.active_record.belongs_to_required_by_default = true
# Do not halt callback chains when a callback returns false. Previous versions had true.
- 1
ActiveSupport.halt_callback_chains_on_return_false = false
# Configure SSL options to enable HSTS with subdomains. Previous versions had false.
- 1
Rails.application.config.ssl_options = { hsts: { subdomains: true } }
# Be sure to restart your server when you modify this file.
- 1
Rails.application.config.session_store :cookie_store, key: '_beer_swap_session'
# Be sure to restart your server when you modify this file.
# This file contains settings for ActionController::ParamsWrapper which
# is enabled by default.
# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
- 1
ActiveSupport.on_load(:action_controller) do
- 2
wrap_parameters format: [:json]
end
# To enable root element in JSON for ActiveRecord objects.
# ActiveSupport.on_load(:active_record) do
# self.include_root_in_json = true
# end
- 1
Rails.application.routes.draw do
- 1
devise_for :users,
controllers: { registrations: "devise/registrations"}
- 1
root :to => 'static_pages#home'
- 1
get "/static_pages/:page" => "static_pages#show"
- 1
resources :posts do
- 1
resources :comments
end
- 1
resources :profiles
- 1
resources :users do
- 1
resources :beers
end
- 1
resources :beers do
- 1
resources :conversations
end
- 1
get "mailbox/inbox" => "mailbox#inbox", as: :mailbox_inbox
- 1
get "mailbox/sent" => "mailbox#sent", as: :mailbox_sent
- 1
get "mailbox/trash" => "mailbox#trash", as: :mailbox_trash
- 1
resources :messages, only: [:new, :create]
- 1
resources :conversations do
- 1
member do
- 1
post :reply
- 1
post :trash
- 1
post :untrash
end
end
end
%w(
.ruby-version
.rbenv-vars
tmp/restart.txt
tmp/caching-dev.txt
- 5
).each { |path| Spring.watch(path) }
- 1
FactoryGirl.define do
- 1
factory :user do
- 1
name('Person')
- 1
<EMAIL_ADDRESS>- 1
password('password')
- 1
admin(true)
- 1
id(1)
end
- 1
factory(:category) do
- 1
name('News')
- 1
id(2)
end
- 1
factory(:post) do
- 1
category
- 1
user
- 1
title('No beer for Donald Trump')
- 1
content('Because, obviously.')
- 1
image Rack::Test::UploadedFile.new('spec/fixtures/images/cheers.jpg', 'image/jpg')
end
- 1
factory(:profile) do
- 1
user
- 1
address('400 SW 6th Avenue')
- 1
city('Portland')
- 1
state('Oregon')
- 1
zipcode('97214')
- 1
avatar Rack::Test::UploadedFile.new('spec/fixtures/images/missing.png', 'image/png')
end
- 1
factory(:style) do
- 1
name('Porter/Stout')
- 1
id(1)
end
- 1
factory(:beer) do
- 1
style
- 1
user
- 1
name('Outrageous Oatmeal Stout')
- 1
description('This turned out really well! Creamy and not-too-sweet.')
- 1
abv(7.5)
- 1
container_type('22 oz. bottles')
- 1
homebrew(true)
- 1
brew_date('2016-06-13')
end
end
- 1
require 'rails_helper'
- 1
describe "the add a beer process", js: true, vcr: true do
- 1
it "allows a user to post a new beer for sharing" do
- 1
user = FactoryGirl.create(:user)
- 1
style = FactoryGirl.create(:style)
- 1
visit posts_path
- 1
click_on "Login"
- 1
fill_in "Email", with<EMAIL_ADDRESS>- 1
fill_in "Password", with: "password"
- 1
click_on "Log in"
- 1
click_on "My Profile"
- 1
click_on "Post a new beer"
- 1
fill_in "Name", with: "Outrageous Oatmeal Stout"
- 1
fill_in "beer[abv]", with: 7.5
- 1
select('Porter/Stout', :from => 'beer[style_id]')
- 1
select('22 oz. bottles', :from => 'beer[container_type]')
- 1
fill_in "Brew date", with: "2016-06-13"
- 1
fill_in "beer[brewery_name]", with: "Rogue"
- 1
fill_in "Description", with: "This turned out really well! Creamy and not-too-sweet."
- 1
click_on "Submit"
- 1
expect(page).to have_content "Outrageous Oatmeal Stout"
end
- 1
it "won't save a beer without a name" do
- 1
profile = FactoryGirl.create(:profile)
- 1
style = FactoryGirl.create(:style)
- 1
visit posts_path
- 1
click_on "Login"
- 1
fill_in "Email", with<EMAIL_ADDRESS>- 1
fill_in "Password", with: "password"
- 1
click_on "Log in"
- 1
click_on "My Profile"
- 1
click_on "Post a new beer"
- 1
fill_in "Name", with: ""
- 1
fill_in "beer[abv]", with: 7.5
- 1
select('Porter/Stout', :from => 'beer[style_id]')
- 1
select('22 oz. bottles', :from => 'beer[container_type]')
- 1
fill_in "Brew date", with: "2016-06-13"
- 1
fill_in "beer[brewery_name]", with: "Rogue"
- 1
fill_in "Description", with: "This turned out really well! Creamy and not-too-sweet."
- 1
click_on "Submit"
- 1
expect(page).to have_content "Oops, something went wrong!"
end
end
- 1
require 'rails_helper'
- 1
describe "the add a comment process" do
- 1
it "adds a new comment to a post" do
- 1
post = FactoryGirl.create(:post)
- 1
visit posts_path
- 1
click_on "Login"
- 1
fill_in "Email", with<EMAIL_ADDRESS>- 1
fill_in "Password", with: "password"
- 1
click_on "Log in"
- 1
click_on "Blog"
- 1
click_on "No beer for Donald Trump"
- 1
click_on "Add a Comment"
- 1
fill_in "Content", with: "That's ok, I'm really really rich and don't need your free beer."
- 1
click_on "Submit"
- 1
expect(page).to have_content "That's ok, I'm really really rich and don't need your free beer."
end
- 1
it "won't save a comment without any content" do
- 1
post = FactoryGirl.create(:post)
- 1
visit posts_path
- 1
click_on "Login"
- 1
fill_in "Email", with<EMAIL_ADDRESS>- 1
fill_in "Password", with: "password"
- 1
click_on "Log in"
- 1
click_on "Blog"
- 1
click_on "No beer for Donald Trump"
- 1
click_on "Add a Comment"
- 1
fill_in "Content", with: ""
- 1
click_on "Submit"
- 1
expect(page).to have_content "Oops, something went wrong!"
end
end
- 1
require 'rails_helper'
- 1
describe "the add a post process" do
- 1
it "adds a new post" do
- 1
category = FactoryGirl.create(:category)
- 1
user = FactoryGirl.create(:user)
- 1
visit posts_path
- 1
click_on "Login"
- 1
fill_in "Email", with<EMAIL_ADDRESS>- 1
fill_in "Password", with: "password"
- 1
click_on "Log in"
- 1
click_on "Blog"
- 1
click_link 'Create New Post'
- 1
fill_in 'Title', :with => 'This is a post'
- 1
choose ("post_category_id_2")
- 1
fill_in 'Content', :with => 'I like beer.'
- 1
click_on 'Submit'
- 1
expect(page).to have_content 'This is a post'
end
- 1
it "won't save a post without a title" do
- 1
category = FactoryGirl.create(:category)
- 1
user = FactoryGirl.create(:user)
- 1
visit posts_path
- 1
click_on "Login"
- 1
fill_in "Email", with<EMAIL_ADDRESS>- 1
fill_in "Password", with: "password"
- 1
click_on "Log in"
- 1
click_on "Blog"
- 1
click_link 'Create New Post'
- 1
fill_in 'Title', :with => ''
- 1
choose ("post_category_id_2")
- 1
fill_in 'Content', :with => 'I like beer.'
- 1
click_on 'Submit'
- 1
expect(page).to have_content "Title can't be blank"
end
- 1
it "doesn't let non-admin users create new posts" do
- 1
category = FactoryGirl.create(:category)
- 1
user = FactoryGirl.create(:user)
- 1
user.admin = false
- 1
user.save
- 1
visit posts_path
- 1
click_on "Login"
- 1
fill_in "Email", with<EMAIL_ADDRESS>- 1
fill_in "Password", with: "password"
- 1
click_on "Log in"
- 1
click_on "Blog"
- 1
expect(page).to_not have_content 'Create a New Post'
end
end
- 1
require 'rails_helper'
- 1
describe "the add a user process" do
- 1
it "adds a new user and creates a blank profile for them" do
- 1
visit posts_path
- 1
click_on "Signup"
- 1
fill_in "Name", with: "Person"
- 1
fill_in "Email", with<EMAIL_ADDRESS>- 1
fill_in "Password", with: "password"
- 1
fill_in "Password confirmation", with: "password"
- 1
click_on "Submit"
- 1
expect(page).to have_content 'Welcome! You have signed up successfully.'
- 1
click_on "My Profile"
- 1
expect(page).to have_content "Person"
end
end
- 1
require 'rails_helper'
- 1
describe "the delete a comment process" do
- 1
it "deletes a comment" do
- 1
post = FactoryGirl.create(:post)
- 1
visit posts_path
- 1
click_on "Login"
- 1
fill_in "Email", with<EMAIL_ADDRESS>- 1
fill_in "Password", with: "password"
- 1
click_on "Log in"
- 1
click_on "Blog"
- 1
click_on "No beer for Donald Trump"
- 1
click_on "Add a Comment"
- 1
fill_in "Content", with: "That's ok, I'm really really rich and don't need your free beer."
- 1
click_on "Submit"
- 1
click_link 'Delete Comment'
- 1
expect(page).to_not have_content 'This country is terrifying'
end
end
- 1
require 'rails_helper'
- 1
describe "the delete a post path" do
- 1
it "deletes a post" do
- 1
post= FactoryGirl.create(:post)
- 1
visit posts_path
- 1
click_on "Login"
- 1
fill_in "Email", with<EMAIL_ADDRESS>- 1
fill_in "Password", with: "password"
- 1
click_on "Log in"
- 1
click_on "Blog"
- 1
click_on 'No beer for Donald Trump'
- 1
click_on 'Delete Post'
- 1
expect(page).to have_no_content('No beer for Donald Trump')
end
end
- 1
require 'rails_helper'
- 1
describe "the edit a comment process" do
- 1
it "edits a comment on a post" do
- 1
post = FactoryGirl.create(:post)
- 1
visit posts_path
- 1
click_on "Login"
- 1
fill_in "Email", with<EMAIL_ADDRESS>- 1
fill_in "Password", with: "password"
- 1
click_on "Log in"
- 1
click_on "Blog"
- 1
click_on "No beer for Donald Trump"
- 1
click_on "Add a Comment"
- 1
fill_in "Content", with: "That's ok, I'm really really rich and don't need your free beer."
- 1
click_on "Submit"
- 1
click_on "Edit Comment"
- 1
fill_in "Content", with: "This country is more and more terrifying each day."
- 1
click_on "Submit"
- 1
expect(page).to have_content "This country is more and more terrifying each day."
end
- 1
it "won't update a comment without content" do
- 1
post = FactoryGirl.create(:post)
- 1
visit posts_path
- 1
click_on "Login"
- 1
fill_in "Email", with<EMAIL_ADDRESS>- 1
fill_in "Password", with: "password"
- 1
click_on "Log in"
- 1
click_on "Blog"
- 1
click_on "No beer for Donald Trump"
- 1
click_on "Add a Comment"
- 1
fill_in "Content", with: "That's ok, I'm really really rich and don't need your free beer."
- 1
click_on "Submit"
- 1
click_on "Edit Comment"
- 1
fill_in "Content", with: ""
- 1
click_on "Submit"
- 1
expect(page).to have_content "Content can't be blank"
end
end
- 1
require 'rails_helper'
- 1
describe "the edit a post process" do
- 1
it "edits a post" do
- 1
post = FactoryGirl.create(:post)
- 1
visit posts_path
- 1
click_on "Login"
- 1
fill_in "Email", with<EMAIL_ADDRESS>- 1
fill_in "Password", with: "password"
- 1
click_on "Log in"
- 1
click_on "Blog"
- 1
click_on 'No beer for Donald Trump'
- 1
click_on 'Edit Post'
- 1
fill_in 'Title', :with => 'No beer for Donald Trump!!!'
- 1
click_on 'Submit'
- 1
expect(page).to have_content 'No beer for Donald Trump!!!'
end
- 1
it "won't update a post without a title" do
- 1
post = FactoryGirl.create(:post)
- 1
visit posts_path
- 1
click_on "Login"
- 1
fill_in "Email", with<EMAIL_ADDRESS>- 1
fill_in "Password", with: "password"
- 1
click_on "Log in"
- 1
click_on "Blog"
- 1
click_on 'No beer for Donald Trump'
- 1
click_on 'Edit Post'
- 1
fill_in 'Title', :with => ''
- 1
click_on 'Submit'
- 1
expect(page).to have_content "Title can't be blank"
end
end
- 1
require 'rails_helper'
- 1
describe "the edit a profile process", vcr: true do
- 1
it "allows a user to update their account information" do
- 1
profile = FactoryGirl.create(:profile)
- 1
visit posts_path
- 1
click_on "Login"
- 1
fill_in "Email", with<EMAIL_ADDRESS>- 1
fill_in "Password", with: "password"
- 1
click_on "Log in"
- 1
click_on 'My Profile'
- 1
click_on 'Account Settings'
- 1
fill_in 'Name', :with => 'Person McPerson'
- 1
fill_in 'Current password', :with => 'password'
- 1
click_on 'Submit Changes'
- 1
expect(page).to have_content 'Your account has been updated successfully'
end
end
- 1
require 'rails_helper'
- 1
RSpec.describe Beer, type: :model do
- 2
it { should belong_to :user }
- 2
it { should belong_to :style }
- 2
it { should validate_presence_of :name }
- 2
it { should validate_presence_of :container_type }
- 2
it { should validate_presence_of :brew_date }
- 2
it { should validate_presence_of :description }
end
- 1
require 'rails_helper'
- 1
describe Category do
- 2
it { should validate_presence_of :name }
- 2
it { should have_many :posts }
end
- 1
require 'rails_helper'
- 1
describe Comment do
- 2
it { should validate_presence_of :content }
- 2
it { should belong_to :post }
- 2
it { should belong_to :user }
end
- 1
require 'rails_helper'
- 1
describe Post do
- 2
it { should validate_presence_of :title }
- 2
it { should validate_presence_of :content }
- 2
it { should have_many :comments }
- 2
it { should belong_to :category }
- 2
it { should belong_to :user }
- 1
describe 'default_scope' do
- 1
it("orders posts with most recent displayed first") do
- 1
user = FactoryGirl.create(:user)
- 1
category = Category.create({:name => "Beer", :id => 1})
- 1
category2 = Category.create({:name => "News", :id => 2})
- 1
post1 = Post.create({:title => "This is a post", :content => "Here's some content.", :category_id => 1, :user_id => 1})
- 1
post2 = Post.create({:title => "This is another post", :content => "This one has content, too!", :category_id => 2, :user_id => 1})
- 1
expect(Post.all).to(eq([post2, post1]))
end
end
end
- 1
require 'rails_helper'
- 1
describe Profile do
- 2
it { should belong_to :user }
end
- 1
require 'rails_helper'
- 1
describe Style do
- 2
it { should validate_presence_of :name }
- 2
it { should have_many :beers }
end
- 1
require 'rails_helper'
- 1
RSpec.describe User, type: :model do
- 2
it { should have_many :posts }
- 2
it { should have_many :beers }
- 2
it { should have_many :comments }
- 2
it { should have_one :profile }
end
- 1
ENV['RAILS_ENV'] ||= 'test'
- 1
require File.expand_path('../../config/environment', __FILE__)
- 1
abort("The Rails environment is running in production mode!") if Rails.env.production?
- 1
require 'spec_helper'
- 1
require 'rspec/rails'
- 1
require 'capybara/rails'
- 1
ActiveRecord::Migration.maintain_test_schema!
- 1
RSpec.configure do |config|
- 1
config.fixture_path = "#{::Rails.root}/spec/fixtures"
# config.use_transactional_fixtures = true
- 1
config.before(:suite) do
- 1
DatabaseCleaner.strategy = :truncation
end
- 1
config.around(:each) do |example|
- 39
DatabaseCleaner.cleaning do
- 39
example.run
end
end
- 1
config.infer_spec_type_from_file_location!
end
- 1
Shoulda::Matchers.configure do |config|
- 1
config.integrate do |with|
- 1
with.test_framework :rspec
- 1
with.library :rails
end
end
- 1
VCR.configure do |c|
- 1
c.cassette_library_dir = 'spec/cassettes'
- 1
c.hook_into :webmock
- 1
c.configure_rspec_metadata!
- 3
c.filter_sensitive_data('<Google API KEY>') { ENV['GOOGLE_API_KEY']}
- 1
c.ignore_localhost = true
end


Hello,
My name is Plamen, I’m 25 years old and I love functional programming and to explore new opportunities.
I am a passionate Software Developer 🚀 having an experience of building Web applications with JavaScript / React JS / Node JS / React Native and some other cool libraries and frameworks.
Currently I am mostly working with JavaScript ES6, jQuery, PHP 8, HTML/SASS and WordPress.
I am a leading developer of all websites of the company in which I work. My daily tasks include managment and developing new websites or features/widgets for already existing ones. Also I was the developer of the Registration API for our new trading platform.
In my future career I want to develop as a front-end developer with React.js.
In my free time I love to travel and go out with my friends. Also I am a huge fan of motorsport, modern music and movies.
Working as a Front-end Web Developer with JavaScript, PHP and WordPress
for a large fintech company.
Working as a Wordpress Web Dev with HTML/CSS, Javascript,
Bootstrap and PHP
for a small startup company that develops websites and online stores.
Strong experience with JS, Ajax, Jquery, JSON, Grid, Flex-box responsive design,
Bootstrap
Preventing errors in manufacturing or production that lead to product defects. Testing products extensively before their release. Responsible for ensuring a product or service meets the established standards of quality including reliability, usability and performance required for distribution and the market.


XMPP Chrome extension
Written by Lloyd Watkin
Using XMPP-FTW
This code is open source and available on github
advanced


Hi Mom, I am having a really time at camp. The counselour is and we need to use everymorning to use finish our food! I'd rather be coding at ! I also met a frined looks like . Unfortunately, he/she has 3 OMG!! anyway this persons is kind of by the way, this persons' smells like .. I need more and to make my camp life better.. I can't wait to go back and go on to watch movies and lay on my bed!


{% extends "templates/base.html" %} {% block "title" %}Timelapse Beehive{% endblock %} {% block "heading" %}Timelapse Beehive{% endblock %} {% block "main" %}
I have always wanted to keep bees. Recently I made good on 20 years' ambition and got a hive.
This is a cut-down version of my blog post. I recommend you read that for more detail.
When you encounter a bee in the wild, you can hear how it sounds. It's probably flying, or buzzing to warn you that it has a sting and could totally take you. But it's one bee on its own.
The beehive is an extraordinary macro-organism. It's a huge co-operative mass of animals all doing their own thing, but to the same end. But they're not just co-operating.
They're taking group decisions as a whole, like whether another queen should be produced, or whether to swarm, or if the hive is too hot or too cold and needs air conditioning.
I thought the sound of a beehive might be a good insight into some of the processes going on.
You can hear individual bees that you meet, you can hear the inside of a hive when you open it to inspect it, but behind closed doors, when no-one's looking or listening, how do they sound?
Bees are some of the most studied animals in the world, although I'm not sure if that would be true if you divided that per capita. Recording bees isn't something new. I know someone who knew someone who was recording beehives in the 1950s. I found a couple of projects online, but they seemed a bit over-complicated, and academic, and not really suitable. Most of all, they involve trailing wires.
So I decided to make my own.
I could have stuck a microphone in a hive and pressed record. No doubt I would have got - you're ahead of me here - a recording of some buzzing. That would be an interesting one-off, but it wouldn't really tell me much except that bees don't stop buzzing once they go indoors.
What would be interesting to do would be to compare how they sound during the day to how they sound during the night. Or how they sound in the summer compared to the winter.
So I decided that I wanted something to take small recordings on a timer, then splice them together to form a time-lapse.
To do this I needed to make something. Some kind of device...
A bee-keeper needs to know his bees. They're not just a box at the bottom of the garden. For this reason a beekeeper has a veil and smoker and undertakes the ritual of the opening of the hive for inspection.
That's me, behind the camera taking the photo.
The purpose of opening the hive is to know exactly what's going on. A bee-keeper should know, at all times, if the queen is laying eggs, if they're healthy, how many there are, if the bees have enough food and elbow room, if they're suffering from disease, and so on. Adding an extra bit of information is surely a good thing.
As you open the hive, the sound the bees make constantly changes. They might be angry, confused, or just fed up that you're taking so long and they're getting cold. The constant change in the volume and pitch of the collective hum is, like most things about bees, completely magical.
A timelapse over the course of a day might show a daily cycle of something. Perhaps they get cold at night and need to shiver to keep warm. Perhaps they get to warm in the day and need to fan to keep cool. A timelapse over a year might show that they don't do much over winter. Or it might show that they're very busy keeping warm. It's a very bad idea to open a hive and look inside when it's cold, but if a microphone's installed, I can listen to them any time.
There is something magical about bees. One of the magical things is the 'bee space'. It's a measurement of approximately 7mm, the width of a bee. Bees like everything to be tidy and connected. They want to be able to crawl between things, work on the comb back-to-back, and for all holes they can't crawl through to be sealed up. If a gap is smaller than the bee space, they will fill it up with propolis, which is a sticky substance made from resin. If a gap is larger than the bee space, they will fill it with wax comb. Of course, it's more complicated than that.
All modern hives are made with the bee-gap in mind. They are very carefully engineered so they can be taken apart and the frames removed, but the bees won't try to glue anything up. So there isn't actually much space to put extra objects.
A hive is made of a number of boxes. In each box hang about 10 frames, which the bees make comb on. The brood box is at the bottom, where the queen lays eggs and the workers raise them. On top of this are supers, which are smaller, and that's where the beekeeper would really rather the bees put the honey. To keep the queen from laying eggs in the supers, a queen excluder is placed between the brood box and the supers. It's a grid of wires that workers can get through but the queen can't.
So there are three places I could put this microphone.
One is underneath, kind of poking up. This is only temporary, as it's an external object and is sure to be glued to something sooner or later.
The queen excluder provides a useful space to connect things to, and is right in the centre of the hive.
The walls of a hive are quite thick. I could drill a hole and recess a microphone.
You can get absolutely tiny electret microphones these days. I started by butchering a mobile phone earphone and microphone set. I immediately regretted it, as the mic is smaller than a match head.
I eventually managed to solder it onto some kynar wire, and later copper winding wire.
I decided to use an Android tablet and write some custom software for it.
So my setup looks like this:
There is a thoroughly discredited paper saying that mobile phone signals can affect bee navigation. Discredited perhaps, but while it would have been great to use a mobile phone and have automatic uploads over the air, I didn't want to risk it. So I'm using bog standard wireless, and taking the tablet home to upload the sounds at periodic intervals.
This means that if you want to make recordings, all you have to do is find an android device, and plug a microphone in.
I want to take regular recordings, but play back timelapses on different timescales. Also, because of the approximate alarm situation, I didn't have exactly timed samples.
So I stored the recordings with the time they actually happened and then choose the nearest neighbour.
For example, if I have 24 hours recording every 5 minutes and I want to create a timelapse taken from every 18 minutes:
I read somewhere that bees will eat paper voraciously. Here's how my probe came out after about 4 hours. Compared to a new microphone on the left.
I'll need to do a bit more R&D.
I love birds, but that's not what I was here to do. In almost every ten-second recording, taken every 15 minutes, there's birdsong. I think I'll try and get the microphone further into the middle of the hive.
These are very early days. Here's a short time-lapse taken over four hours. Here's a spectrogram, which represents the frequencies present in the sound. Look near the very bottom (under 1khz) for the bees. You can see the chattering of the birds at about 30 seconds, about 2 kHz.
Early days.
I'm just getting started with my bees and my time-lapse beehive. This is early days, where 'days' means literally 'days'. I hope to have more recordings in the coming weeks.
Check timelapsebeehive.com, follow me on twitter, @joewass . Get in contact if you're interested!
Everything about this project is Open Source and Creative Commons.
If you want some more technical detail check my blog.


COMMUNITY ALLY PRIVACY POLICY
1. Introduction
Thank you for visiting Community Ally. Please read our Terms of Service and this Privacy Policy carefully, as you must agree to both documents in order to have permission to use our Service. We strongly believe privacy is one of the most important concepts of our time. Pursuant to modifications of Terms of Service effective September 16, 2020, Community Ally is making proactive and substantial steps to both protect user privacy, and to provide users more control over their own data.
2. Definitions
Throughout this document, we may use certain words or phrases, and it is important that you understand the meaning of them. The following is a non-exhaustive list of definitions of words and phrases found in this document:
"Community Ally" refers to our company, known as "Taylor Clark Software, LLC"; our Site; related sites (Condo Ally, HOA Ally, Townhome Ally, Block Club Ally, Neighborhood Ally, PTA Ally); our Service; or a combination of all or some of the preceding definitions, depending on the context in which the word is used;
"Service" refers to the services that we provide through our Site, including our Site itself;
"Site" refers to our website, www.communityally.com and its associated websites;
"User" refers to anyone who uses our Service, including general visitors to our Site;
"You" refers to you, the person who is governed by this Privacy Policy.
3. Information Collected
Identifying Information
We collect certain personal information from you when you sign up to our Service that can be used to identify you, such as your name, e-mail address, and any other information that we deem relevant for the purpose of providing you with our Service or which you provide to us voluntarily. The information we collect from you, to the extent that it is private, is disclosed only in accordance with our Terms of Service and/or this Privacy Policy.
Non-Identifying Information
Whenever you visit our Site, we may collect non-identifying information from you, such as your IP address, referring URL, browser, operating system, cookie information, and Internet Service Provider. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, this information alone cannot usually be used to identify you.
4. Use of Your Information
We may use your information to:
· Enhance or improve User experience, features, our Site, or our Service.
· Process transactions.
· Send e-mails about our Site or respond to inquiries.
· Send e-mails and updates about Community Ally, including notifications about amendments to legal documents such as this Privacy Policy and our Terms of Service.
· Perform research.
· Perform any other function that we believe in good faith is necessary to protect the security or proper functioning of our Site or Service.
5. Accessing, Editing, and Removing Your Information
Users may in some cases be able to review and edit the personal information they have provided to us by logging into your account on the Site and editing their account. Although most changes may occur immediately, information may still be stored in a web browser's cache. We take no responsibility for stored information in your cache, or in other devices that may store information, and disclaim all liability of such. In addition, we may, from time to time, retain residual information about you in our backup and/or database.
6. Cookies
We do not use cookies on the site to do any sort of tracking, but some third-party providers do, such as Stripe for payment. For this reason, it is necessary that you enable cookies in your browser, and you hereby acknowledge that we have informed you of our use of cookies and that you consent to our use of cookies in relation to your computer system.
7. Third Party Websites
Community Ally may post links to third party websites on its Site. These third party websites are not screened for privacy or security issues by Community Ally, and you release us from any liability for the conduct of these third party websites.
Please be aware that this Privacy Policy, and any other policies in place, in addition to any amendments, does not create rights enforceable by third parties or require disclosure of any personal information relating to members of the Service or Site. Community Ally bears no responsibility for the information collected or used by any advertiser or third party website. Please review the privacy policy and terms of service for each site you visit through third party links.
8. Third Party Access to Your Information
Although you are entering into an Agreement with Community Ally to disclose your information to us, we do use third party individuals and organizations to assist us, including contractors, web hosts, and others. We will always do our best to protect your information and avoid third-party providers that are untrustworthy.
Throughout the course of our provision of our Service to you, we may delegate our authority to collect, access, use, and disseminate your information. For example, our web host stores the information that you provide us, and we may hire outside contractors to perform maintenance or assist us in securing our website.
It is therefore necessary that you grant the third parties we may use in the course of our business the same rights that you afford us under this Privacy Policy. For this reason, you hereby agree that for every authorization which you grant to us in this Privacy Policy, you also grant to any third party that we may hire, contract, or otherwise retain the services of for the purpose of operating, maintaining, repairing, or otherwise improving or preserving our website or its underlying files or systems. You agree not to hold us liable for the actions of any of these third parties, even if we would normally be held vicariously liable for their actions, and that you must take legal action against them directly should they commit any tort or other actionable wrong against you.
Without limiting the generality of the foregoing, you authorize us to collect, share, store, exchange, and otherwise use your information in conjunction with:
9. Release of Your Information for Legal Purposes
This probably will not happen, but we need to comply with the law. At times it may become necessary or desirable to Community Ally, for legal purposes, to release your information in response to a request from a government agency or a private litigant. You agree that we may disclose your information to a third party where we believe, in good faith, that it is desirable to do so for the purposes of a civil action, criminal investigation, or other legal matter. In the event that we receive a subpoena affecting your privacy, we may elect to notify you to give you an opportunity to file a motion to quash the subpoena, or we may attempt to quash it ourselves, but we are not obligated to do either. We may also proactively report you, and release your information to, third parties where we believe that it is prudent to do so for legal reasons, such as our belief that you have engaged in fraudulent activities. You release us from any damages that may arise from or relate to the release of your information to a request from law enforcement agencies or private litigants.
10. Commercial and Non-Commercial Communications
By providing information to the Site that forms the basis of communications with you, such as contact information, you waive all rights to file complaints concerning unsolicited e-mails from Community Ally since, by providing such information, you agree to receive communications from us or anyone else covered under this Privacy Policy. However, you may unsubscribe from certain communications by notifying Community Ally that you no longer wish to receive solicitations or information and we will endeavor to remove you from the database.
11. Security Measures
We take certain measures to enhance the security of our Site and Service, including using SSL certificates. However, we make no representations as to the security or privacy of your information. It is in our interest to keep our website secure, but we recommend that you use anti-virus software, firewalls, and other precautions to protect yourself from security threats.
Last Modified: September 22, 2020


|
XBIS is an encoding format for XML documents that is fully convertible to and from text, with information set equivalence between the original document text and regenerated document text. It's intended for use in transmitting XML documents between application components, and is therefore designed for processing speed. The current Java language implementation offers several times the performance of SAX2 parsers working from text documents across a wide range of document types and sizes, and across JVMs tested, while also providing a substantial reduction in document size for most types of XML documents. XBIS is the successor to the XML Stream (XMLS) project which was developed in 2000-2001 to address the issue of processing overhead when sending XML documents between application components. The XMLS implementation was designed for use with document models, so it took a document model as input and generated a document model as output. Even though it demonstrated much better performance than alternatives such as Java serialization, or conversion to and from text, it offered no direct performance comparison to parsing XML text because of its document-model focus. The XBIS format is very similar to that used by XMLS, with only a few differences. The main difference from XMLS is in the internal details of the implementation, which has been restructured to provide better support for working with parser event streams as input and output. The current XBIS implementation uses a SAX2 event stream as input in order to generate the binary encoding of a document, and generates a SAX2 event stream as output when decoding the binary representation. Other parser APIs are likely to be supported in the future, along with direct conversion to and from document model representations of documents. Even though both XMLS and XBIS are designed around the needs of Java applications, the XBIS format is a general one that can be implemented in any general purpose programming language. The encoding format is based on long-established computing principles and has no known "intellectual property" encumberances. This format is made available to any interested parties free of restriction. The Java implementation code itself uses the commercial-friendly BSD license. The main features that distinguish XBIS from other techniques for representing XML documents are:
The current version of XBIS is designed to preserve the canonical form of text XML documents converted to and from XBIS. This represents somewhat of a change in direction from earlier versions which focused more on the XML Infoset. The reason for this change is that the Infoset is an abstraction with very little direct application, while canonicalization is a practical concern for many usages of XML (including XML Signature). This change of focus has had very little direct impact on the XBIS format and implementation. It has, however, eliminated the need to extend XBIS with support for some rarely used aspects of the Infoset. Check out the XBIS encoding format and some information on the performance tests on this site. The latest performance results are included in the article Improve XML transport performance, Part 2 at IBM developerWorks. |


Boris Johnson replaced by puppies thanks to new online tool
The Paw-ry Party Chrome extension is aimed at people who are ‘fed up of hearing about Boris, Brexit and now, an upcoming General Election’.

The Paw-ry Party is available to users of Google Chrome and will remove all pictures of the PM from websites or search engine results, replacing them with images of dogs randomly selected from PlaceDog.net.
It is designed for people who are “fed up of hearing about Boris, Brexit and now, an upcoming General Election”, according to Impression, the digital marketing agency that developed it in response to requests from its own staff.
“Research suggests that Brexit uncertainty and the political reporting around it has been negatively affecting mental health for many Brits,” said Impression founder Aaron Dicks. “Alongside this, multiple people have mentioned that having an office dog cheers them up, so this Chrome extension seemed like an obvious solution to supporting better mental health for our employees, and for anyone else who might need it.
“Regardless of your political views, we hope this app can provide some respite from the constant stream of Brexit-related headlines!”
The extension is available from the Chrome Web Store.


Every so often, someone on the newsgroup asks about something which doesn't exist in the framework, but which I think should. Sometimes, I'll write some code for them to plug the gap. Just occasionally, I'll tidy up the code, add XML documentation comments etc, and include it in my miscellaneous utility library. This library will, of course, grow over time.
Due to the nature of the library, some of the code may not have been particularly rigorously tested. You are strongly advised to give it a thorough testing before including it in any important code. Note: as of November 2006, I'm gradually adding unit tests, so the quality should improve significantly.
As of February 2008, MiscUtil is built with Visual Studio 2008 and uses features of C# 3.
However, with a bit of jiggery pokery we have it building in two configurations: one targeting
.NET 2.0, and one targeting .NET 3.5. Not all of MiscUtil works with .NET 2.0. Some of it can't,
because it requires significant features such as expression trees. Other parts work with a few
pieces of .NET 3.5 imported. In particular, in the .NET 2.0 build of MiscUtil we've included the
Func
and Action
delegates, ExtensionAttribute
for
extension methods, and the IGrouping
/ILookup
interfaces. This achieves
source level compatibility with .NET 3.5, so if you upgrade from .NET 2.0 to .NET 3.5 you should
be able to replace the MiscUtil assembly with the .NET 3.5 version, recompile and everything should
still work. You could possibly get away with still using the .NET 2.0 version, but I'd recommend against
it - you'll have system types with the same name defined in two different places, which is never
a good place to be.
Each release comes with 5 files: a source zip file, a .NET 2.0 assembly, a .NET 3.5 assembly, a .NET 2.0 zip file (assembly, XML, licence, readme) and the same for .NET 3.5.
MiscUtil is now version stamped with the Subversion revision which built it. This is in the
AssemblyFileVersion
attribute rather than the AssemblyVersion
attribute
- the latter will stay at <IP_ADDRESS> for the foreseeable future. All released versions will now remain
available, rather than only the latest one.
MiscUtil is now strongly named. The key is shipped with the source so you can easily rebuild it and keep the strong naming - this is for purposes of ease-of-use with other strongly named assemblies instead of non-repudiation. If anyone ever wants a version which I've signed with a properly secured key, I'm happy to do that - but I think the approach I've taken is the most pragmatic one for the moment.
Source
.NET 2.0 assembly
.NET 3.5 assembly
.NET 2.0 assembly + XML + readme + licence
.NET 3.5 assembly + XML + readme + licence
Changes:
Source
.NET 2.0 assembly
.NET 3.5 assembly
.NET 2.0 assembly + XML + readme + licence
.NET 3.5 assembly + XML + readme + licence
Changes:
ReverseLineReader
for reading lines from the end of a stream (usually a file)
Source
.NET 2.0 assembly
.NET 3.5 assembly
.NET 2.0 assembly + XML + readme + licence
.NET 3.5 assembly + XML + readme + licence
Changes:
ProjectionEqualityComparer<T>
to compare objects for equality via a projection.IComparer<T>.ThenBy
extension method to create a compound comparison.Range
DictionaryByType
: a mapping from a type to an instance of that type.
(See blog post.)NonNullable
- an experiment really, but could be handy.
(See blog post.)UnicodeRange
which allows you to easily find which unicode range a character is in, and get the range by name (as a property).
There's probably more scope here, but I haven't fully explored it yet.ProjectionEqualityComparer
- like ProjectionComparer
but for equality.
Source
.NET 2.0 assembly
.NET 3.5 assembly
.NET 2.0 assembly + XML + readme + licence
.NET 3.5 assembly + XML + readme + licence
Changes:
EndianBinaryReader.Read
error detection, spotted by Jamie RothfederProjectionComparer
(makes it easy to create comparers based on properties etc)
Source
.NET 2.0 assembly
.NET 3.5 assembly
.NET 2.0 assembly + XML + readme + licence
.NET 3.5 assembly + XML + readme + licence
Changes:
19.June(1976) + 8.Hours()
Range
class and associated iterator. Usage notes coming soon (ditto for the items below).ReverseComparer
to allow for easy order reversalLineReader
to iterate over arbitrary text sources - great for LINQ processing of text files.I'm still transitioning the previous history etc. Hopefully I'll get round to documenting more of the library too. Just bear in mind that I won't be updating the contents of the page below here...
The library currently contains the following items:
Comparison<T>
and Comparer<T>
System.String
, but with a
UTF-32 encoding (rather than UTF-16). This means surrogate pairs are counted as a single character.
Range
which is still a work in progress. Full SmartEnumerable
support.
StreamUtil
in the download. Sorry folks!
StreamUtil
.
IBufferManager
and implementations.
StaticRandom
and Vcdiff
.
As of November 2006, I am no longer easily able to provide a .NET 1.1 version of the miscellaneous utility library. I'm converting the source to use .NET 2.0 features where appropriate, and no future development will continue on the .NET 1.1 code. I can apply bug fixes if requested, but I expect most people are now using .NET 2.0 anyway. Please mail me if you need to continue using the utility in a critical manner and need fixes.
This software is licensed under the Apache licence. The specific licence for this library is available here and is also included in the zipped up versions of the library. Essentially, you're free to use any part of it in commercial software, provided you include a little acknowledgement. It may also, of course, be used in open source projects with a compatible licence.
These are the items I want to get round to at some stage. Please mail me if you think there's something else I should cover.
Back to the main page.


TinyWeb is a small HTTP 1.0 and 1.1 compliant web server, written in Java, and intended to be embedded in other Java applications, to do lightweight duty. It aims for smallness in code and memory usage, rather than ultra-efficiency, and it is released under an MIT-style (aka BSD-style) license.


this method requires the MFM ID to be avaialble to the client - anyone could read it if its coded in script
this button runs insecure local version that will only run if browser security is disabled.


American Pie
This movie is pretty much an updating of _Fast Times at Ridgemont High_. If you haven't seen _Fast Times_, the plot goes something like this: teenagers think about having and sometimes have sex. Just as today's world is faster paced than that of the dawn of the 80's, so is _American Pie_ faster than _Fast Times_. While the latter covers several months time, _American Pie_ covers less than one month. Still, it is a very busy month, packed with pathetic teenage behavior the likes of which I have never seen.  I can think of only two movies that have really got it right and been great movies: _Fast Times_ and _Dazed and Confused_. Still, if you take this movie for what it is, a pleasant sex comedy with an attractive young cast. I am happy to report that this movie contains some excellent nudity, although I am sad to say that it was of the designated nudist type (one actress was singled out to be naked). Something tells me that the sale of those little video cameras that hook up to your computer is about to go through the roof. By the way, while the movie bills itself as having outrageous humor, it falls short. The movie is generally funny and some scenes are down right hilarious, but, compared to _There's Something About Mary_, there is nothing outrageous. Don't let that discourage you. There is plenty of raunchy humor, just don't expect it to warp your fragile little mind.
Rating: Good
Ratings go like this: Abominable, Bad, Fair, Good, Very Good, Great, and Perfect. As you might guess, most movies are Fair to Good. Very few movies are either Abominable or Perfect. --
Jesse Kopelman -<EMAIL_ADDRESS>"It's not worth leaving, until you've worn out your welcome."
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


--- layout: default description: Template for team page --- {{ content }} {% for member in site.data.team %}


What is the Tech Radar?
The Zalando Tech Radar is a list of technologies, complemented by an assessment result, called ring
assignment. We use four rings with the following semantics:
- ADOPT — Technologies we have high confidence in to serve our purpose, also in large
scale. Technologies with a usage culture in our Azavea production environment, low risk and recommended to
be widely used.
- TRIAL — Technologies that we have seen work with success in project work to solve a
real problem; first serious usage experience that confirm benefits and can uncover limitations. TRIAL
technologies are slightly more risky; some engineers in our organization walked this path and will share
knowledge and experiences.
- ASSESS — Technologies that are promising and have clear potential value-add for us;
technologies worth to invest some research and prototyping efforts in to see if it has impact. ASSESS
technologies have higher risks; they are often brand new and highly unproven in our organisation. You will
find some engineers that have knowledge in the technology and promote it, you may even find teams that have
started a prototyping effort.
- HOLD — Technologies not recommended to be used for new projects. Technologies that
we think are not (yet) worth to (further) invest in. HOLD technologies should not be used for new projects,
but usually can be continued for existing projects.
|
What is the purpose?
The Tech Radar is a tool to inspire and support engineering teams at Azavea to pick the best technologies for
new projects; it provides a platform to share knowledge and experience in technologies, to reflect on
technology decisions and continuously evolve our technology landscape. Based on the pioneering work of ThoughtWorks, our Tech Radar sets out the
changes in technologies that are interesting in software development — changes that we think our
engineering teams should pay attention to and consider using in their projects.
How do we maintain it?
The Tech Radar is maintained in an ad hoc manner based on people's interest or prompting after 10% time
projects.
Currently there is no formal process for adding or changing the ring of a technology listed.
BTW, if you would like to create your own Tech Radar — Zalando has open sourced the code to generate this
visualization. We have forked it with enthusiasm and gratitude.
|


Significant changes in water quantity and quality are evident across the country. These changes, which are expected to persist, present an ongoing risk to coupled human and natural systems and related ecosystem services. Variable precipitation and rising temperature are intensifying droughts, increasing heavy downpours, and reducing snowpack. Reduced snow-to-rain ratios are leading to significant differences between the timing of water supply and demand. Groundwater depletion is exacerbating drought risk. Surface water quality is declining as water temperature increases and more frequent high-intensity rainfall events mobilize pollutants such as sediments and nutrients.
Deteriorating water infrastructure compounds the climate risk faced by society. Extreme precipitation events are projected to increase in a warming climate and may lead to more severe floods and greater risk of infrastructure failure in some regions. Infrastructure design, operation, financing principles, and regulatory standards typically do not account for a changing climate. Current risk management does not typically consider the impact of compound extremes (co-occurrence of multiple events) and the risk of cascading infrastructure failure.
Water management strategies designed in view of an evolving future we can only partially anticipate will help prepare the Nation for water- and climate-related risks of the future. Current water management and planning principles typically do not address risk that changes over time, leaving society exposed to more risk than anticipated. While there are examples of promising approaches to manage climate risk, the gap between research and implementation, especially in view of regulatory and institutional constraints, remains a challenge.


Class rex_article_action
Package: redaxo\structure\content
Located at redaxo/src/addons/structure/plugins/content/lib/article_action.php
Located at redaxo/src/addons/structure/plugins/content/lib/article_action.php
Methods summary
public
|
||
public
|
||
public
|
||
protected
|
||
protected
|
||
public
|
||
public
|
||
public
|
||
protected
|
||
protected
|
||
protected
|
||
protected
|
||
protected
|
||
protected
|
||
protected
|
||
protected
|
||
protected
|
||
protected
|
Constants summary
string |
PREVIEW
|
# 'preview' |
string |
PRESAVE
|
# 'presave' |
string |
POSTSAVE
|
# 'postsave' |


This is where you can learn about all the things you can do with MNE. It contains background information and tutorials for taking a deep-dive into the techniques that MNE-python covers. You’ll find practical information on how to use these methods with your data, and in many cases some high-level concepts underlying these methods.
There are also examples, which contain a short use-case to highlight MNE-functionality and provide inspiration for the many things you can do with this package. You can also find a gallery of these examples in the examples gallery.
See the links below for an introduction to MNE-python, or click one of the sections on this page to see more.
Getting started
MNE basics
More help
Getting your data into MNE
Working with public datasets
Background
Preprocessing your data
Tutorials
Background
Getting data to source space
Background
Sensor Space
Source Space
Decoding
Encoding
Examples
Examples


Comments
-
Greg Hurrell
Marking as ASSIGNED.
-
Greg Hurrell
I think that ways 1, 2 and 4 are the most important ones, but other ones to bear in mind include:
5. Searching by type code 6. Searching by version number 7. Searching by modification date 8. Searching by creation date 9. Asking user to specify (using a file dialog)
With all these criteria, I need to find a simple mechanism of indicating with the criteria should be ANDed or ORed together.
-
Greg Hurrell
Changing assignment to reflect my new email address.
https://wincent.com/a/news/archives/2006/05/change_of_email.php
Add a comment
Comments are now closed for this issue.


Sam Mercer is an artist and researcher living and working in London. He works as a producer of the Digital Programme at The Photographers' Gallery; and as an artist, primarily working with moving image and with artist group Common Study at Somerset House Studios.
Recent projects include Interruptions, a browser extension with Field Broadcast and Bad Vibes Club, Backs To The Future at Five Years project space, and Nobody Must Realise, a video commission exploring the Knaresborough Bed Race, Yorkshire. He completed an MRes Art: Moving Image course at Central St. Martins with a focus on artists' broadcasting and use of television formats. Between 2007 and 2013, he was a member of Nottingham artist group Tether, producing exhibitions, events and online projects.
gmail: sam dot mercer
twitter: smmrcr
github: smmrcr
public pgp key: 4DC355D4A9A20BB9


Erik Martinez
About Me
I'm a continuous, tireless seeker of all things tech. When I am not coding for work,I am coding to learn or just for fun 😎.
I'm a well-organised person, a problem solver, and I have eye for detail. I the outdoors, tech and binge watching TV series with my wife.
My skills are broad: from front end development to back end development. I enjoy each aspect, and love building sites from start to finish.
Technical Skills
I specialize in full stack development, with knowledge and experience in the following technologies:
HTML
CSS
Sass
JavaScript
TypeScript
Angular
Node.js
Vue.js
.NET
Microsoft SQL Server
MySQL
PostgreSQL
Experience
Some of the professional positions I've held.
Jan. 2019 – Dec. 2019
Web Front-End Developer Assistant
Hired as an assistant at Brigham Young University - Idaho with a focus on helping students understand basic web fundamentals.
- Tutored students individually and in small groups by reteaching and reviewing web fundamental concepts such as HTML5, CSS3, and JavaScript.
- Fostered an environment promoting the growth and development of technological skills thereby increasing overall student attendance and participation.
- Validated submitted code for proper structuring, security and compatibility with different browsers and devices.
Apr. 2019 – Jul. 2019
Jr. Software Developer
Hired at Brigham Young University - Idaho to create new software for the Computer Information Technology Department.
- Designed, developed, and maintained new and existing code ranging from client-side development using Angular 6+, TypeScript, HTML, and CSS to server-side code using C# and .NET Core.
- Collaborated with Department Chairman to create efficient tool for planning and scheduling classes for any given semester.
- Provided oversight to team, discussed project roadblocks to drive issue resolution and promote use of best practices.
| Project | Description |
|---|---|
| Open Weather Search | A weather site to search current conditions based off zip code using Open Weather's API. |
| Code Sampler | A repository of code samples created for helping fellow students taking CIT 230 - Web Front-End Development at Brigham Young University - Idaho. |
| The Mountain Spoke | A fictitious bicycle companies website that I designed and built using HTML5, CSS3, JavaScript, and jQuery. |
Contact
Let's get in touch.


The CSS variables for this feature are deprecated. Use the image-align (horiztonal alignment) and the image-valign (vertical alignment) attributes instead.
| Variable Name | Description |
|---|---|
| --accent-card-color | Sets the accent card text color, overriding the colors set by accent-color and dark attributes. |
| --accent-card-background-color | Sets the accent card background color, overriding the colors set by accent-color and dark attributes. |
| --accent-card-border-color | Sets the accent card border color, overriding the colors set by accent-color and dark attributes. |
| --accent-card-box-shadow | Sets the box shadow of the accent card, unless the card has the flat attribute. |
| --accent-card-heading-color | Sets the heading text color, overriding the colors set by accent-color and dark attributes. |
| --accent-card-footer-border-color | Sets the color of the border above the footer, overriding the colors set by accent-color and dark attributes. |
| --accent-card-padding | Sets padding inside the accent card. |
| Mixin Name | Scope |
|---|---|
| --accent-card | Applies to the entire accent card. |
| --accent-card-body | Applies to the body side of the card. |
| --accent-card-content | Applies to the content slot of the card body. |
| --accent-card-footer | Applies to the footer slot of the card body. |
| --accent-card-heading | Applies to the heading slot of the card body. |
| --accent-card-subheading | Applies to the subheading slot of the card body. |
| --accent-card-image | Applies to the accent card, regardless of orientation. |
| --accent-card-image-horizontal | Applies to the accent cards with the horizontal attribute. |
| --accent-card-image-vertical | Applies to the accent cards with the default vertical orientation. |


I love making things. My drive to code and develop was born out of love for creating and product development. My entrepreneurialism first surfaced in elementry school when I would buy pokimon cards in bulk from target, and then upsell specific cards to other students. Ever since then I've been coding games, search engines, iPhone apps and more.
When I'm not coding or studying, you can find me exploring trails, sprinting at the track, or playing ping pong with my brother.


Application Settings
Minimize to tray
Remember the size of the window
Show desktop notifications
Open Spotify links in the desktop application
Theme Settings
0.0.0
sdsd


Card title that wraps to a new line
This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.
Card title
This card has supporting text below as a natural lead-in to additional content.
Last updated 3 mins ago
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat.
Card title
This card has a regular title and short paragraphy of text below it.
Last updated 3 mins ago
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.
Card title
This is another card with title and supporting text below. This card has some additional content to make it slightly taller overall.
Last updated 3 mins ago
Card title
This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.
Card title
This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.
Card title
This is a longer card with supporting text below as a natural lead-in to additional content.
Card title
This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.


{@boolean renderSection1=true} {#include Common/insightsEmailBody} {#content-title} Vulnerability - Red Hat Enterprise Linux {/content-title} {#content-title-section1} CVE with the “Known Exploit” flag identified {/content-title-section1} {#content-body-section1}
Red Hat Insights has just identified a CVE with the Known Exploit label. Please review the details of this {action.events[0].payload.reported_cve}. The “Known Exploit” flag is added to any CVE that is determined to have been exploited in the “wild” by Red Hat Product Security. This flag does not reflect your environment.
Please review the details of this CVE and affected systems to determine risk and exposure for your organization. Red Hat recommends treating this issue with high priority to protect your organization.
{/content-body-section1} {/include}


| Origin: | France |
| Type: | CHIVAS REGAL |
| Sales Number: | 1200 |
| View: | 1000000 |
| Producer: | Chivas Brothers |
Success is always better if you have someone to share it with. This is as true today as it was when John and James Chivas began their venture together. The catalyst for James Chivas’ blending was his clientele’s requests for a smoother, richer tasting whisky. Chivas’ passion for blending has been keeping our clients very happy ever since. A new breed of entrepreneur is emerging, one that uses business ideas to improve lives. To support the movement, we created the Chivas Venture, a $1million fund to search and support the most promising social entrepreneurs. "The Chivas family motto set the tone for our brand ethos long before the brothers were born. By Virtue. Not By Force."
Encouragingly, wine lovers in the US are adopting a ‘less is better’ philosophy, with sales of wine over $10 a bottle on the rise. But while Americans may be spending more on wine, boxed wine brand Franzia remains the world’s best-selling wine brand with a 0.7% share of the global market, according to Euromonitor.
Global wine consumption remained stable last year at 242 million hectolitres. Both the US and China are driving the growth of the market – wine sales in the US are predicted to grow to $38.6 billion by 2020 and the country has retained its crown as the world’s largest wine consumer since 2011. Rosé is enjoying its moment in the sun in America right now, where sales of Provence pinks nearly doubled last year to 11.4 million litres.
Americans guzzled 31.8 million hectolitres of wine in 2016, while Chinese consumption rose by 7% to 17.3 million h/l, valued at US$15.5 billion. By 2020 China is expected to have leapfrogged the UK to become the second most valuable market for wine behind the US.
China has emerged as the one to watch in the wine market. Consumption is currently 60% homemade at the moment, though imports are on the rise. In terms of wine production however, Italy is out in front, having made 50.9 million hectolitres of wine last year.
France was close behind on 43.5m h/l, while Spain came in third, producing 39.3m h/l in 2016. Total wine production around the world dipped by 3% last year to 267 million hectolitres.
Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork. Williamsburg banh mi whatever gluten-free, carles pitchfork biodiesel fixie etsy retro mlkshk vice blog. Scenester cred you probably haven't heard of them, vinyl craft beer blog stumptown. Pitchfork sustainable tofu synth chambray yr.
Nowadays the lingerie industry is one of the most successful business spheres. We always stay in touch with the latest fashion tendencies - that is why our goods are so popular..
Nowadays the lingerie industry is one of the most successful business spheres. We always stay in touch with the latest fashion tendencies - that is why our goods are so popular..
Nowadays the lingerie industry is one of the most successful business spheres. We always stay in touch with the latest fashion tendencies - that is why our goods are so popular..
Nowadays the lingerie industry is one of the most successful business spheres. We always stay in touch with the latest fashion tendencies - that is why our goods are so popular..
Nowadays the lingerie industry is one of the most successful business spheres. We always stay in touch with the latest fashion tendencies - that is why our goods are so popular..
Nowadays the lingerie industry is one of the most successful business spheres. We always stay in touch with the latest fashion tendencies - that is why our goods are so popular..


[1] the room is small .
[2] the room was , clean , tiny , , small , ready , , comfortable , kept clean , small but clean , clean and the staff , and quiet , very nice , good , basic , ok , clean quiet , large , a decent size , clean the bathroom , fine , nice size , immaculate and , was comfortable .


Twitch Emote Resizer
Drag an image anywhere on this page. This will bring up a cropper you can use to crop your emote. After cropping, it will resize the image into the sizes Twitch requires for emotes and/or sub badges. You can right-click the resized images to download them as a PNG, or hit Download All to download them in a zip file.
All image processing is done client-side, no image data is ever sent anywhere else.Emotes
28x28:
56x56:
112x112:
Badges
18x18:
36x36:
72x72:


The data
property of a dataset can be passed in various formats. By default, that data
is parsed using the associated chart type and scales.
If the labels
property of the main data
property is used, it has to contain the same amount of elements as the dataset with the most values. These labels are used to label the index axis (default x axes). The values for the labels have to be provided in an array. The provides labels can be of the type string or number to be rendered correctly. In case you want multiline labels you can provide an array with each line as one entry in the array.
When the data
is an array of numbers, values from labels
array at the same index are used for the index axis (x
for vertical, y
for horizontal charts).
This is also the internal format used for parsed data. In this mode, parsing can be disabled by specifying parsing: false
at chart options or dataset. If parsing is disabled, data must be sorted and in the formats the associated chart type and scales use internally.
The values provided must be parsable by the associated scales or in the internal format of the associated scales. A common mistake would be to provide integers for the category
scale, which uses integers as an internal format, where each integer represents an index in the labels array. null
can be used for skipped values.
type: 'bar',
data: {
datasets: [{
data: [{id: 'Sales', nested: {value: 1500}}, {id: 'Purchases', nested: {value: 500}}]
}]
},
options: {
parsing: {
xAxisKey: 'id',
yAxisKey: 'nested.value'
}
}
In this mode, property name is used for index
scale and value for value
scale. For vertical charts, index scale is x
and value scale is y
.
| Name | Type | Description |
|---|---|---|
label |
string |
The label for the dataset which appears in the legend and tooltips. |
clip |
number |object |
How to clip relative to chartArea. Positive value allows overflow, negative value clips that many pixels inside chartArea. 0 = clip at chartArea. Clipping can also be configured per side: clip: {left: 5, top: false, right: -2, bottom: 0} |
order |
number |
The drawing order of dataset. Also affects order for stacking, tooltip and legend. |
stack |
string |
The ID of the group to which this dataset belongs to (when stacked, each group will be a separate stack). Defaults to dataset type . |
parsing |
boolean |object |
How to parse the dataset. The parsing can be disabled by specifying parsing: false at chart options or dataset. If parsing is disabled, data must be sorted and in the formats the associated chart type and scales use internally. |
hidden |
boolean |
Configure the visibility of the dataset. Using hidden: true will hide the dataset from being rendered in the Chart. |
const data = [
{ x: "Jan", net: 100, cogs: 50, gm: 50 },
{ x: "Feb", net: 120, cogs: 55, gm: 75 },
];
const cfg = {
type: "bar",
data: {
labels: ["Jan", "Feb"],
datasets: [
{
label: "Net sales",
data: data,
parsing: {
yAxisKey: "net",
},
},
{
label: "Cost of goods sold",
data: data,
parsing: {
yAxisKey: "cogs",
},
},
{
label: "Gross margin",
data: data,
parsing: {
yAxisKey: "gm",
},
},
],
},
};


Contact: Isaac Held, Peter Phillipps Reviewers:
Atmospheric driver for the spectral dynamics using forcing from the Held-Suarez benchmark.
This module provides a standard interface to the spectral dynamical core and interface to the Held Suarez physics.
fms_mod constants_mod transforms_mod time_manager_mod press_and_geopot_mod spectral_dynamics_mod tracer_type_mod hs_forcing_mod mpp_mod field_manager_mod tracer_manager_mod
use atmosphere_mod [,only: atmosphere_init, atmosphere, atmosphere_end ] Notes: Namelist interface &atmosphere_nml must exist in file input.nml.
There are no public defined data types.
call atmosphere_init (Time_init, Time, Time_step) input Time current time [time_type] Time_step time step [time_type] --------------------------------------------------------------------- call atmosphere_end No calling arguments --------------------------------------------------------------------- call atmosphere (Time) input Time current time [time_type]
There is no namelist
FATAL error messages are followed by an explanation in italics atmosphere module is not initialized subroutine atmosphere_init must be called prior to calling subroutine atmosphere


Welcome to Adornment
Posted by Someone on March 10, 2008 • Comments (64) • Full article
This is Adornment , a free, fully standards-compliant CSS template designed by FCT. This free template is released under a Creative Commons Attributions 2.5 license, so you’re pretty much free to do whatever you want with it (even use it commercially) provided you keep the links in the footer intact. Aside from that, have fun with it :)
Sed lacus. Donec lectus. Nullam pretium nibh ut turpis. Nam bibendum. In nulla tortor, elementum ipsum. Proin imperdiet est. Phasellus dapibus semper urna. Pellentesque ornare, orci in felis. Donec ut ante. In id eros. Suspendisse lacus turpis, cursus egestas at sem.


{{ .Description }}
Can’t find what you’re looking for? Feel free to send a support request.
This section covers some of the most frequent questions that users have while using the platform.