class Bundler::Source::Path
Constants
- DEFAULT_GLOB
Attributes
name[W]
options[R]
original_path[R]
path[R]
root_path[R]
version[RW]
Public Class Methods
from_lock(options)
click to toggle source
# File lib/bundler/source/path.rb, line 53 def self.from_lock(options) new(options.merge("path" => options.delete("remote"))) end
new(options)
click to toggle source
# File lib/bundler/source/path.rb, line 16 def initialize(options) @options = options.dup @glob = options["glob"] || DEFAULT_GLOB @allow_cached = false @allow_remote = false @root_path = options["root_path"] || root if options["path"] @path = Pathname.new(options["path"]) expanded_path = expand(@path) @path = if @path.relative? expanded_path.relative_path_from(root_path.expand_path) else expanded_path end end @name = options["name"] @version = options["version"] # Stores the original path. If at any point we move to the # cached directory, we still have the original path to copy from. @original_path = @path end
Public Instance Methods
app_cache_dirname()
click to toggle source
# File lib/bundler/source/path.rb, line 118 def app_cache_dirname name end
cache(spec, custom_path = nil)
click to toggle source
# File lib/bundler/source/path.rb, line 92 def cache(spec, custom_path = nil) app_cache_path = app_cache_path(custom_path) return unless Bundler.feature_flag.cache_all? return if expand(@original_path).to_s.index(root_path.to_s + "/") == 0 unless @original_path.exist? raise GemNotFound, "Can't cache gem #{version_message(spec)} because #{self} is missing!" end FileUtils.rm_rf(app_cache_path<EMAIL_ADDRESS>app_cache_path) FileUtils.touch(app_cache_path.join(".bundlecache")) end
cached!()
click to toggle source
# File lib/bundler/source/path.rb, line 48 def cached! @local_specs = nil @allow_cached = true end
eql?(other)
click to toggle source
# File lib/bundler/source/path.rb, line 72 def eql?(other) return unless other.class == self.class expanded_original_path == other.expanded_original_path && version == other.version end
Also aliased as: ==
expanded_original_path()
click to toggle source
# File lib/bundler/source/path.rb, line 126 def expanded_original_path @expanded_original_path ||= expand(original_path) end
hash()
click to toggle source
# File lib/bundler/source/path.rb, line 68 def hash [self.class, expanded_path, version].hash end
install(spec, options = {})
click to toggle source
# File lib/bundler/source/path.rb, line 84 def install(spec, options = {}) using_message = "Using #{version_message(spec)} from #{self}" using_message += " and installing its executables" unless spec.executables.empty? print_using_message using_message generate_bin(spec, :disable_extensions => true) nil # no post-install message end
local_specs(*)
click to toggle source
# File lib/bundler/source/path.rb, line 106 def local_specs(*) @local_specs ||= load_spec_files end
name()
click to toggle source
# File lib/bundler/source/path.rb, line 80 def name File.basename(expanded_path.to_s) end
remote!()
click to toggle source
# File lib/bundler/source/path.rb, line 43 def remote! @local_specs = nil @allow_remote = true end
root()
click to toggle source
# File lib/bundler/source/path.rb, line 122 def root Bundler.root end
specs()
click to toggle source
# File lib/bundler/source/path.rb, line 110 def specs if has_app_cache? @path = app_cache_path @expanded_path = nil # Invalidate end local_specs end
to_lock()
click to toggle source
# File lib/bundler/source/path.rb, line 57 def to_lock out = String.new("PATH\n") out << " remote: #{lockfile_path}\n" out << " glob: #{@glob}\n" unless @glob == DEFAULT_GLOB out << " specs:\n" end
to_s()
click to toggle source
# File lib/bundler/source/path.rb, line 64 def to_s "source at `#{@path}`" end
Private Instance Methods
app_cache_path(custom_path = nil)
click to toggle source
# File lib/bundler/source/path.rb, line 153 def app_cache_path(custom_path = nil) @app_cache_path ||= Bundler.app_cache(custom_path).join(app_cache_dirname) end
expand(somepath)
click to toggle source
# File lib/bundler/source/path.rb, line 136 def expand(somepath) if Bundler.current_ruby.jruby? # TODO: Unify when https://github.com/rubygems/bundler/issues/7598 fixed upstream and all supported jrubies include the fix somepath.expand_path(root_path).expand_path else somepath.expand_path(root_path) end rescue ArgumentError => e Bundler.ui.debug(e) raise PathError, "There was an error while trying to use the path " \ "`#{somepath}`.\nThe error message was: #{e.message}." end
expanded_path()
click to toggle source
# File lib/bundler/source/path.rb, line 132 def expanded_path @expanded_path ||= expand(path) end
generate_bin(spec, options = {})
click to toggle source
# File lib/bundler/source/path.rb, line 222 def generate_bin(spec, options = {}) gem_dir = Pathname.new(spec.full_gem_path) # Some gem authors put absolute paths in their gemspec # and we have to save them from themselves spec.files = spec.files.map do |p| next p unless p =~ /\A#{Pathname::SEPARATOR_PAT}/ next if File.directory?(p) begin Pathname.new(p).relative_path_from(gem_dir).to_s rescue ArgumentError p end end.compact installer = Path::Installer.new( spec, :env_shebang => false, :disable_extensions => options[:disable_extensions], :build_args => options[:build_args], :bundler_extension_cache_path => extension_cache_path(spec) ) installer.post_install rescue Gem::InvalidSpecificationException => e Bundler.ui.warn "\n#{spec.name} at #{spec.full_gem_path} did not have a valid gemspec.\n" \ "This prevents bundler from installing bins or native extensions, but " \ "that may not affect its functionality." if !spec.extensions.empty? && !spec.email.empty? Bundler.ui.warn "If you need to use this package without installing it from a gem " \ "repository, please contact #{spec.email} and ask them " \ "to modify their .gemspec so it can work with `gem build`." end Bundler.ui.warn "The validation message from RubyGems was:\n #{e.message}" end
has_app_cache?()
click to toggle source
# File lib/bundler/source/path.rb, line 157 def has_app_cache? SharedHelpers.in_bundle? && app_cache_path.exist? end
load_gemspec(file)
click to toggle source
# File lib/bundler/source/path.rb, line 161 def load_gemspec(file) return unless spec = Bundler.load_gemspec(file) Bundler.rubygems.set_installed_by_version(spec) spec end
load_spec_files()
click to toggle source
# File lib/bundler/source/path.rb, line 171 def load_spec_files index = Index.new if File.directory?(expanded_path) # We sort depth-first since `<<` will override the earlier-found specs Gem::Util.glob_files_in_dir(@glob, expanded_path).sort_by {|p| -p.split(File::SEPARATOR).size }.each do |file| next unless spec = load_gemspec(file) spec.source = self # Validation causes extension_dir to be calculated, which depends # on #source, so we validate here instead of load_gemspec validate_spec(spec) index << spec end if index.empty? && @name && @version index << Gem::Specification.new do |s| s.name = @name s.source = self s.version = Gem::Version.new(@version) s.platform = Gem::Platform::RUBY s.summary = "Fake gemspec for #{@name}" s.relative_loaded_from =<EMAIL_ADDRESS>s.authors = ["no one"] if expanded_path.join("bin").exist? executables = expanded_path.join("bin").children executables.reject! {|p| File.directory?(p) } s.executables = executables.map {|c| c.basename.to_s } end end end else message = String.new("The path `#{expanded_path}` ") message << if File.exist?(expanded_path) "is not a directory." else "does not exist." end raise PathError, message end index end
lockfile_path()
click to toggle source
# File lib/bundler/source/path.rb, line 148 def lockfile_path return relative_path(original_path) if original_path.absolute? expand(original_path).relative_path_from(root) end
relative_path(path = self.path)
click to toggle source
# File lib/bundler/source/path.rb, line 215 def relative_path(path = self.path) if path.to_s.start_with?(root_path.to_s) return path.relative_path_from(root_path) end path end
validate_spec(spec)
click to toggle source
# File lib/bundler/source/path.rb, line 167 def validate_spec(spec) Bundler.rubygems.validate(spec) end


{% extends 'base.html' %}
{% block content %}
{#
TODO: Much of the data on this page is hard-coded! Replace the name, photo,
variety, date planted, & id with the plant object's actual data, using what
is passed from the route's context.
HINT: For example, you can use `plant.name` or `plant['name']` for the
plant's name.
#}


>Class Name: TouchTreeGrid.view.CensusFreezeCont
>Horizontal scrolling with Freeze Column for large 600 data row with 28 data elements per row Tree Grid example. Default thumb configuration used for this example
>See help for Standard Grid #1 example for recommended configs
This example implements pinch event to allow user to resize grid to 3 pre-defined configurations (also press buttons to see same for non-mobile devices). Refer to TouchTreeGrid.view.CensusFreezeCont initialize() method for how to customize expandAll/collapseAll buttons to reduce used space when implemented for locked columns. Locked grid minWidth/maxWidth defined for this example and used to control how far thumb can be dragged.


4 July 2013 - The National Health and Family Planning Commission, China notified WHO of an additional retrospectively detected laboratory-confirmed case of human infection with avian influenza A(H7N9) virus.
The patient is a 15-year-old boy reported from Jiangsu who became ill on 25 April 2013 and hospitalized on 26 April 2013. He recovered and was discharged on 2 May 2013. The results of molecular diagnostics were positive for H3N2 seasonal influenza virus and H7N9 avian influenza virus. On 1 July, Jiangsu Provincial Health Department consulted national and provincial experts for diagnosis.
To date, WHO has been informed of a total of 133 laboratory-confirmed cases, including 43 deaths.
Authorities in affected locations continue to maintain surveillance, epidemiological investigations, close contact tracing, clinical management, laboratory testing and sharing of samples as well as prevention and control measures.
So far, there is no evidence of sustained human-to-human transmission.
Until the source of infection has been identified and controlled, it is expected that there will be further cases of human infection with the virus.
WHO does not advise special screening at points of entry with regard to this event, nor does it currently recommend any travel or trade restrictions.
WHO continues to work with Member States and international partners to monitor the situation. WHO will provide updates as the situation evolves.


{% extends 'base_error.html' %} {% block status_code %}404{% endblock %} {% block title %}Oops! You're lost.{% endblock %} {% block description %}The page you are looking for was not found.{% endblock %}


Card Stacking
问题描述 :
Bessie is playing a card game with her N-1 (2 ≤ N ≤ 100) cow friends using a deck with K (N ≤ K ≤ 100,000; K is a multiple of N) cards. The deck contains M = K/N "good" cards and K-M "bad" cards. Bessie is the dealer and, naturally, wants to deal herself all of the "good" cards. She loves winning.
Her friends suspect that she will cheat, though, so they devise a dealing system in an attempt to prevent Bessie from cheating. They tell her to deal as follows:
1. Start by dealing the card on the top of the deck to the cow to her right
2. Every time she deals a card, she must place the next P (1 ≤ P ≤ 10) cards on the bottom of the deck; and
3. Continue dealing in this manner to each player sequentially in a counterclockwise manner
Bessie, desperate to win, asks you to help her figure out where she should put the "good" cards so that she gets all of them. Notationally, the top card is card #1, next card is #2, and so on.
输入:
* Line 1: Three space-separated integers: N, K, and P
输出:
* Lines 1..M: Positions from top in ascending order in which Bessie should place "good" cards, such that when dealt, Bessie will obtain all good cards.
样例输入:
3 9 2
样例输出:
3 7 8
解题代码:
import java.util.Arrays; import java.util.Scanner; public class Main { int queue[], head, tail;//记录队列，队列头和尾 void enque(int x) { queue[tail] = x; tail++; if (tail == k) tail = 0; } int deque() { int ans = queue[head]; head++; if (head == k) head = 0; return ans; } int n, m, k, p; int res[]; Scanner scan = new Scanner(System.in); //队列初始化 void init() { n = scan.nextInt(); k = scan.nextInt(); p = scan.nextInt(); queue = new int[k]; m = k / n; res = new int[m]; for (int i = 1; i <= k; i++) enque(i); } void run() { init(); //模拟发牌过程 for (int x = 0; x< m; x++) for (int i = 1; i <= n; i++) { if (i == n) res[x] = deque(); else deque(); for (int j = 0; j < p; j++) enque(deque()); } Arrays.sort(res); for (int i = 0; i < m; i++) System.out.println(res[i]); } public static void main(String[] args) { new Main().run(); } } 解法二： import java.util.Scanner; import java.util.Queue; import java.util.LinkedList; import java.util.Arrays; public class Main { public static void main(String[] args) { Scanner scan=new Scanner(System.in); int n=scan.nextInt(); int k=scan.nextInt(); int p=scan.nextInt(); Queue< Integer> q=new LinkedList< Integer>(); //int b=q.peek(); //向队列添加元素 for(int i=0;i< k;i++) { q.offer(i+1); } int[] arr=new int[k/n]; int s=0; for(int w=1;w<=k/n;w++,s++) { for(int i=1;i< n;i++) { q.poll(); for(int j=1;j<=p;j++) { q.offer(q.peek());//offer(E e)将指定的元素插入此队列 q.poll(); } } arr[s]=q.peek(); q.poll(); for(int j=1;j<=p;j++) { q.offer(q.peek()); q.poll(); } } Arrays.sort(arr); for(int i=0;i< arr.length;i++) { System.out.println(arr[i]); } } }
helpful！！ mark
有意思，有难度
很强大啊，佩服
约瑟夫也用说这么长……很成熟的一个问题了，分治的方法解起来o(n)就可以了，有兴趣可以看看具体数学的第一章，关于约瑟夫问题推导出了一系列的结论，很漂亮
多谢提醒
总数为2n，遍历到第n个，就是中间的位置
整理的很好，学习了


 The Medals and Ribbons moved out of order, so that some counters count something else.
My first Medal is Sniper - but the ribbon it is pointing to is the MCOM Defender Ribbon which has moved from its original location.
That is the same for almost every medal there is ....
BrainFooLong
Administrator
BBLog 1.32 doesn't exist.
Which browser do you use, also a screenshot would help us.
BrainFooLong
Administrator
Maybe try to deactive BBLog and check if the error still exist, if yes, it's a DICE problem.
Also you should deactivate all user made bblog plugins if you use one.


This past summer I worked as a UX/UI Development intern at Dell-EMC. I assisted a team in developing and releasing the eCDM Skyline Application. Programmed in HTML, CSS, AngularJS, and NodeJS. I essentially made buttons work all summer. Want to know more? Check out my resume.
I am the current president of the Boston University Chapter of the National Society of Black Engineers. Our goal is to help "increase the number of culturally responsible Black Engineers who excel academically, succeed professionally and positively impact the community." Check out our chapter website for more info: bunsbe.org!
Outside of the Computer Science life, I'm just a guy that loves nature, likes to run, and hang out with my brothers. Feel free to email me at jmosby@bu.edu!


Chaperone is a lean, single-process "caretaker" for one or more processes
inside your container. It's designed to eliminate the need for heavier
solutions like
systemd or
supervisord, and yet
provide everything a small, focused container needs like log management,
dependency-based start-up and lots more.
It's on
github, of course, and there is full documentation
available if you visit
https://github.com/garywiz/chaperone.


It is a site that responds to user's behaviour and environment based on the screen size and resolution. Responsive web page will adjust the contents, size, position or appearance of elements to the device it is viewed on. Responsive sites use Media Queries, flexible grids, layouts and images.
Mobile first design is an approach based on assumptiuon that most of the website wisitors will be viewing the page on a smaller devices. This approach is based on creating websites for mobile screen-size first, the web site is later adjusted to larger screen size if the screen size is larger. It is important because it prevents mobiles from fetching large amounts of unneccessary data.
Frameworks are standardized sets of rules, concepts, and criteria for dealing with a common type of problem. There are two types of frameworks - backend and frontend. Backend frameworks deal with the logis and server-side. Frontend frameworks usually consist of a package made up of a structure of files and folders of standardized code (HTML, CSS, JS documents etc.)
Some of the well-known front-end frameworks are
Bootstrap
Foundation 3
Skeleton
| Pros and cons of frameworks | |
|---|---|
| Pros | Cons |
| Speeds up the mock-up process | Mixes content and presentation |
| Clean and tidy code | Unused code leftover |
| Solutions to common CSS problems | Slower learning curve |
| Browser compatibility | You do not learn to do it yourself |
| Learn good practices | |
| Learn good practices | |
| Having a single procedure to resolve common problems makes maintaining various projects more straightforward. | |
| Helpful in collaborative work | |
| Disadvantages |
Frameworks are tools that can be extremely helpful to some people but it does not meen that they are neccessary to build a website. They also leave certain about of unused code. Developer makes a decision whether to use a framework or not depending on the project purpose and the framework's pros and cons.
More about Frameworks (external)
Wireframe is a page schematic, a drawing or visual guide that represents the skeletal framework of a website. Wireframes show the website’s content, including interface elements and navigational elements, and how they work together.
We use wireframes to make the design and development process more clear and easy. It also allows to re-think the page's content, elements, purpose and behaviour.
It wasn't easy to implement a menu which collapses on a smaller screemn. Also, I am still learning the basics as clean html document, and skeleton divisions. Now I see that my page will not exactly look like on the drawings, however they were a great help and reference when developing the page.
#technical


Futurama DB
General Info Form
Info
Characters
Episodes
Cast
Questions
Synopsis
Years Aired
Submit Form
Display Data


Issues
Latest issue
August ‘14
The Day Your Website Went Down
It’s your worst nightmare. Your company has invested millions to promote a new product that is available for purchase online. Within minutes of your first TV spot going live, though, your website crashes from the spike in traffic.


Anne Shirley is a young orphan, bounced from one foster home to the next. With an overactive imagination, greenish-gray eyes, and bright-red hair,
Anne had to build a wall of strength and hope inside her to combat the cruelty of her foster families. All she ever wanted was a family to love
and a place to call home.
Green Gables
Anne is given the chance when she is sent to live at Green Gables, with brother and sister, Matthew and Marilla. The island is beautiful, with glistening
lakes and over-full blossom trees. Anne is overcome with happiness on seeing Matthew for the first time, his kind heart matching his tender nature.
Her happiness is furthered by seeing the picturesque Green Gables.
The Trial
Yet, Anne’s hopes are dashed when Marilla informs her that they expected a boy. “If I were beautiful, with nut-brown hair, would you keep me?”
Anne is about to be given to a woman intending to adopt a worker, when
Marilla has a sudden change of heart. Anne is told she mustn’t keep her hopes up as she will first be given a trial until a final decision is made.
First Test
Anne’s trial doesn’t start well as her first test comes in the case of Marilla’s friend, Mrs. Rachel Lynde, a
gossipy, over-opinionated woman. On Anne’s first meeting with her, Rachel Lynde
criticizes her looks, and…Anne’s red hair.
Apology
Marilla warns Anne to apologize or else her trial at Green Gables will be terminated. However, Anne’s pride and
anger is strong and she stubbornly refuses not to. Yet, a kind and secretive visit from Mathew prompts Anne to apologize,
extending her trial at Green Gables.
Dilemma
Another dilemma arises for Anne when Marilla finds her amethyst brooch missing. Angry and upset, she doesn’t believe Anne didn’t take the brooch.
When Anne makes up a confession, Marilla believing it to be true, is set to take her back.
However, Marilla is the one embarrassed when she finds the brooch on her shawl. Marilla apologizes and once again, Anne’s trial is sustained.
Bosom Friend
Anne is taken to a picnic, where she meets and makes her first real friend, Diana Barry, or as Anne calls her,
“my bosom friend.” Sent to school, Anne is desirous at acing all her classes. Yet, on her first day, Anne gets into trouble when a boy,
Gilbert Blythe tries to get her attention. Choosing to ignore him, he further seeks to get her attention by calling her, “Carrots.”  She is punished and dreads what Marilla’s decision on her trial at Green Gables will be. She is surprised and delighted when Marilla says, “Your trial at Green Gables is over. I’ve decided you can stay.”
Anne of Green Gables
Anne faces even more trials as her actions are judged by being orphaned. Her anger and pride cause her a lot of trouble, yet her goodness and sincerity
deliver joy to those around her. She strives for her hopes and dreams, proving that with perseverance, one
can accomplish anything. Read the full-length book to discover how the magic in Anne of Green Gables effects generations of audience, even today.


Raymond LeRoy "Mac" Kelliher
MADISON-Raymond L. Kelliher, age 78, of Madison, Wis., passed away on Monday, Nov. 18, 2019, surrounded by his family.
Ray is survived by his partner of 34 years, Patti Wheeler; children, Randy Kelliher, Steven (Melissa) Kelliher, Marvel (Brad) Browne, Mark (Johna) Kelliher and Lisa (Tom) Chase; five grandsons, Aydin, Mason, Nolan, James and Austin and seven granddaughters, Madison, Aspin, Jada, Amanda, Danica, Payton and Madilyn; brothers, Wayne (Mary) and David (Rita), brother-in-law, Bob (Debbie) Wheeler and sister-in-law, Marie Wheeler; five nephews and four nieces; and many other relatives and friends. He was preceded in death by his parents, Raymond and Margaret; brother, Larry and brother-in-law, Cliff Wheeler.
Ray was born on Aug. 20, 1941, in Madison. He attended Washington Grade School and Central High School as a graduate of the class of 1959. Ray was a multiple sports athlete and all conference player. Baseball was his favorite. Ray was an accomplished self-taught drummer and played in many local Dixieland jazz bands, including the River Boat Ramblers. He was a veteran of the U.S. Air Force. Ray enjoyed visiting with his friends and talking sports as he reminisced of his younger years as a player, official and coach. He enjoyed watching his children and grandchildren active in sports and school activities. Ray was very proud of his family and special relationships.
In keeping with Ray's wishes, a private family service will be held. A celebration of life will be held at a later date.
In lieu of flowers, memorials may be gifted in Ray's name to a favorite charity.
Online condolences may be made at www.gundersonfh.com.
Gunderson East
Funeral & Cremation Care
5203 Monona Drive
(608) 221-5420


| Index name | |
| Store size | |
| Shards | |
| Number of documents | |
| Maximum number of documents | |
| Total flush time | |
| Total merge time | |
| Number of documents to merge | |
| Size of documents to merge | |
| Total refresh time |
| Name | |
| Version | |
| Free bytes | |
| Max Bytes |
| Name | |
| Path | |
| Total bytes | |
| Free bytes | |
| Usable bytess |


UMKC Attendance & Feedback Portal
Menu
HOME
About
Contact
Login to our site
Enter username and password to log on:
Student Id
Email ID
Password
Enter OTP
Generate OTP
Verify OTP & Sign in!
Sign up now
Fill in the form below to get instant access:
Student ID
Email
Contact Number
Password
Retype Password
Sign me up!


QuickServiceResponse(parcel: Parcel)
Author
Rashad Zahr
This class is used with retrofit to return an object response from the web-service of this form


This simple planner will help you stay on task throughout your work day.
Check it out in the projects tab above!
Test your Hollywood trivia with this timed movie quiz.
Can you beat the clock?
Check it out on the projects tab above!
Find the perfect dog for your family with our collaborative pet-finder App
Project by Karen, Mac, Kygan
Check it out on the project tab above!

Check it out on the project tab above!
Keep your team's profiles up to date.
Check it out on the project tab above!
Never get stuck with css syntax again.
Check it out on the project tab above!
Experienced E-commerce professional with a background in Digital Merchandising, Systems Integrations, Full Stack Web Developement, Marketing, SEO, Analytics and Project Management. Looking to further my skills in a challenging and dynamic environment.


Hello, Friend!
Enter your details to get started.
Free slot finder allows you to seamlessly find the free slots of you team or club members so you can assign them tasks or plan meetings accordingly
And does the hard job for you
For group meetings
So duties can be discharged accordingly
And excludes people who are not available
So a different team for every year students
For a no junk experience


Help Center
Help Center
username
Logout
Dashboard
Charts
Moodle Charts
WebSubmission Charts
new Moodle Charts
new WebSubmission Charts
Tables
Simple Query
Data Query
Critical Questions
Setings
Bug report
Survey
Survey 1
Survey 2
About
About us
Privacy
Terms
Help
Help Center
Help Center
Here are some result related to


anylogger
debug
To see logging output, make sure to enable debug mode:
localStorage.setItem('debug', '*')


Chamindu R. Munasinghe
<EMAIL_ADDRESS>@chamindum
Python package index
A repository of around 51k packages
Package manager for Python
$ pip install django
$ pip install -r requirements.txt
Isolated working environments
Cannot run multiple python versions
All apps share same packages and versions
A command line tool to easily manage virtualenv's in development
"The Web framework for perfectionists with deadlines"
Disqus, Instagram, Pinterest, Bitbucket and many more
Create a simple "polls" app
$ django-admin.py startproject mysite
The app is already configured to use sqlite
$ python manage.py startapp polls
Add it to the INSTALLED_APPS
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
question = models.ForeignKey(Question)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
$ python manage.py makemigrations polls
$ python manage.py migrate
Basic CRUD operations with zero code
from django.contrib import admin
from polls.models import Question
admin.site.register(Question)
from django.contrib import admin
from polls.models import Question, Choice
class ChoiceInline(admin.StackedInline):
model = Choice
extra = 3
class QuestionAdmin(admin.ModelAdmin):
inlines = [ChoiceInline]
admin.site.register(Question, QuestionAdmin)
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
# polls/urls.py
from django.conf.urls import patterns, url
from polls import views
urlpatterns = patterns('',
url(r'^$', views.index, name='index'),
)
# urls.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = patterns('',
url(r'^polls/', include('polls.urls')),
url(r'^admin/', include(admin.site.urls)),
)
class IndexView(generic.ListView):
model = Question

{% for question in object_list %}

{{ question.question_text }}

{% empty %}

No polls

{% endfor %}

nginx and uWSGI recommended


Methods
(async) getAllBooks() → {Array}
fetch all books from API
Returns:
Array of objects
- Type
- Array
getShelf()
Fetches the current book from API and updates the state of the shelf accordingly. This function only handles the books that is fetched in the main page. For the rest of the books coming from search function, it sets none as a default shelf state
- Source:
handleSelectShelf()
Updates the shelf of the book depending on the selection of the user in dropdown select menu
- Source:
Returns:
all books from API
searchQuery(callback)
Debounce takes a function as a parameter and delays the execution of it for a predefined time. Since setState works asynchronously, we delay the searchQuery function for 2ms until the state of the query is changed by the state.
Parameters:
| Name | Type | Description |
|---|---|---|
callback |
function | function - searchQuery function to fetch books iaw query |
- Source:
updateQuery(input)
Update the state of the query in accordance with the user input Search books in API by typing in search field
Parameters:
| Name | Type | Description |
|---|---|---|
input |
event |
- Source:
Returns:
new state of books


WITNESS LIST
Finance-S/C on Medicaid
March 24, 2011 8:00 AM
Article II
ON:
Berger, Melitta LBB Staff (also providing written testimony) (Texas Legislative Budget
Board), Austin, TX
Ferrino, April Analyst (Legislative Budget Board), Austin, TX
Fox, Jennifer LBB Staff (also providing written testimony) (Texas Legislative Budget
Board), Austin, TX
Hadley, Bryan Analyst (Texas Legislative Budget Board), Austin, TX
Henderson, Tracy Chief Financial Officer (Texas Health and Human Services
Commission), Austin, TX
Johnson, Shaniqua LBB Staff (also providing written testimony) (Texas Legislative
Budget Board), Austin, TX
Lakey, David Commissioner (Texas Department of State Health Services), Austin, TX
Leo, Michael LBB Staff (also providing written testimony) (Texas Legislative Budget
Board), Austin, TX
McCulloch, Ben (Texas Legislative Budget Board), Austin, TX
Millard, Nancy LBB Staff (also providing written testimony) (Texas Legislative Budget
Board), Austin, TX
Parks, Ursula LBB Staff (also providing written testimony) (Texas Legislative Budget
Board), Austin, TX
Rymal, Greta Deputy Executive Commissioner (Texas Health and Human Services
Commission), Austin, TX
Sentilles, Emily LBB Staff (also providing written testimony) (Texas Legislative Budget
Board), Austin, TX
Taylor, Gordon Chief Financial Officer (Texas Department of Aging and Disability
Services), Austin, TX
Traylor, Chris Commissioner (Department of Aging and Disability Services), Austin, TX
Providing written testimony:
On:
Littlefield, Lindsay Analyst (Legislative Budget Board), Austin, TX
1


All Departments
Specials
Diary
Cereals and Grains
Fruits and vegetables
Chips
Machine Learning
Our most visited departments


crossorigin="anonymous">
Some bugs/issues are hard to resolve because the lack of easy ways to identify the specific procedures to reproduce them. They therefore cost disproportional time and manpower of the dev teams in the try and error efforts for reproducing and assuring that they are really solved after applying a fix.
When testing balance, one has to play the same part of a game repeatedly. This costs time and hurts team morale.
More over, game systems are often inter-woven, rendering the test preparation difficult.
EG
too many combinations of game characters/skills.
EG
each round of testing requires creating a new character, using some shortcut commands to develop the character, and repeating this process several times if the gameplay requires a team of characters to play together. It is even more difficult to test when requires multi-player coordination.


I am Abdullah Al Noman. I am from Bangladesh. I am a student and also a web developer. Currently I am doing my B.Sc in Civil Engineering. And I am trying to make a relationship between my two favourite professions (Civil and Web Development).
I am a web developer. I can design and develop web application with Python and Javascript.
I am Software Developer. I can develop computer softwares with Python.
I know Database Management with SQL. I can use MySQL and SQLite.
I am actually a professional civil engineer. I am doing my B.Sc in Civil Engineering at a University called UITS.


Introduction to JSON
JavaScript Object Notation
JSON is
Source https://www.json.org/
JSON is a text format that is completely programming language independent but uses conventions that are familiar to programmers of the C-family of languages, including C, C++, C#, Java, JavaScript, Perl, Python, and many others.
These properties make JSON an ideal data-interchange language.
Source https://www.json.org/
This is an example of a JSON object
{
"name": "Matt Damon",
"bornInYear": 1970,
"academyAwards": null,
"appearsIn": ["Ocean's 11", "Invictus", "The Martian"]
}
At first glance, a JSON object looks very similar to a Ruby Hash, but there are some major differences:
null
It's very crucial to understand, that JSON is just a text document.
With JSON itself we cannot do anything programmatically.
So, even if the syntax looks similar to a Ruby Hash, they're actually different.
Anyway, following slides describe some syntactic differences between a JSON object and a Ruby Hash.
|
JSON |
Ruby |
|---|---|
|
|
|
JSON |
Ruby |
|---|---|
|
|
nullvs
nil
|
JSON |
Ruby |
|---|---|
|
|
nullin JSON and
nilin Ruby.
Using these two structures we can describe any kind of data.
Source https://www.json.org/
|
JSON |
Ruby |
|---|---|
|
|
caretakers) or Objects (see
location) again.
|
JSON |
Ruby |
|---|---|
|
|
|
JSON |
Ruby |
|---|---|
|
|
What questions do you have?


Layout
Layouts in SXA are built using grid systems like Bootstrap, Foundation or our Responsive Web Design version of 960 Grid System. The platform ships with just one single Sitecore layout but allows you to build your custom designs from it.
Let's get started!
You create a new page in Sitecore Experience Accelerator and... bam, it looks like this one on the left. There is nothing in there except for three placeholders: header, main and footer. How can you build the layout of your dreams from here?
Keep reading below.
Introducing, the grid system
SXA supports grid layouts, which means we divide the page to equal columns in such a way that constitutes a grid. By using a grid system, we achieve visual consistency as the elements are always vertically aligned to one of the columns. It also simplifies usage of column splitters, because column width is always a multiplication of single grid columns.
The platform is shipped with 12 column grids that can be configured as either flex (taking full page width) or boxed (960 pixels wide). Now you know what the numbers from 1 to 12 in component properties mean. Should you need either finer column granularity or different page width or breakpoints, you can always add a new theme that supports your custom grid configuration.
Let's have a look at different column configurations:
6 columns
6 columns
4 columns
4 columns
4 columns
3 columns
3 columns
3 columns
3 columns
4 columns
8 columns
Adding structure to your page
If the three initial placeholders are not enough, you should start your design session with adding some page structure components onto your page. Most often you will find yourself adding the Container component which adds a DIV element and a placeholder inside. Using the styling button you are able to adjust the grid settings such a column sizes and additional styles. In case you want to add more consistent structure you can also add a column splitter or row splitter.
Component sizes
Where do you define the sizes that the components need to have? Every component is designed to fit into any number of columns, which make the page very flexible. You do not have to worry about the components' width as they will simply adjust to a box where they are put. And if you change your mind and decide to move them somewhere else, their size will be adjusted again to meet the new situation.
Additionally, components can have their width configured to not take the full span of the placeholder but instead, every placeholder is treated again like it had 12 columns and components can take e.g. 50% (6 columns), 25% (3 columns) and so on...
Go responsive, support mobile
We've just said that SXA is using 12 column grids, but this is not the whole truth. It actually applies principles of Responsive Web Design (RWD) in order to support a wide range of devices with different screen resolutions. Fluid grid applied here is proportional and columns are sized in relative percentages rather than absolute pixels. Breakpoints are another mechanism used by vanilla SXA. Once you reach certain width, columns start falling to next rows, and eventually everything ends in a single column.
What does this mean for you? Start by designing with desktop devices and work as if you were working with 12 columns fixed grid. The layout you create will handle mobile devices out of the box, sometimes with some help from a couple of additional lines of CSS code. But in case you want to provide a totally different experience to your mobile users, go ahead, switch to a mobile device in Sitecore and design a brand new SXA layout.


On September 2017, the 19. German Bundestag has been elected. As of this writing, the parties are still busy sorting out whether they want to part of the government, with whom, and maybe whether they even want to form a government at all. This post is about providing the data in machine friendly form, and in English language.
All data presented in this post regarding this (and previous) elections are published by the Bundeswahlleiter. The data may be used without restriction as long as it is credited duely.
Let me be clear that the all data presented here were drawn from this source. So, for each dataset the copyright notice is:
The raw data is published by the Bundeswahlleiter 2017 (c) Der Bundeswahlleiter, Wiesbaden 2017 https://www.bundeswahlleiter.de/info/impressum.html
The contribution by me is only to render the data more machine friendly, as the presented CSVs have multiple header lines, German Umlaute, non-UTF8 coding, and some other minor hickups.
Of course, data itself has not been touched by me; I hae only changed some wordings and the structure of the dataset in order to render analysis more comfortable. Analysts can easily access the raw data and check the correctness.
Setup:
library(tidyverse)
Package prada
contains the data
Maybe the easiest way is to use my package prada
, which can be downloaded/installed from Github:
Install the package once:
devtools::install_github("sebastiansauer/prada")
library(prada)
There you will find the relevant data.
Parties running the election
parties_de
- a dataframe of the 43 parties than ran for the election
data(parties_de)
glimpse(parties_de)
#> Observations: 43
#> Variables: 2
#> $ party_short <chr> "CDU", "SPD", "Linke", "Gruene", "CSU", "FDP", "Af...
#> $ party_long <chr> "Christlich Demokratische Union Deutschlands", "So...
elec_results
- a dataframe of the results (first/second) votes of the parties plus some more data
data(elec_results)
head(elec_results)
#> # A tibble: 6 x 191
#> district_nr district_name parent_district_nr
#> <int> <chr> <int>
#> 1 1 Flensburg – Schleswig 1
#> 2 2 Nordfriesland – Dithmarschen Nord 1
#> 3 3 Steinburg – Dithmarschen Süd 1
#> 4 4 Rendsburg-Eckernförde 1
#> 5 5 Kiel 1
#> 6 6 Plön – Neumünster 1
#> # ... with 188 more variables: registered_voters_1 <int>,
#> # registered_voters_2 <int>, registered_voters_3 <int>,
#> # registered_voters_4 <int>, votes_1 <dbl>, votes_2 <int>,
#> # votes_3 <dbl>, votes_4 <int>, votes_unvalid_1 <int>,
#> # votes_unvalid_2 <int>, votes_unvalid_3 <dbl>, votes_unvalid_4 <int>,
#> # votes_valid_1 <int>, votes_valid_2 <int>, votes_valid_3 <int>,
#> # votes_valid_4 <int>, CDU_1 <int>, CDU_2 <chr>, CDU_3 <int>,
#> # CDU_4 <dbl>, SPD_1 <int>, SPD_2 <int>, SPD_3 <int>, SPD_4 <int>,
#> # Linke_1 <int>, Linke_2 <int>, Linke_3 <int>, Linke_4 <int>,
#> # Gruene_1 <int>, Gruene_2 <int>, Gruene_3 <dbl>, Gruene_4 <dbl>,
#> # CSU_1 <int>, CSU_2 <int>, CSU_3 <int>, CSU_4 <int>, FDP_1 <int>,
#> # FDP_2 <int>, FDP_3 <int>, FDP_4 <int>, AfD_1 <int>, AfD_2 <int>,
#> # AfD_3 <dbl>, AfD_4 <dbl>, Piraten_1 <int>, Piraten_2 <int>,
#> # Piraten_3 <int>, Piraten_4 <dbl>, NPD_1 <int>, NPD_2 <int>,
#> # NPD_3 <int>, NPD_4 <int>, FW_1 <int>, FW_2 <int>, FW_3 <int>,
#> # FW_4 <int>, Mensch_1 <int>, Mensch_2 <int>, Mensch_3 <int>,
#> # Mensch_4 <dbl>, ÖDP_1 <dbl>, ÖDP_2 <int>, ÖDP_3 <int>, ÖDP_4 <int>,
#> # Arbeit_1 <int>, Arbeit_2 <int>, Arbeit_3 <int>, Arbeit_4 <int>,
#> # Bayern_1 <int>, Bayern_2 <int>, Bayern_3 <int>, Bayern_4 <int>,
#> # Volk_1 <int>, Volk_2 <int>, Volk_3 <int>, Volk_4 <int>,
#> # Vernunft_1 <int>, Vernunft_2 <int>, Vernunft_3 <int>,
#> # Vernunft_4 <int>, MLPD_1 <int>, MLPD_2 <int>, MLPD_3 <int>,
#> # MLPD_4 <int>, Soli_1 <int>, Soli_2 <int>, Soli_3 <int>, Soli_4 <int>,
#> # Sozialist_1 <int>, Sozialist_2 <chr>, Sozialist_3 <int>,
#> # Sozialist_4 <int>, Rechte_1 <int>, Rechte_2 <chr>, Rechte_3 <int>,
#> # Rechte_4 <int>, ADD_1 <chr>, ADD_2 <chr>, ADD_3 <int>, ADD_4 <chr>,
#> # ...
Note that this data set is structured as follows: For each column AFTER ‘parent_district_nr’, ie., from column 4 onward, 4 columns build one bundle. In each bundle, column 1 refers to the Erststimme in the present election; column 2 to the Erststimme in the previous election. Column 3 refers to the Zweitstimme of the present election, and column 4 to the Zweitstimme of the previous election. For example, ‘CDU_3’ refers to the number of Zweitstimmen in the present (2017) elections.
That is:
- “
_1
” - first vote in present election - “
_2
” - first vote in previous election - “
_3
” - second vote in present election - “
_4
” - second vote in previous election
Please also check the package documentation for additional information.
Geometric shapes of the electoroal districts (Wahlkreise)
wahlkreise_shp
- a dataframe with ID of the Wahlkreise (electoral districts) plus their geometric shape for plotting
data(wahlkreise_shp)
glimpse(wahlkreise_shp)
#> Observations: 299
#> Variables: 5
#> $ WKR_NR <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1...
#> $ LAND_NR <fctr> 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 13, 13,...
#> $ LAND_NAME <fctr> Schleswig-Holstein, Schleswig-Holstein, Schleswig-H...
#> $ WKR_NAME <fctr> Flensburg – Schleswig, Nordfriesland – Dithmarschen...
#> $ geometry <S3: sfc_MULTIPOLYGON> [543474.9, 547528.6, 547598.2, 5479...
See this post for a usecase of the shapefile data.
Socioeconomic data of Germany
socec
- a dataframe with socio economic information (eg., unemployment rate) for each wahlkreis.
data(socec)
head(socec)
#> # A tibble: 6 x 51
#> V1 V2 V3 V4 V5
#> <chr> <int> <chr> <int> <dbl>
#> 1 Schleswig-Holstein 1 Flensburg – Schleswig 130 2128.1
#> 2 Schleswig-Holstein 2 Nordfriesland – Dithmarschen Nord 197 2777.0
#> 3 Schleswig-Holstein 3 Steinburg – Dithmarschen Süd 178 2000.5
#> 4 Schleswig-Holstein 4 Rendsburg-Eckernförde 163 2164.8
#> 5 Schleswig-Holstein 5 Kiel 3 143.0
#> 6 Schleswig-Holstein 6 Plön – Neumünster 92 1302.0
#> # ... with 46 more variables: V6 <dbl>, V7 <dbl>, V8 <dbl>, V9 <dbl>,
#> # V10 <dbl>, V11 <dbl>, V12 <dbl>, V13 <dbl>, V14 <dbl>, V15 <dbl>,
#> # V16 <dbl>, V17 <dbl>, V18 <dbl>, V19 <dbl>, V20 <dbl>, V21 <dbl>,
#> # V22 <dbl>, V23 <dbl>, V24 <dbl>, V25 <dbl>, V26 <int>, V27 <int>,
#> # V28 <dbl>, V29 <chr>, V30 <dbl>, V31 <dbl>, V32 <dbl>, V33 <dbl>,
#> # V34 <dbl>, V35 <dbl>, V36 <dbl>, V37 <dbl>, V38 <dbl>, V39 <chr>,
#> # V40 <chr>, V41 <chr>, V42 <chr>, V43 <dbl>, V44 <dbl>, V45 <dbl>,
#> # V46 <dbl>, V47 <dbl>, V48 <dbl>, V49 <dbl>, V50 <dbl>, V51 <dbl>
The names of the indicators can be accessed via the dictionary socec_dict
or via the documentation of socec
. In addition, of course, the Bundeswahlleiter provides this information.
data(socec_dict)
glimpse(socec_dict)
Use case
You can use the data eg., for determining association of right-wing (AfD) results with unemployment rate per electoral district - see here for an example.
Of course those data can easily be saved as csv:
write_csv(elec_results, path = "elec_results.csv")
write_csv(socec, path = "socec.csv")
write_csv(parties_de, path = "parties_de.csv")
write_csv(wahlkreise_shp, path = "wahlkreise_shp.csv")
Watch our for wahlkreise_shp
though as it contains a list column.
Data at osf.io
The Open Science Framework is a great place to store data openly. You can easily access the data from that source, too. Look at this repository.
Data are provided in csv and RData form.
Concluding
It was quite fun to me to play around with the data, and I think quite some valuable insights can be inferred. Of course, electoral data has a unique value as it features the most important action of a democracy.


About the CSD
The CSD's in germany do not take place on the historical date, June 28th, but on the weekends from June to August. The event has to be registered as a demonstration and it is planned, organized and carried out by individuals and social clubs contributing voluntarily.
The CSDs are also regarded as a political demonstration with a policy-related motto, usually shown up in the form of demonstration parades and a subsequent rally. Often the rally is supported by artists performing on stage.
In addition to the political message of the CSD is celebrated. This celebration of one's own lifestyle is based on the origins of the CSD: The participants often demonstratively demonstrate that they are proud of themselves, their lives and their sexual identity.
History
The CSD recalls the first known uprising of homosexuals and other sexual minorities against police arbitrariness on New York's Christopher Street in the Greenwich Village neighborhood: in the early hours of June 28, 1969, the so-called Stonewall Uprising took place in the Stonewall Inn bar.
 It came in the episode to days of street battles between homosexuals and the police. To commemorate the first anniversary of the uprising, the Christopher Street Liberation Day Committee was established.
Since then, in New York on the last Saturday of June, the Christopher Street Liberation Day, a street parade commemorates this event. It has become an international tradition to hold a demonstration for the rights of gays and lesbians in the summer. In Berlin, Cologne and other major German cities, these demonstrations are held each year as Christopher Street Day or "CSD" for short.
In Germany, the first CSDs took place under this name in 1979, located in Berlin and Bremen. Larger lesbian and gay demonstrations have been around since 1972 (the first in the Federal Republic of Germany on April 29, 1972 in Münster).
Location
Contact
Do you like to register a stand for the event?
Sponsors
We would like to thank our sponsors.


*** User 2017-05-05 19:48:52.401 ***
19:48:52.401 [info] Disabling blocking sync...
*** User 2017-05-05 19:48:52.406 ***
19:48:52.406 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-1@MacBook-Pro-de-Anne-France'
*** User 2017-05-05 19:48:53.945 ***
19:48:53.945 [info] Enabling membership...
*** User 2017-05-05 19:48:53.946 ***
19:48:53.946 [info] Disabling blocking sync...
*** User 2017-05-05 19:48:53.951 ***
19:48:53.951 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-2@MacBook-Pro-de-Anne-France'
*** User 2017-05-05 19:48:55.480 ***
19:48:55.480 [info] Enabling membership...
*** User 2017-05-05 19:48:55.482 ***
19:48:55.482 [info] Disabling blocking sync...
*** User 2017-05-05 19:48:55.487 ***
19:48:55.487 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-3@MacBook-Pro-de-Anne-France'
*** User 2017-05-05 19:48:55.737 ***
Joining node: 'node-3@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 53734
*** User 2017-05-05 19:48:55.737 ***
Joining issued: 'node-3@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 53734
*** User 2017-05-05 19:48:55.738 ***
Joining node: 'node-2@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 53717
*** User 2017-05-05 19:48:55.738 ***
Joining issued: 'node-2@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 53717
*** User 2017-05-05 19:48:55.739 ***
Joining node: 'node-1@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 53705
*** User 2017-05-05 19:48:55.740 ***
Joining issued: 'node-1@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 53705
*** User 2017-05-05 19:48:55.800 ***
Waiting for join to complete with manager: partisan_default_peer_service_manager
*** User 2017-05-05 19:48:55.801 ***
Finished.
*** CT 2017-05-05 19:48:55.802 *** COVER INFO
Adding nodes to cover test: ['runner@MacBook-Pro-de-Anne-France']
*** CT 2017-05-05 19:48:55.810 *** COVER INFO
Successfully added nodes to cover test: []
*** User 2017-05-05 19:48:55.830 ***
Case finished: dynamic_ivar_test
*** User 2017-05-05 19:49:02.877 ***
19:49:02.876 [info] Application lasp exited with reason: stopped
*** User 2017-05-05 19:49:02.877 ***
19:49:02.877 [info] Application partisan exited with reason: stopped
=== Ended at 2017-05-05 19:49:02
=== successfully completed test case
=== Returned value: ok
Test run history
| Top level test index


Home
About Us
Locations
Sales
Contact Us
Order
First name:
Last name:
Pick Up Location:
1st and Pike
SeaTac Airport
Seattle Center
Capitol Hill
Alki
Cookies toppings (Check what does apply):
Chocolate Chip
With Sugar
Biscotti
Quantity:


Surf's down
Cape Byron at sunset
Found some good photos of Byron on the web - it's very handy having free access here at the hostel. Geek stuff aside, I went out for my first surf the other day, down at Little Wategos beach, just by the cape. I borrowed the Ad-man's long board, which is about 7' 4", and went out with Tim, who showed me the ropes.  There wasn't much surf up, and I spent most of the time just trying to stay afloat, and doing my arms in paddling from one drenching to the next. I caught a couple of waves in, and managed to get up on my knees once, for about 1.5 seconds (that's a generous estimate). But, it was wicked and I'm definately up for some more.
Byron Bay from the south
I think my sis is coming back down here in a week or so - she's got a job here if she wants it at the hostel, driving the bus to pick up backpackers. Yeah right, crashing the bus into backpackers causing them horrendous multiple injuries, more like.
***** Still haven't drunk any booze! Incredible! *****
Back to the main page


The following is a list of compile dependencies for this project. These dependencies are required to compile and run the application:
| GroupId | ArtifactId | Version | Type | License |
|---|---|---|---|---|
| com.google.guava | guava | 17.0 | jar | The Apache Software License, Version 2.0 |
| com.netflix.rxjava | rxjava-core | 0.20.0 | jar | The Apache Software License, Version 2.0 |
| org.slf4j | slf4j-api | 1.7.7 | jar | MIT License |
The following is a list of test dependencies for this project. These dependencies are only required to compile and run unit tests for the application:
| GroupId | ArtifactId | Version | Type | License |
|---|---|---|---|---|
| junit | junit | 4.11 | jar | Common Public License Version 1.0 |
| org.mockito | mockito-core | 1.9.5 | jar | The MIT License |
| org.slf4j | slf4j-log4j12 | 1.7.7 | jar | MIT License |
The following is a list of transitive dependencies for this project. Transitive dependencies are the dependencies of the project dependencies.
The following is a list of test dependencies for this project. These dependencies are only required to compile and run unit tests for the application:
| GroupId | ArtifactId | Version | Type | License |
|---|---|---|---|---|
| log4j | log4j | 1.2.17 | jar | The Apache Software License, Version 2.0 |
| org.hamcrest | hamcrest-core | 1.3 | jar | New BSD License |
| org.objenesis | objenesis | 1.0 | jar | MIT License |


Hello {{repName}}, Unfortunately, your request for {{reqEventName}} has been rejected because {{reqReason}}. Please make more requests however at AlumniRequestGW. - Alumni Request Portal Team


--- layout: post title: 'Alt.net London Beers #6' date: '2009-02-13T11:04:00.001Z' tags: [altnetbeers] modified_time: '2009-02-13T11:04:51.758Z' blogger_id: tag:blogger.com,1999:blog-4015568221071268916.post-5752663106561286836 comments: true blogger_orig_url: http://serialseb.blogspot.com/2009/02/altnet-london-beers-6.html ---
We’re going back to the original schedule of last Tuesday of the month. Here’s the excerpt from the ning site (on which you should go and register right now to let us know how many of you will be coming).
This month, TeQUILA\UK host us and ThoughtWorks will feed us! That means free pizza, thanks guys!
An hour-long timeboxed openconf-style session where the one subject being discussed will be chosen by the attendants.
The event is from 6pm and we start at 7:30pm sharp (ish).
Hope to see you there.


| hierarchy: |
WEB-INF.cftags.component pptutils.com.pptutils |
| path: | C:\inetpub\wwwroot\pptutils\com\pptutils.cfc |
| properties: | |
| methods: | convertPowerPoint, extractText, fixNull*, getImageType*, getLib*, getPPTMetaData, getTextAlign*, init, readPowerPoint |
| convertPowerPoint |
|---|
public
array
convertPowerPoint
(
required
pathToPPT
)
convertPowerPoint method is depracated. use readPowerPoint() instead. Output: suppressed Parameters: pathToPPT: any, required, pathToPPT - the full path to the powerpoint to convert |
| extractText |
public
array
extractText
(
required
pathToPPT
)
i extract text from a PPT by means of an array of structs containing an array element for each slide in the PowerPoint Output: suppressed Parameters: pathToPPT: any, required, pathToPPT - the full path to the powerpoint to convert |
| fixNull* |
private
fixNull
(
valueToFix=""
)
internal private method to handle java nulls appropriately Output: suppressed Parameters: valueToFix: any, optional, valueToFix |
| getImageType* |
private
string
getImageType
(
picType=""
)
i interpret the static constant pic type into a string Output: suppressed Parameters: picType: any, optional, picType |
| getLib* |
private
query
getLib
(
)
i read the lib dir and return the files Output: suppressed |
| getPPTMetaData |
public
struct
getPPTMetaData
(
required
pathToPPT
)
i extract metadata (author, saveinfo, etc) from a PPT Output: suppressed Parameters: pathToPPT: any, required, pathToPPT - the full path to the powerpoint to get the metadata for |
| getTextAlign* |
private
getTextAlign
(
textAlign=""
)
i interpret the text alignment from the static type into a descriptive string Output: suppressed Parameters: textAlign: any, optional, textAlign - the static value returned by java |
| init |
public
pptutils
init
(
)
Output: suppressed |
| readPowerPoint |
public
array
readPowerPoint
(
required
pathToPPT
)
i read a powerpoint and return an array. each array element represents a slide in the slideshow. Output: suppressed Parameters: pathToPPT: any, required, pathToPPT - the full path to the powerpoint to convert |


How to turn banner notifications on and off on your iPhone for any individual app
by Meira Gebel, Business Insider US- Banner notifications on your iPhone are alerts that drop down from the top of your screen whenever you receive a notification from an app.
- You can enable or disable Banner notifications on an app-by-app basis through your iPhone’s Settings app.
- Visit Business Insider’s homepage for more stories.
When your iPhone is unlocked, most of the notifications you’ll receive come in the form of banners – messages that appear at the top of your screen.
Banner notifications are used for all kinds of built-in apps on the iPhone, like Messages and FaceTime, but also through third-party apps, like WhatsApp and Gmail (to name a few). Nearly every app that uses notifications will send them using banners.
To disable or enable banner notifications for specific apps, first head to the iPhone’s Settings app.
Check out the products mentioned in this article:
iPhone 11 (From $699.99 at Best Buy)
How to enable or disable banner notifications on an iPhone using Settings
1. Launch the Settings app from your iPhone’s home screen.
2. Select “Notifications.”
3. In the list of applications below, scroll to find the specific app you wish to enable or disable banner notifications for, and tap it.
4. Make sure that the “Allow Notifications” switch at the top is switched on. Once the slider icon is green, notifications will then be allowed.
5. Under the “Alerts” submenu, the Banners alert is a default setting. If you want banners, tap the circle under it so it’s checked off. If you don’t want banners, tap it so it’s empty.
6. In “Banner Style,” select Temporary or Persistent – a persistent banner will stay on the screen until you tap it or dismiss it, while a temporary banner will remain for a few seconds then disappear. Make a selection, then go back to the app’s notification page by selecting the option in the upper left-hand corner.
7. Back on the app’s notification settings page, under the sub-menu “Options,” select “Show Previews.” The default option will be to always show previews – a snippet of what the alert contains. (For example, an Instagram banner notification will show you who liked your post or sent you a message.) You can also choose to only see them when your phone is unlocked, or never see them – this means the notifications will only appear in your notification center.
8. Once you’ve made your selection, you can exit Settings. You will now receive (or not receive) banner notifications for that app.
Related coverage from How To Do Everything: Tech:
-
How to hide messages and message notifications on your iPhone, so only you can read them
-
How to turn off the autocorrect feature on your iPhone
-
How to turn off the Find My iPhone feature on your iPhone
-
How to turn off or limit personalized ad tracking on your iPhone to protect your privacy
-
How to turn off notifications on your iPhone for individual apps, or adjust the types of notifications you receive


--- title: Drawing Insight from Simple Data Exploration and Visualisation, Including Dodged Bars and Choropleth Maps author: Mike Page date: '2019-03-06' slug: drawing-insight-from-simple-data-exploration-and-visualisation categories: [] tags: [] description: Desc hacker_news_id: '' lobsters_id: '' meta_img: /images/image.jpg ---
Recently, I got approached by a client starting a company that specialises in company formations and related services. They asked if I could source and analyse data regarding the number of companies formed in the UK each year, in addition to any information on competitor companies in that sector. This information was to be merged into a business plan. I took on the challenge as I reasoned it would be a good opportunity to practice data wrangling and simple data exploration and visualisation. Below is a brief account of some of the steps I took to complete the report, as well as a snapshot at some of the data used.
The journey began by exploring official government reports and data repositories for the required information. Six repositories were found that contained the required information. These included: (i) BIS - Business Population Estimates; (ii) ONS - UK Business; (iii) ONS - Business Demography; (iv) devolved country administrations; (v) Insolvency Service; and (vi) Companies House. A breakdown on the differences between the six repositories can be read here.
The accompanying documentation and data sets for the six resources outlined above was large. In brief, Business Population Estimates (BIS) data was used. This is because these were the only data to provide: (a) consistent data across a wide date range, (b) information on the whole business landscape (i.e., public and private sectors), and (c) a breakdown of businesses by area, industry, and formation type (e.g., partnership, non-profit, etc.). Additionally, data from business birth and death rates taken from the UK Business (ONS) repository was used in section one (details below).
The steps taken to wrangle the data are too vast to be included in this blog post (the data was split across hundreds of spreadsheets, many of which were in different formats), so at each stage below (where applicable) data is imported in a wrangled, tidy format.
The report was broken down into five key sections:
In order of conciseness and to minimise repetition, below, I have cherry-picked data and visualisations from each section of the report. Indeed, the finished report contained more information than listed below. But the aim of this blog post is not to learn about the data used, rather, to learn about how I uses the data to draw insight.
First, lets load the libraries that will be used throughout:
library(tidyverse)
library(wesanderson)
library(maptools)
library(rgeos)
library(ggmap)
library(rgdal)
Next, lets go through each section examining different visualisations and techniques:
Section 1: In order to understand the difference in business birth and death rates (i.e., the number of companies formed and dissolved each year), a simple line graph most effectively demonstrates the difference:
# Birth:death rates
# Import data set
birth_death_rates <- read_csv("/home/mike/Documents/r_projects/ggr/data_sets/wrangled/birth_death_rates.csv")
# Tidy birth_death_rates
birth_death_rates <- gather(birth_death_rates, key = "year", value = "count", `2012`, `2013`, `2014`, `2015`, `2016`, `2017`)
# Plot annual birth and death rates for UK
birth_death_rates %>%
filter(area == "UNITED KINGDOM") %>%
ggplot(aes(x = year, y = count/1000, group = rate, colour = rate)) +
geom_point(size = 2) +
geom_line(size = 1) +
scale_colour_manual(values = c("steelblue", "steelblue1")) +
ylab("No. of businesses (thousands)")
The accompanying data:
# Table of UK birth and death rates
tmp4 <- birth_death_rates %>%
filter(area == "UNITED KINGDOM") %>%
spread(rate, count) %>%
select(-area) %>%
rename(birth_rate = birth, death_rate = death)
library(knitr)
kable(tmp4, caption = "Annual company birth and death rates")
| year | birth_rate | death_rate |
|---|---|---|
| 2012 | 269250 | 252085 |
| 2013 | 346275 | 237025 |
| 2014 | 350305 | 246190 |
| 2015 | 382755 | 281995 |
| 2016 | 413900 | 287805 |
| 2017 | 381885 | 356815 |
To better understand the accompanying data, the annual growth in birth and death rates can be expressed as a percentage of previous year. To do this, the ‘lag()’ function can be used:
tmp5 <- birth_death_rates %>%
filter(area == "UNITED KINGDOM") %>%
group_by(rate) %>%
mutate(count = (count / lag(count) - 1) * 100) %>%
ungroup() %>%
spread(rate, count) %>%
filter(year != "2012") %>%
select(-area) %>%
rename(birth_rate = birth, death_rate = death)
library(knitr)
kable(tmp5, caption = "Annual company birth and death rates as a percentage of the previous year")
| year | birth_rate | death_rate |
|---|---|---|
| 2013 | 28.607242 | -5.974175 |
| 2014 | 1.163815 | 3.866681 |
| 2015 | 9.263356 | 14.543645 |
| 2016 | 8.137059 | 2.060320 |
| 2017 | -7.734960 | 23.978041 |
Insights: Despite the decrease in the number of businesses in 2018, there was still a large number of businesses being formed in 2018 with only a small decrease from 2017 (-7.7%). This is because the number of businesses being formed (births) still exceeded the number of those being dissolved (deaths).
Section 2: In order to understand the change in the number of UK businesses broken down by company type, a dodged bar plot was chosen:
# Import data set
comp_types <- read_csv("/home/mike/Documents/r_projects/ggr/data_sets/wrangled/company_types_2012_2018.csv")
# Calculate the yearly difference in company types as both absolute and relative values (as a percentage) of the previous year
comp_types <- comp_types %>%
group_by(comp_type) %>%
mutate(diff = diff(c(0, count))) %>%
mutate(perc_diff = (count / lag(count) - 1) * 100)
# Set the difference score(s) to NA for 2012
comp_types$diff[1:5] <- NA
# Plot
ggplot(comp_types, aes(x = year, y = count / 1000000, fill = comp_type)) +
scale_x_continuous(breaks = 2012:2018) +
scale_y_continuous(breaks = seq(0, 3.5, by = .5)) +
geom_col(position = "dodge", colour = "black") +
scale_fill_brewer(labels = c("Governmental", "Company", "Non Profit", "Partnership", "Sole Trader")) +
ylab("Number (millions)") +
labs(fill = "Company Type")
Accompanying data:
tmp2 <- comp_types %>%
filter(year != 2012) %>%
select(year, comp_type, diff) %>%
spread(comp_type, diff) %>%
rename(Governmental = central_and_local_gov,
Company = companies,
Non_Profit = non_profit_org,
Partnership = partnernships,
Sole_Trader = sole_proprietorships)
library(knitr)
kable(tmp2, caption = "Annual change in company type")
| year | Governmental | Company | Non_Profit | Partnership | Sole_Trader |
|---|---|---|---|---|---|
| 2013 | 1670 | 54390 | -2465 | -13630 | 60790 |
| 2014 | 1230 | 115265 | 80 | 22305 | 209910 |
| 2015 | 420 | 117480 | -310 | -20700 | 49535 |
| 2016 | 295 | 124665 | 7265 | -15105 | -1340 |
| 2017 | 270 | 127540 | 3375 | -7325 | 76625 |
| 2018 | 205 | 30745 | 60 | -8515 | -49225 |
Accompanying data expressed as a percentage of the previous year:
tmp3 <- comp_types %>%
filter(year != 2012) %>%
select(year, comp_type, perc_diff) %>%
spread(comp_type, perc_diff) %>%
rename(Governmental = central_and_local_gov,
Company = companies,
Non_Profit = non_profit_org,
Partnership = partnernships,
Sole_Trader = sole_proprietorships)
library(knitr)
kable(tmp3, caption = "Relative annual change in company type as a percentage of previous year")
| year | Governmental | Company | Non_Profit | Partnership | Sole_Trader |
|---|---|---|---|---|---|
| 2013 | 19.716647 | 4.055581 | -3.0524426 | -3.042275 | 2.0229819 |
| 2014 | 12.130178 | 8.259734 | 0.1021842 | 5.134787 | 6.8469156 |
| 2015 | 3.693931 | 7.776167 | -0.3955595 | -4.532565 | 1.5122097 |
| 2016 | 2.502120 | 7.656379 | 9.3069434 | -3.464489 | -0.0402983 |
| 2017 | 2.234175 | 7.275881 | 3.9554644 | -1.740360 | 2.3052982 |
| 2018 | 1.659247 | 1.634977 | 0.0676437 | -2.058927 | -1.4475855 |
Insights: Sole traders remain the largest sector of the businesses landscape consisting of 3,351,265 companies in 2018. In the private sector, companies, as defined as public corporations and nationalised bodies, are the fastest growing segment, with an average annual growth of approximately 6%.
Section 3: In order to understand the change in the number of UK businesses broken down by industry, a plot of the the annual change in industries as a percentage of all industries can be used. This demonstrates a large amount of information, from the size of industry sectors to their relative growth and performance in the whole market:
# Import data set
industry <- read_csv("/home/mike/Documents/r_projects/ggr/data_sets/wrangled/industry_time_series.csv")
# Tidy industry data set
industry <- industry %>% gather(key = "year", value = "count", `2012`, `2013`, `2014`, `2015`, `2016`, `2017`, `2018`) %>%
select(- industry)
# Plot
industry %>%
group_by(year) %>%
mutate(percent_change = count/sum(count)*100) %>%
ungroup() %>%
ggplot(aes(x = year, y = percent_change, colour = industry_key, group = industry_key)) +
geom_line() +
geom_point(position = "dodge") +
ylab("Percentage")
Accompanying data set:
# Print absolute industry numbers for each year
tmp6 <- industry %>%
spread(year, count)
kable(tmp6, caption = "Annual change in the number of businesses per industry sector")
| industry_key | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 | 2018 |
|---|---|---|---|---|---|---|---|
| A | 152085 | 153620 | 151695 | 153360 | 153640 | 155795 | 157580 |
| B_D_E | 25655 | 28160 | 33695 | 29390 | 28285 | 38125 | 34275 |
| C | 230970 | 274295 | 261395 | 275565 | 265735 | 265775 | 290100 |
| F | 907480 | 890850 | 950220 | 956105 | 974625 | 1007500 | 991620 |
| G | 514805 | 496370 | 538530 | 522690 | 544490 | 542150 | 555810 |
| H | 269945 | 275290 | 284975 | 274840 | 313860 | 345285 | 325565 |
| I | 166555 | 169325 | 178700 | 183180 | 185510 | 202060 | 185955 |
| J | 289075 | 305610 | 320895 | 338905 | 337850 | 351485 | 362825 |
| K | 76380 | 89960 | 83785 | 84140 | 89215 | 86410 | 86615 |
| L | 91810 | 88890 | 99605 | 105045 | 105700 | 111870 | 116065 |
| M | 665625 | 686850 | 779725 | 792885 | 823560 | 855625 | 816685 |
| N | 378735 | 379685 | 419120 | 443400 | 459860 | 478810 | 491055 |
| P | 243220 | 255890 | 258945 | 267550 | 312220 | 296305 | 283470 |
| Q | 303540 | 333310 | 336530 | 371375 | 347700 | 362115 | 360140 |
| R | 209430 | 204730 | 234230 | 268365 | 252495 | 276300 | 276185 |
| S | 268805 | 262815 | 311090 | 322655 | 302925 | 318905 | 333555 |
Accompanying legend:
# Import data set
industry <- read_csv("/home/mike/Documents/r_projects/ggr/data_sets/wrangled/industry_time_series.csv")
industry_legend <- industry %>%
select(industry_key, industry)
industry_legend$industry[2] <- "Quarrying; Electricity and Gas; Water Supply; Waste Management"
kable(industry_legend, caption = "Industry legend")
| industry_key | industry |
|---|---|
| A | Agriculture, Forestry and Fishing |
| B_D_E | Quarrying; Electricity and Gas; Water Supply; Waste Management |
| C | Manufacturing |
| F | Construction |
| G | Wholesale and Retail Trade; Repair of Motor Vehicles and Motorcycles |
| H | Transportation and Storage |
| I | Accommodation and Food Service Activities |
| J | Information and Communication |
| K | Financial and Insurance Activities |
| L | Real Estate Activities |
| M | Professional, Scientific and Technical Activities |
| N | Administrative and Support Service Activities |
| P | Education |
| Q | Human Health and Social Work Activities |
| R | Arts, Entertainment and Recreation |
| S | Other Service Activities |
Insight: Industries C, L, N, & S have demonstrated relative stability and/or growth over time, even in face of the recent decline in the number of businesses in 2018. Industry N is the only industry to show positive annual growth each year. Each year, industry F remains the largest industry sector.
Section 4: In order to understand the change in the number of UK businesses broken down by area (national and regional), a choropleth map was plotted using a UK shapefile. This plot took some hacking to get to work, so perhaps there will be a blog post covering the code below in the future:
# Import data
regional <- read_csv("/home/mike/Documents/r_projects/ggr/data_sets/wrangled/regional_time_series.csv")
national <- read_csv("/home/mike/Documents/r_projects/ggr/data_sets/wrangled/national_time_series.csv")
# Tidy data
regional_tidy <- regional %>%
gather(year, count, `2012`, `2013`, `2014`, `2015`, `2016`, `2017`, `2018`)
national_tidy <- national %>%
gather(year, count, `2012`, `2013`, `2014`, `2015`, `2016`, `2017`, `2018`)
# Import shapefile
shp <- readOGR(dsn = "/home/mike/Documents/r_projects/ggr/shapefile", layer = "NUTS_Level_1_January_2018_Full_Extent_Boundaries_in_the_United_Kingdom", stringsAsFactors = FALSE)
## OGR data source with driver: ESRI Shapefile
## Source: "/home/mike/Documents/r_projects/ggr/shapefile", layer: "NUTS_Level_1_January_2018_Full_Extent_Boundaries_in_the_United_Kingdom"
## with 12 features
## It has 9 fields
## Integer64 fields read as strings: objectid bng_e bng_n
shp_df <- fortify(shp, region = "nuts118nm")
# Bind national and regional tables
nat_reg <- bind_rows(regional_tidy, rename(national_tidy, region = nation)) %>% filter(region != "England")
# Recode regional
nat_reg <- nat_reg %>%
mutate(id = recode(nat_reg$region, "North East" = "North East (England)", "North West" = "North West (England)", "Yorkshire and the Humber" = "Yorkshire and The Humber", "East Midlands" = "East Midlands (England)", "West Midlands" = "West Midlands (England)", "East of England" = "East of England", "London" = "London", "South East" = "South East (England)", "South West" = "South West (England)", "Wales" = "Wales", "Scotland" = "Scotland", "Northern Ireland" = "Northern Ireland"))
# Merge nat_reg and shp_df
shp_merge <- merge(shp_df, nat_reg, by = "id")
# Plot map showing number of businesses per area in 2018
shp_merge %>%
filter(year == "2018") %>%
ggplot(aes(x = long, y = lat, group = group)) +
geom_polygon(aes(fill = count/1000000), color = 'black', size = 0.1) +
scale_fill_gradient(high = "steelblue4", low = "lightskyblue1", guide = "colorbar") +
guides(fill = guide_colorbar(title = "Businesses\n(millions)")) +
theme_void()
Accompanying data:
# Print change in number of businesses per year
combined <- bind_rows(regional, rename(national, region = nation)) %>% rename(area = region)
kable(combined, caption = "Annual number of businesses broken down by area")
| area | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 | 2018 |
|---|---|---|---|---|---|---|---|
| North East | 132300 | 134500 | 150600 | 135000 | 146400 | 142500 | 162800 |
| North West | 437500 | 485400 | 506800 | 531200 | 521700 | 529800 | 544800 |
| Yorkshire and the Humber | 343000 | 349900 | 353200 | 380900 | 391300 | 419200 | 400700 |
| East Midlands | 324900 | 315700 | 330900 | 356400 | 370300 | 370800 | 367700 |
| West Midlands | 373500 | 386200 | 412600 | 399700 | 412600 | 449800 | 448200 |
| East of England | 507400 | 499000 | 549000 | 529100 | 554900 | 572400 | 564800 |
| London | 820900 | 857900 | 939300 | 987400 | 1016600 | 1062300 | 1096100 |
| South East | 771600 | 792400 | 837300 | 879200 | 899000 | 928900 | 873600 |
| South West | 478200 | 467600 | 513000 | 531900 | 514900 | 532000 | 546300 |
| England | 4189200 | 4288700 | 4592600 | 4730700 | 4827600 | 5007700 | 5004800 |
| Wales | 195000 | 189500 | 213200 | 212800 | 221500 | 209000 | 198600 |
| Scotland | 319100 | 326100 | 322700 | 341000 | 324800 | 346200 | 331400 |
| Northern Ireland | 114500 | 110200 | 118500 | 116700 | 124000 | 131700 | 132700 |
Insight: Each year, London remains the area with the largest number of businesses. With the exception of London, the North West is the fastest growing region. The South East experienced the largest decrease in the number of businesses in 2018. England has shown the fastest rate of growth as a nation.
Section 5: In order to understand the change in the number of UK businesses specialising in company formations, a simple dodged bar plot was used. The Standard Industrial Classification (SIC) codes used below are a means to classify businesses by an industry category. More information can be read here:
# Import data set
sic <- read_csv("/home/mike/Documents/r_projects/ggr/data_sets/wrangled/sic_codes.csv")
# Change SIC codes to factors
sic <- sic %>% mutate_at("SIC", factor)
# Plot change in absolute competitor growth per annum
ggplot(sic, aes(x = year, y = businesses/1000, group = SIC, fill = SIC)) +
geom_col(position = "dodge", colour = "black") +
scale_fill_brewer(name = "SIC Code") +
ylab("No. Businesses (thousands)") +
scale_y_continuous(breaks = seq(0, 60, by = 10))
The accompanying data:
kable(sic, caption = "Annual change in number of businesses, employment, and turnover for comeptitor formation companies broken down by three digit SIC code")
| SIC | year | businesses | employ_thousands | turnover_millions |
|---|---|---|---|---|
| 649 | 2012 | 3935 | 59 | NA |
| 702 | 2012 | 43510 | 277 | 37446 |
| 829 | 2012 | 35880 | 239 | 29856 |
| 649 | 2013 | 3830 | 66 | NA |
| 702 | 2013 | 41345 | 276 | 40866 |
| 829 | 2013 | 34185 | 237 | 31296 |
| 649 | 2014 | 2410 | 60 | NA |
| 702 | 2014 | 47680 | 299 | 43677 |
| 829 | 2014 | 40340 | 267 | 37468 |
| 649 | 2015 | 2580 | 59 | NA |
| 702 | 2015 | 51110 | 341 | 48645 |
| 829 | 2015 | 43420 | 292 | 45322 |
| 649 | 2016 | 2735 | 62 | NA |
| 702 | 2016 | 52840 | 347 | 53655 |
| 829 | 2016 | 45405 | 298 | 54840 |
| 649 | 2017 | 2985 | 65 | NA |
| 702 | 2017 | 57145 | 354 | 63639 |
| 829 | 2017 | 54225 | 327 | 54684 |
| 649 | 2018 | 3275 | 71 | NA |
| 702 | 2018 | 58240 | 411 | 76172 |
| 829 | 2018 | 53670 | 356 | 65195 |
Insights: Combined, there was a total of 115,185 companies operating in the landscape of formation companies in 2018 (see details below). Overall, since 2012 there was a positive annual growth in the number of formation companies with a decrease in growth in 2018. This is inline with the overall industry landscape detailed in section one.
Using a variety of data exploration and visualisation methods (e.g., using the ‘lag()’ function, choropleth maps, dodged bar charts, etc.) one can gain basic insight into complex data. The choice of which method to use depends upon the nature of the data being studied, and the questions you would like to answer.