The only reliable location sharing app
Redefine the way you stay connected.
People feel unsafe when they’re alone and want to stay connected when they’re part of a group
Provide everyone an easier way to share their location and connect in real time
To provide an easy to use, reliable, location awareness system so that people will feel safer and be more connected
Def, CONVOY: to travel with and protect (someone or something)
Create your personal "convoy" so that location updates can be sent ONLY to the people you have toggled on.
App User
Mom
Dad
John
Rob
App User's Convoy
Increased Safety
Bar Crawl
Parties
Lonely Walks
Outdoor Activities
Large Gatherings
Disaster Organization
Destination Coordination
- US Military Training Coordinator I grew up with.
I was told to withhold the name.
"$134.1M for Blue Force Tracker Global Services"
This slide is only meant to provide evidence of real-world value when using My Convoy.
(Primary Market)
Social Media Campaigns
Reach Out To Blogs
Solid Feedback Loop
Sponsor Popular Events
Featured On Review Sites
Public Figure Sharing
"Location is the most valued category of personally identifiable information"
- Money Walks: Case Study by Jacopo Staiano, Cornell University (.PDF) - July 2014
"Economic value of big geospatial data could reach $700 billion/yr by 2020"
| Source & Claim | Revenue per Month per User |
|---|---|
|
100,000,000 Location Updates are worth $57,598.2 per year
- The Economic Value of Location Data: ECONSTORE (.PDF) - June 2014 |
Average User = 73.62 Location Updates per Day
= 26,871.3 Location Updates per Year 100,000,000 Location Updates = 3,721.44 Users = $57,598.2 per Year 1 User = $15.48 per year = $1.29 per month |
|
Out of 60 participants, the team ran 596 auctions over 60 days and paid out a total of $295.43 in the
form of Amazon vouchers to 29 participants.
- Money Walks: Case Study by Jacopo Staiano, Cornell University (.PDF) - July 2014 |
60 Users = $295.43 per 60 Days
1 User = $4.93 per 60 Days = $2.46 per Month |
Glympse acquired 10M users in 4 Years.
"Location targeted mobile ad spending to grow from $9.8 billion in 2015 to $29.5 billion in 2020, a 24.6 percent compound annual growth rate"
"There's always a market for parents buying stuff for their children."
Current User Growth Rate
| Expense | Notes | Cost |
|---|---|---|
| 10Mbps Server Bandwidth | 10Mb = 169,491 locations/second | $80/Month/Server |
| Testing Devices | iPads, iPhones, Androids, etc. | $2,500 |
| Become a Corporation | Legal | $6,000 |
| Process SAFE/Convertible Note | Legal | $600/Note |
| Salary | $5,000 | |
| Transportation | $1,000 | |
| Ad Video Promo | Apptamin or Gisteo | $2,500 |
| App Review Websites | $75/Site | |
| App Award Websites | $100/Site | |
| Public Relation Fees | Popular figures, blogs, journals, etc. | $500/Fee |
| Expense | Notes | Cost |
|---|---|---|
| Facebook Ad Campaigns | Avg $0.27 cost/click | $1,000/Month |
| App Store Optimization | $1,000 | |
| Search Engine Optimization | $1,000 | |
| Press Release Package | Media, writing, etc. | $1,000 |
| Venue Advertisements | Six Flags, Zoos, Aquariums, etc. | $500/Venue |
| Event Sponsorships | Orientations, festivals, marathons, etc. | $500/Event |
| News Letter Ads | Local news, county news, etc. | $100/Article |
| Social Engagement Automation | Buffer | $50/Month |
| Hire Grunt Work Interns | Respond to reviews, reply to customers, engage social media, etc. | $5,000 |
| TOTAL EXPENSES | View Excel Spreadsheet | $49,630.00 |
“It is obvious that we can no more explain a passion to a person who has never experienced it than we can explain light to the blind.”
Days of year working on My Convoy
Hours of week working on My Convoy
Includes mobile client, web client, server, & websites
Elite Software


Serve
I’m hijacking this week’s carefully chosen word to talk about changes to the way I’m serving my blogs, but before I get there, have some random musings.
It’s a funny old word, ‘serve’. We use it to talk about another computer, a server, that does things for your computer, a client.
When we use “serve” of people, we almost always have a hierarchy in mind. The one who serves is lower than the one being served.
And yet, sometimes we grant people the title “servant” in order to do them honour. Thus the most powerful person in Britian is the “first servant”, or Prime Minister. This is perhaps due to a Christian legacy.
Certainly with computers on the web, it’s this way. Servers act only on the initiative of their client, and well run services put the needs of their clients well ahead of their own. It’s far from a perfect metaphor, since well-behaved clients do exactly what they are told.
Curiously, the metaphor of the hierarchy is inverted. While a human servant is considered below a human master, a computer client invariably downloads from its server, or pushes up to its server, thus placing the server above the client.
What’s happened?
I’ve moved this blog and my technical blog over to Octopress, which is a very geeky way of blogging that allows me to write blog posts using the tools I use to write code.
Why the change?
More fun while writing
Blogger is nice for what it is, but it’s actually a hassle to use for composition. It doesn’t have rich styles for formatting, doesn’t allow footnotes, and has very poor support for managing literal line breaks, which is critically important when you are writing about source code.
It has great, built-in support for analysing the traffic that comes to the site, but that’s not something that’s very useful to me. It turns out, gentle reader, that you are one of a very select group.
My hope is that by serving my blogs with fresher technologies that I actually enjoy using, and by lowering the barrier to publication, I’ll have something that is more interesting to me and perhaps more interesting to others.
Clearer online presence
I’m not at all happy with mumak.net. I want it to be focused on my technical and open source interests and to incorporate my technical blog, currently served from code.mumak.net.
The life.mumak.net blog and related content would then move to my halfwise domains, which aren’t anywhere near as established.
The hope is that this will let me do a better job with both.
Ramping up technical presence
The Alphabet Supremacy project has meant that almost all of my writing time has been devoted to non-technical things. It’s fun, but my appetite for open source hacking and for technical writing has been whetted by stimulating conversations at work and (perversely but predictably) by being compelled to write about other things.
I’ve been using ThoughtStreams to help get some of that stuff drafted. The switch in technologies will make moving that to my own domains easier.
Technical details
I tried ruhoh initially, but found it to be rather complicated, and struggled to find themes that I didn’t hate. Some folk talked about liquidluck, which I would like because it’s written in Python and thus more hackable by me, but after some initial struggles I decided to go with something a little more popular.
Thus, octopress was the next port of call and so far seems to have worked out OK. Perhaps I’ll experiment with moving to Jekyll or try liquidluck again. Now that I’m off blogger and have all of my data in relatively parseable formats, it’s much easier to experiment.
The new blog pages are being served by Heroku, in a manner which I do not yet understand. I picked it because it’s free, because there were instructions in the octopress documentation, because I already have github pages and didn’t want to bother figuring out have to have three different site, ad I really don’t want to host things myself anymore.
What happened to the comments?
All of the existing comments are still on the site, but new comments are disabled for now, and possibly forever. If you think I should put them back on, please feel free to make your case on the social network of your choice.
Anyway, please let me know if your blog reading experience is disrupted in any way. I’ve tried hard to keep all of the old links still working, but it’s really easy to make mistakes.


Filesystem Scripts¶
batch_renamer
¶
Renames a directory of files based on a template.
First we’ll examine the contents of a directory and ensure it only contains files with names we want to rename.
>>> os.listdir("/path/to/dir")
['img_1074.jpg', 'img_1076.jpg', 'img_1077.jpg']
As we can see it does we’ll then invoke the script like so.
python3 batch_renamer.py /path/to/dir
img_1074.jpg --> Ashley_0.jpg
img_1076.jpg --> Ashley_1.jpg
img_1077.jpg --> Ashley_2.jpg
-
class
pyutil.batch_renamer.
BatchRename
(template)[source]¶ Bases:
string.Template
Delimiter for string substitutions.
-
delimiter
= '%'¶
-
pattern
= re.compile('\n %(?:\n (?P<escaped>%) | # Escape sequence of two delimiters\n (?P<named>(?a:[_a-z][_a-z0-9]*)) | # delimiter and a Python identifier\n {(?P<braced>(?a:[_a-z][_a-z0-9]*)), re.IGNORECASE|re.VERBOSE)¶
-
-
pyutil.batch_renamer.
batch_mover
(pattern, new_pattern, directory=None)[source]¶ Move files in the current working directory that match a pattern.
dir_cleaner
¶
Deletes extraneous files.
Without frequent monitoring, directories like /tmp and /var/log can frequently grow to sizes that are difficult to manage because of clutter and files.
However, there has to be a middle ground between deleting thousands of files one by one and rm -rf /tmp/.
This module attempts that.
Initially tested on the android app Termux, this specifically deletes directories with only month old sockets.
$PREFIX
/tmp/nvim
$PREFIX
/tmp/ssh
Note
On Ubuntu the big one is /var/log/journal so we might need to
remind the user for credentials. getpass.getpass()
?
In addition, it felt like a good way to get more familiar with the new
pathlib
module.
Concrete Roadmap¶
Up until now this has been fairly general and quite abstract.
Let’s come up with a few pre-planned and clear endpoints.
One way to implement this module would be:
Compare packages that are installed to what’s contained /usr/share/doc. I have like 4500 folders in that directory and nowhere near that many packages installed. Cruft and accumulation frequently doesn’t get cleared out of there correctly.
-
pyutil.dir_cleaner.
clean
(ftype='\\*.pyc', recursive=False)[source]¶ Remove all pyc files. Add input for filetype later.
- Parameters
ftype (filetype) – File to iterately remove.
recursive (Bool, Optional) – Whether to search the directory recursively or not.
-
pyutil.dir_cleaner.
rmtree
(path, ignore_errors=False, onerror=None)[source]¶ Returns
shutil.rmtree()
.
dlink
¶
Symlink all of the files in one directory into another.
Synopsis¶
This module can be used to create individual symlinks to every file in a directory. This is a huge convenience wen symlinking dotfiles or configuration files held in a different location than where the software of interest expects it.
This is quite easily one of my most frequently used scripts.
Usage¶
ln -s path/to/dest/* [path/to/src]
As an example, one can git clone dotfiles
in a directory named projects
or src
. The location of the git repository is irrelevant, and as such, we’ll
refer to it as src
from here, as dest
as it’s where the symlinks point to.
For example if wants symlinks pointing to /home/User/dotfiles/.vim
,
then running dlink.py in /home/User/.vim
with $HOME/dotfiles/.vim
as
an argument will create symlinks in $HOME/.vim
pointing to
$HOME/dotfiles/.vim
.
Inspiration¶
If the module is given 2 args, the intended response is for it to behave similarly to the classic Unix idiom:
ln -s path/to/dest/* [path/to/src]
or treat it similarly to os.symlink()
.
Directory Linker Rewrite¶
This is a rewrite of a script I’ve had for years, so I decided to go above and beyond.
The idea behind it was to create something that would easily allow for creating arbitrarily nested trees of symlinks.
Todo
Sep 17, 2019: Recursive option
Currently doesnt work.
Todo
Logging doesnt log the right files.
dlink2
Summary¶
Generate symlinks to every file in the directory ‘destination_dir’.
The module doesn’t immediately check for correct permissions or operating system.
As a result, the onus is put on the user to ensure that the necessary requirements per OS are met.
Namely on Windows 10, that if symlinks are allowed on the filesystem, whether they can only be created by an administrator. Recent enough versions of Windows 10 have introduced the ability for regular users to create symlinks as well as admins.
-
exception
pyutil.dlink2.
UsageError
[source]¶ Bases:
Exception
Symlinking error typically from Windows.
-
pyutil.dlink2.
dlink
(destination_dir, source_dir=None, is_recursive=False, glob_pattern=None)[source]¶ Symlink user provided files.
- Parameters
destination_dir (str) – Directory where symlinks point to.
source_dir (str, optional) – Directory where symlinks are created.
recursive (bool, optional) – Whether to recursively symlink directories beneath the
destination_dir
. Defaults to False.glob_pattern (str) – Only symlink files that match a certain pattern.
-
pyutil.dlink2.
generate_dest
(dest, glob_pattern=None)[source]¶ Return a generator for all the files in the destination directory.
- Parameters
- Yields
pathlib.Path
– File objects in dir.


National and State Health Accounts
Institutional Assessment of the National AIDS Control Programme
Assessment of Critical Gaps in Rural Health System of AP
Development of NHA Manual for India
Health Care Financing and Expenditure of Non-Profit Organizations in India
Out of Pocket Expenditure in Public Hospitals of India
Maternal Mortality Surveillance System
Public-Private Partnership for Prevention of Waterborne Diseases in Urban Slums of Hyderabad
Baseline RCH Survey for RCH-II Project
Obstetric Facility Assessment Study
Quality of Family Planning Practices in AP
Assessing Risk Associated with Water Quality for Establishing Health Based Targets for Drinking Water Safety in Support of Water Safety Plans, Hyderabad.
Frontiers Prevention Program (FPP) Outcome Evaluation
Health Equity in AP
Trends and Analysis of Health Status in AP
People’s Perception towards Directly Administered Anti TB Treatment
Child Labour, Health and Education in Aqua Culture Areas
Quality of Reproductive Health Care by Private Hospitals in AP
Hospital Autonomy: A Case Study of AP Vaidya Vidhana Parishad
Mauritius - Demand and Satisfaction Survey


filter_vintage
Salmon Cookies
menu
home
person
shopping_cart
settings
home
person
shopping_cart
settings
Doug's Salmon Cookies
Store Locations
Location:
Customer(s) Info:
Customer(s) Info:
Customer(s) Info:
Submit


Limitless - Getting Started
Overview
Limitless template includes 4 layouts - 3 with vertical navigation and 1 with horizontal navigation. All layouts are placed inside 4 different folders with related name. Each layout contains main HTML files, all assets (LESS, CSS, JS, demo data, charts, maps etc etc) you can find in /assets/
folder. CKEditor folder must be in folder root, starters folder contains a set of blank pages with optional page layouts.
Screenshot
Dependencies
Limitless template has 2 dependencies: jQuery and Bootstrap libraries, all functinoality are based on these 2 libraries. Current jQuery library version used in the template - 2.1.4
, Bootstrap version - 3.3.5
. jQuery has dropped IE8 support in 2.0 version, so by default it is not supported. Limitless version with Bootstrap 4.0 will be included as a separate version on the template once it'll be available in first stable version. Main dependency paths are:
<!-- jQuery library -->
<script type="text/javascript" src="assets/js/core/libraries/jquery.min.js"></script>
<!-- Bootstrap library -->
<script type="text/javascript" src="assets/js/core/libraries/bootstrap.min.js"></script>
Please keep in mind, that jQuery must be loaded before Bootstrap as BS is a jQuery dependent library.
Files structure
Each layout includes a bunch of different files responsible for core and optional functionality. All files related to components and content are the same in all layouts: LESS files, plugins, extensions, libraries, charts, CSS files, files with demo data etc. Only layout parts are different in all layouts: sidebars, navbars, page header and breadcrumbs. To keep it simple, i've decided to change them, because in different layouts default look of breadcrumbs and page headers, as well as sidebars and navbar positions are different and you won't need to overload markup with additional classes. See the table below for more information about files included to the package:| What | Quantity | Description |
|---|---|---|
| Core files | ||
| Folders | 268 | Folders with files, excluding CKEditor and Starter kit folders |
| HTML files | 249 | Depending on layout, around 249 main HTML files in each layout |
| CSS files | 7 | 4 main CSS files, 2 CSS for icon fonts and 1 animate.min.css animation library |
| LESS files | 203 | All LESS files, including Bootstrap core |
| JS files | 896 | All JS files, excluding starter kit and CKEditor folders |
| Image files | 256 | Logos, flag icons and notification icons |
| Other files | ||
| JSON files | 23 | Different demo data sources. For demo purposes |
| CSV files | 11 | Mainly for charts based on D3.js library. For demo purposes |
| TSV files | 13 | Mainly for charts based on D3.js library. For demo purposes |
| SWF files | 3 | Additional files for datatables TableTools extension and Plupload file uploader |
Root folders
By default, Limitless includes HTML, LESS, compiled CSS, SWF, JS, JSON/TSV/CSV, fonts and image files. All these files are properly commented and placed inside separate folders, so if you know what you are looking for, it won't take too much time to find it. Template package root includes 3 main folders. Each folder includes related folders and files, that correspond to their purpose. Main folders are:
| Folder name | Description |
|---|---|
assets/ |
all template assets: LESS/CSS/JS files, fonts, images, demo data files etc. |
CKEditor/ |
open source web text editor, must be placed in the root |
starters/ |
starter kit for developers |
Screenshot
Assets folder
Assets folder contains 7 sub folders, each folder includes a bunch of subfolders with related files. /demo_data
and /locales
are used for demo purposes only, they contain JSON/TSV/CSV files with demo data for multi level tree, maps, typeahead, file uploaders, wizards, charts and internationalization. Main subfolders are:
| Folder name | Description |
|---|---|
/css |
folder with compiled CSS files and icon fonts |
/demo_data |
all JSON/TSV/CSV files with remote data used in data tables, charts, dynamic trees etc. |
/images |
folder with images, doesn't include any demo images from live preview as it's not allowed |
/js |
all core libraries, extensions, plugins and separate page files are placed inside this folder |
/less |
all LESS files, divided by category and purpose |
/locales |
demo files with translations of main navigation, used in live preview for demo purposes only |
/swf |
a couple of swf files used in datatables TableTools extension |
Screenshot
CSS folder
All main CSS files are compiled from LESS, in live preview all of them are minified. In compiled CSS files only main sections are commented for easy access. Comments include section name, brief description, version and date of latest update. icons/
folder includes 3 icon sets, each set is inside separate folder. extras/
folder includes extra css files, such as animate.css
library. Main structure:
| Folder name | Description |
|---|---|
/extras |
all existing and upcoming extra css files, such as animations and those that haven't been included to LESS |
/icons |
3 icon font sets: default Bootstrap Glyphicon icon font, Font Awesome and Icomoon. Icomoon is a main set used in all template layouts; Glyphicons is always included as it's inside compiled main BS file; Font Awesome is completely optional |
Screenshot
Demo data folder
Demo data folder includes all file types with remote data sets: JSON/TSV/CSV file types used in charts, maps, dynamic multi level tree, data tables, tag inputs, typeahead extension, multiple file uploader, form wizards. All these files are for demonstration purposes only. Child folders structure:
| Folder name | Description |
|---|---|
/d3 |
Majority of charts that are based on d3.js library use remote data sources. All of them are placed here |
/dashboard |
Dashboard charts - areas, heatmap, streamgraph, bullet charts. Also built with D3.js library |
/dimple |
Dimple charts. Single .tsv file used in all chart types |
/fancytree |
Dynamic multi level tree. Single JSON file contains multiple levels of data, used to build a file tree without markup |
/maps |
Demo data for vector maps |
/tables |
Data table demo data sources: simple JSON data source, nested object data and source with 2500 entries for scroller extension |
/tags_input |
JSON data source used in tags input plugin to fetch city names |
/typeahead |
Remote data sources for typeahead extension |
/uploader |
Empty JSON file required for Plupload uploader queue |
/wizard |
HTML files used as wizard steps in Stepy wizard |
Screenshot
Images folder
Images folder mostly needed for live preview to store brands and other demo images. But in the template package it doesn't have any of those, but only a set of flags for language switcher, colored icons for pnotify desktop notifications, custom map marker, jQuery UI datepicker trigger, logos, signature for invoice and background image for boxed layouts. Other images are moved according to Envato Market rules.
| Folder name | Description |
|---|---|
/backgrounds |
Background images on boxed layout in 1st and 2nd layouts only |
/flags |
Set of 16x16 flag icons set, includes 247 icon objects. Remove unnecessary if needed |
/pnotify |
5 images for demo purposes, used in PNotify library for desktop notifications |
/ui |
Other images. Currently contains 2 - custom marker for google maps and jQuery UI Datepicker component trigger image |
Screenshot
JS folder
JS folder includes all files responsible for template functionality - jQuery plugins, extensions, separate pages codes, core template functionality and libraries. Charts and maps folders are separated from main JS files, because they are mostly used for demo purposes - demo charts, google and vector maps setup and can be easily removed. Core folder includes main libraries and code app.js
file which is used in all template pages and contains basic template functionality.
| Folder name | Description |
|---|---|
/charts |
Demo charts setup for C3.js, D3.js, Dimple, ECharts and Google Charts libraries |
/core |
Core template files - libraries and main app.js file with basic functionality, neds to be included in all pages |
/maps |
Google Maps and Vector Maps demo files |
/pages |
Almost all pages have different additional JS files loaded on top of app.js, with specific settings according to the page functionality |
/plugins |
All jQuery plugins and extensions in separate folders |
Screenshot
LESS folder
LESS folder includes all files responsible for template styling - core, layout, components, plugins, page kits etc. All files are properly structured according to the category - bootstrap, bootstrap-limitless, components and core. 4 main files that load all others are in folder root - bootstrap.less, colors.less, components.less and core.less. Detailed instructions about LESS compilation see in LESS and CSS page.
| Folder name | Description |
|---|---|
/bootstrap |
All native Bootstrap LESS files, without changes |
/bootstrap-less |
Overrides of native Bootstrap LESS files |
/components |
All template components - plugins, charts, extensions, page kits, maps etc. |
/core |
Template's core - layout, sidebars, colors, mixins and variables |
Screenshot
Locales folder
Locales folder contains 3 .json
files with translations of main navigation. These files are added for demonstration purposes, so you'll be able to take them as a base. They can be combined into 1 main file with all languages inside, but i decided to divide them to make it more understandable. Please check Internationalization pages console to see how they load on the page.
Screenshot
SWF folder
Yes, unfortunately we have these files as well. SWF folder contains a couple of .swf
files used in datatables library, TableTools extension. These files allow you save table data as CSV, XLS or PDF files. Please check datatable_extensions_tools.html
file to see it in action. Although this extension was deprecated in the latest version of Datatables, i've decided to keep it. They offered an alternate extension, which will be added in upcoming update.
| Folder name | Description |
|---|---|
/datatables |
Datatables library TableTools extension |
Screenshot
assets/js/pages/
folder. So if you need a specific functionality that you found on some page, just go this folder and open necessary file. Each file is properly commented and structured. File list:
| File name | Description | |
|---|---|---|
| Main category | ||
index.html |
Template's main page | |
colors_*.html |
Set of pages with colored components and usage examples | |
changelog.html |
Version history | |
| Layouts | ||
layout_navbar_fixed.html |
Layout with fixed navbar | |
layout_navbar_hideable_sidebar.html |
Layout with hideable navbar and fixed sidebar | |
layout_navbar_hideable.html |
Layout with hideable navbar | |
layout_navbar_sidebar_fixed.html |
Fully fixed layout - navbar and sidebar are always sticky. With custom scrollbar | |
layout_sidebar_fixed_native.html |
Fully fixed layout with native scrollbar | |
layout_footer_fixed.html |
Layout with fixed footer | |
| Forms | ||
form_checkboxes_radios.html |
Checkboxes, radios and switchers | |
form_controls_extended.html |
Extended form controls | |
form_dual_listboxes.html |
Dual select boxes component | |
form_editable.html |
Editable form components | |
form_input_groups.html |
Input groups with options | |
form_inputs_basic.html |
Set of basic form inputs and controls | |
form_inputs_grid.html |
Optional grid of input fields | |
form_tag_inputs.html |
Tag inputs components | |
form_validation.html |
Form elements validation | |
form_bootstrap_select.html |
Bootstrap select component | |
form_multiselect.html |
Bootstrap single and multiple selects | |
form_select_box_it.html |
SelectBoxIt select component | |
form_select2.html |
Select2 single and multiple select component | |
form_layout_horizontal.html |
Horizontal form layout | |
form_layout_vertical.html |
Vertical form layout | |
| Wizards | ||
wizard_form.html |
Form wizard component with options | |
wizard_steps.html |
Steps wizard component with options | |
wizard_stepy.html |
Stepy wizard component with options | |
| Editors | ||
editor_ckeditor.html |
CKEditor text editor with options | |
editor_code.html |
Ace code editor with language options | |
editor_summernote.html |
Summernote text editor | |
editor_wysihtml5.html |
WYSIHTML5 editor | |
| Pickers | ||
picker_color.html |
Spectrum color picker with options | |
picker_date.html |
jQuery UI, daterange, pick-a-date, anytime date and time pickers | |
picker_location.html |
Location picker, with Google maps | |
| Components | ||
components_alerts.html |
Alert component with options and styling | |
components_animations.html |
CSS3 animations based on animate.css library |
|
components_breadcrumbs.html |
Breadcrumb component with placement, elements and styling options | |
components_buttons.html |
Available button styles | |
components_dropdowns.html |
Dropdown menu component with options | |
components_labels.html |
Labels and badges styling | |
components_loaders.html |
Progress bars, area and page loaders | |
components_media.html |
Media lists component with styling options | |
components_modals.html |
Modal dialogs with options and styling | |
components_navs.html |
Accordions, collapsible components and other navigation options | |
components_notifications_others.html |
jGrowl and Noty notification libraries | |
components_notifications_pnotify.html |
PNotify notification library | |
components_page_header.html |
Page header styling, components and other options | |
components_pagination.html |
Pagination and pager with options | |
components_pills.html |
Pills nav component with styling and other options | |
components_popups.html |
Tooltips, popovers with options | |
components_sliders.html |
jQuery UI and NoUI sliders with pips and other options | |
components_tabs.html |
Nav tabs component with different options | |
components_thumbnails.html |
Thumbnails with titles, descriptions and components | |
| Content appearance | ||
appearance_content_grid.html |
Main content grid with descriptions | |
appearance_content_panels.html |
Panel component with styling and color options | |
appearance_draggable_panels.html |
Draggable content panels | |
appearance_helpers.html |
Table with helper classes | |
appearance_panel_heading.html |
Panel heading components | |
appearance_syntax_highlighter.html |
Syntax highlighter extension with options | |
appearance_text_styling.html |
Table with available text styling | |
appearance_typography.html.html |
Template's typography - lists, headings, well blocks etc. | |
| Extra components | ||
extra_affix.html |
Bootstrap's Affix and Scrollspy components in action | |
extra_context_menu.html |
Context menu extension | |
extra_idle_timeout.html |
Idle timeout extension demo | |
extra_session_timeout.html |
Session timeout extension demo | |
extra_trees.html |
Dynamic multi level trees with available options | |
| Icons | ||
icons_fontawesome.html |
Font Awesome icon set demo | |
icons_glyphicons.html |
Bootstrap Glyphicons icon set demo | |
icons_icomoon.html |
Custom Icomoon icon set demo. Main icon set used in Limitless | |
| Sidebars | ||
sidebar_components.html |
Available components to use in sidebar | |
sidebar_hidden.html |
Page with hidden sidebar | |
sidebar_light.html |
Light sidebar version | |
sidebar_default_collapse.html |
Default sidebar collapsible | |
sidebar_default_hide.html |
Default sidebar hideable | |
sidebar_mini_collapse.html |
Mini sidebar collapsible | |
sidebar_mini_hide.html |
Mini sidebar hideable | |
sidebar_detached_left.html |
Detached sidebar, left position | |
sidebar_detached_right.html |
Detached sidebar, right position | |
sidebar_detached_separate.html |
Detached sidebar with separate categories | |
sidebar_detached_sticky_custom.html |
Sticky detached sidebar with custom scrollbar | |
sidebar_detached_sticky_native.html |
Sticky detached sidebar with native scrollbar | |
sidebar_double_collapse.html |
Double sidebar - collapse main sidebar | |
sidebar_double_fix_default.html |
Double sidebar - fix sidebar with default width | |
sidebar_double_fix_mini.html |
Double sidebar - fix sidebar with mini width | |
sidebar_double_hide.html |
Double sidebar - hide sidebars when opposite sidebar is visible | |
sidebar_double_visible.html |
Make opposite sidebar visible by default | |
sidebar_dual_double_collapse.html |
Dual sidebar - collapse other sidebars when opposite is visible | |
sidebar_dual_double_hide.html |
Dual sidebar - hide other sidebars when opposite is visible | |
sidebar_dual_swap.html |
Change sidebars position | |
sidebar_dual.html |
Basic dual sidebar | |
| Vertical navigation | ||
navigation_vertical_accordion.html |
Sidebar navigation with accordion functionality | |
navigation_vertical_bordered.html |
Bordered navigation style | |
navigation_vertical_collapsible.html |
Sidebar navigation with collapsible functionality | |
navigation_vertical_disabled.html |
Vertical navigation with disabled links | |
navigation_vertical_right_icons.html |
Navigation with right aligned icons | |
navigation_vertical_sizing.html |
Vertical navigation sizing options | |
| Horizontal navigation | ||
navigation_horizontal_click.html |
Open horizontal navigation levels on click | |
navigation_horizontal_disabled.html |
Horizontal navigation with disabled links | |
navigation_horizontal_elements.html |
Horizontal navigation with components | |
navigation_horizontal_hover.html |
Open horizontal navigation levels on hover | |
navigation_horizontal_mega.html |
Horizontal navigation with mega menu | |
navigation_horizontal_tabs.html |
Tabbed horizontal navigation | |
| Navbars | ||
navbar_colors.html |
Available navbar color options | |
navbar_components.html |
Set of components that can be used inside navbar | |
navbar_hideable.html |
Hide navbar on scroll | |
navbar_single.html |
Page with single top and/or bottom navbar | |
navbar_sizes.html |
Availabel navbar sizing options | |
navbar_multiple_header_navbar.html |
Multiple navbars - navbar after page header | |
navbar_multiple_navbar_header.html |
Multiple navbars - navbar before page header | |
navbar_multiple_navbar_navbar.html |
Multiple navbars - navbars one after another | |
navbar_multiple_top_bottom.html |
Multiple navbars - top and bottom positions | |
| Data visualization | ||
c3_advanced.html |
Advanced C3 charts examples | |
c3_axis.html |
C3 library - chart axis options | |
c3_bars_pies.html |
C3 library - bars and pies examples | |
c3_grid.html |
C3 library - chart grid options | |
c3_lines_areas.html |
C3 library - line and area charts examples | |
d3_bars_advanced.html |
D3 library - advanced bar charts examples | |
d3_bars_basic.html |
D3 library - basic bar charts examples | |
d3_circle_diagrams.html |
D3 library - circle diagrams examples: chords, Venn diagram, sunburst | |
d3_lines_advanced.html |
D3 library - advanced line chart examples | |
d3_lines_basic.html |
D3 library - basic line chart examples | |
d3_other.html |
D3 library - other examples: streamgraph, waterfall, bubble charts, zoomable treemap | |
d3_pies.html |
D3 library - pie and donut charts examples | |
d3_tree.html |
D3 library - tree layouts: clusters, dendrograms, collapsible trees etc. | |
dimple_area_horizontal.html |
Dimple library - horizontal area charts | |
dimple_area_vertical.html |
Dimple library - area charts in vertical orientation | |
dimple_bars_horizontal.html |
Dimple library - bar chart examples in horizontal orientation | |
dimple_bars_vertical.html |
Dimple library - bar chart examples in vertical orientation | |
dimple_bubble.html |
Dimple library - bubble chart examples | |
dimple_lines_horizontal.html |
Dimple library - line chart examples in horizontal orientation | |
dimple_lines_vertical.html |
Dimple library - line chart examples in vertical orientation | |
dimple_step_horizontal.html |
Dimple library - step line chart examples in horizontal orientation | |
dimple_step_vertical.html |
Dimple library - step line chart examples in vertical orientation | |
dimple_pies.html |
Dimple library - pie charts with options | |
dimple_rings.html |
Dimple library - ring (donut) charts examples | |
dimple_scatter.html |
Dimple library - scatter chart examples with options | |
echarts_bars_tornados.html |
ECharts library - bar and tornado charts examples | |
echarts_candlesticks_others.html |
ECharts library - candlestick and other charts examples | |
echarts_columns_waterfalls.html |
ECharts library - vertical bar and waterfall charts examples | |
echarts_combinations.html |
ECharts library - charts combinations | |
echarts_funnels_chords.html |
ECharts library - funnel and chord diagrams examples | |
echarts_lines_areas.html |
ECharts library - line and area charts examples with options | |
echarts_pies_donuts.html |
ECharts library - pie and donut charts examples | |
echarts_scatter.html |
ECharts library - scatter chart example with options | |
google_bars.html |
Google charts - bar chart examples | |
google_lines.html |
Google charts - line chart examples | |
google_other.html |
Google charts - other chart examples: geo, trendlines, candlesticks, diff charts | |
google_pies.html |
Google charts - pie and donut charts examples | |
google_scatter_bubble.html |
Google charts - bubble chart examples | |
| Maps | ||
maps_google_basic.html |
Google Maps - basic setup and examples | |
maps_google_controls.html |
Google Maps - map controls | |
maps_google_drawings.html |
Google Maps - map drawings | |
maps_google_layers.html |
Google Maps - available map layers | |
maps_google_markers.html |
Google Maps - map marker options | |
maps_vector.html |
Vector maps examples | |
| Extensions | ||
extension_blockui.html |
BlockUI extension with options and styling | |
extension_image_cropper.html |
Image cropper with a bunch of avaiable options | |
extension_fullcalendar_advanced.html |
Fullcalendar - advanced examples: RTL support and external events | |
extension_fullcalendar_formats.html |
Fullcalendar - date and time format examples | |
extension_fullcalendar_styling.html |
Fullcalendar - styling options | |
extension_fullcalendar_views.html |
Fullcalendar - available views | |
extension_velocity_basic.html |
Velocity animations - basic functionality demonstration | |
extension_velocity_examples.html |
Velocity animations - advanced animation examples | |
extension_velocity_ui.html |
Velocity animations - UI animation examples | |
| File uploaders | ||
uploader_bootstrap.html |
Single and multiple file uploader for Bootstrap | |
uploader_dropzone.html |
Dropzone - single and multiple file uploader | |
uploader_plupload.html |
Plupload - multiple file uploader with multiple runtimes | |
| Internationalization | ||
internationalization_after_init.html |
i18next - set language after initialization | |
internationalization_callbacks.html |
i18next - callback examples | |
internationalization_fallback.html |
i18next - set fallback language | |
internationalization_on_init.html |
i18next - set language on initialization | |
internationalization_switch_direct.html |
i18next - change language without page reload | |
internationalization_switch_query.html |
i18next - change language with page reload using query string | |
| Basic tables | ||
table_basic.html |
Static tables - basic examples and basic styling | |
table_borders.html |
Static tables - table borders options | |
table_elements.html |
Static tables - set of component to use inside tables | |
table_responsive.html |
Static tables - responsive static tables | |
table_sizing.html |
Static tables - optional table cell sizing | |
table_styling.html |
Static tables - available styling options | |
| Data tables | ||
datatable_advanced.html |
Data tables - advanced examples | |
datatable_api.html |
Data tables - API usage | |
datatable_basic.html |
Data tables - examples with basic options | |
datatable_data_sources.html |
Data tables - different data sources | |
datatable_responsive.html |
Data tables - responsive tables | |
datatable_sorting.html |
Data tables - available sorting options | |
datatable_styling.html |
Data tables - available styling options | |
datatable_extension_colvis.html |
Data tables - columns visibility extension | |
datatable_extension_fixed_columns.html |
Data tables - fixed columns extension | |
datatable_extension_reorder.html |
Data tables - columns reorder extension | |
datatable_extension_scroller.html |
Data tables - scroller extension | |
datatable_extension_tools.html |
Data tables - TableTools extension | |
| Page kits | ||
task_manager_detailed.html |
Task manager - detailed view | |
task_manager_grid.html |
Task manager - grid view | |
task_manager_list.html |
Task manager - table list view | |
invoice_archive.html |
Invoices - table view | |
invoice_grid.html |
Invoices - grid view | |
invoice_template.html |
Invoices - static and editable invoice templates | |
user_pages_cards.html |
User pages - user cards | |
user_pages_list.html |
User pages - user list | |
user_pages_profile_cover.html |
User pages - user profile with cover image | |
user_pages_profile.html |
User pages - simple user profile with tabbed nav | |
login_advanced.html |
Login - advanced login form | |
login_background.html |
Login - background color option | |
login_hide_navbar.html |
Login - form without navbar | |
login_password_recover.html |
Login - password recover form snippet | |
login_registration_advanced.html |
Login - advanced registration form | |
login_registration.html |
Login - simple registration form | |
login_simple.html |
Login - simple login form | |
login_transparent.html |
Login - box without background color | |
login_unlock.html |
Login - unlock user snippet | |
timelines_center.html |
Timeline - center position | |
timelines_left.html |
Timeline - left position | |
timelines_right.html |
Timeline - right position | |
support_conversation_layouts.html |
Support - chat layouts | |
support_conversation_options.html |
Support - chat options and styling | |
support_faq.html |
Support - FAQ template | |
support_knowledgebase.html |
Login - knowledgebase template | |
search_basic.html |
Search - basic search results | |
search_images.html |
Search - image search results | |
search_users.html |
Search - people search results | |
search_videos.html |
Search - video search results | |
gallery_description.html |
Gallery - items with description and titles | |
gallery_grid.html |
Gallery - item grid | |
gallery_library.html |
Gallery - list of items, inside table | |
gallery_titles.html |
Gallery - items with titles | |
error_***.html |
Error pages: 403, 404, 405, 500, 503 errors | |
error_offline.html |
Website is offline page |


Quotes
Curated list of my favourite quotes, aphorisms, adages and maxims
"We do not learn from experience... we learn from reflecting on experience."
John Dewey
tags: life
"All animals are equal but some animals are more equal than others."
Animal Farm, George Orwell
tags: equality, society
“Be the change that you wish to see in the world.”
Mahatma Gandhi
tags: motivation
“Fill the unforgiving minute with sixty seconds' worth of distance run.”
If, Rudyard Kipling
tags: motivation
"Ever tried.
Ever failed.
No matter.
Try Again.
Fail Again.
Fail Better."
Samuel Beckett
tags: motivation, failure
“There is only one sin. and that is theft.
When you tell a lie, you steal someones right to the truth.”
The Kite Runner, Khaled Hosseini
tags: life, truth


RT @kittylyst: If you want a physical copy of The Well-Grounded Java Developer, please purchase direct from the publisher - https://t.co/m3…
7/24/2022, 3:04:41 AM
Favs: 0
Retweets: 0
link--- layout: tweet ---
RT @kittylyst: If you want a physical copy of The Well-Grounded Java Developer, please purchase direct from the publisher - https://t.co/m3…
7/24/2022, 3:04:41 AM
Favs: 0
Retweets: 0
link


Currently, I am pursuing my Post Graduate diploms in Computer Software and Database Development at Lambton College and will be completing in May 2018. I have strong knowledge in java, HTML5, CSS and JavaScript, Bootstrap, SQL,ASP.Net.
Previously, I completed my Bachelor of Technology in Computer Science and Engineering.
During my academics, I have completed several projects demonstrating my ability apply my technical knowledge, work within a team, communicate well and manage a project timeline affectively.
For my final project in my bachelor ‘s, I created and developed Career Way, a web based tool to post and search for available jobs using ASP.NET. My other projects used JAVA, C#, Asp.Net, HTML5, CSS3, Bootstrap, JQuery, JavaScript, MYSQL-SERVER and Oracle.
Flexible, hardworking and solid independent worker Enthusiastic and eager to learn new things Work effectively in collaboration with others Committed to maintaining quality and efficiency Ability to solve problems efficiently, got good grades in academic assignments
Programming Languages(C, C++, HTML, .NET, jQuery, CSS, JavaScript) Database(MS Access, SQL Server, Oracle) Other Applications(Windows: MS-Excel, MS-Word, MS-PowerPoint) Tools(Visual studio 2010, SQL Server 2010, Net-Beans.)
Member of National Social Service Scheme, BBSBEC, Fatehgarh Sahib, Punjab, India. Organized Blood Donation Camp,I have registered donors at reception in BBSBEC, Fatehgarh Sahib, Punjab,India Tree plantation in Cantara Park in Sarnia
Ready to talk! Give me a call or send me an email and i will get back to you as soon as possible!
519-331-6532
Training: Industrial Training at C-DAC, Patiala, India
Date: May 2012 – July 2012
Technology used: ASP.Net
Shopping paradise is a web site to shopping online. Different products can be seen online and all information related to these products. It also provides the opportunity to contact the company and send your feedback.
Close ProjectTraining Organization:: Industrial Training at SPIC, Chandigarh, India
Date: Jan 2014 – May 2014
Technology used: ASP.Net,Oracle
Created a web application for job postings. Companies can post various job and students can access all information regarding these positions and can also apply for these jobs through the system.
Close ProjectTraining Organization: Lambton college ,Sarnia On
Date: Jan 2017 – May 2017
Technology used: JAVA,MYSQL,jquery,JavaScript,HTML
Created a budgeting app that helps track monthly and annual expenditures and helps to estimate annual expenditures based on the average monthly expenditure.
Close Project


Home
About
Resources
Volunteer
Chapter Leads
Contact
Loading...
Surveyors will walk the same route several times a year, while recording butterflies they observe
Resources for Surveyors


You discovered CP violation!
The study of CP violation is concerned with some very fundamental questions:
CP is a possible symmetry of nature. If the laws of nature were symmetric under CP, then matter and antimatter would be governed by the same rules. This means that if we communicated with aliens from a distant galaxy, there would be no way to find out if they are made from matter or antimatter: No experiment they could perform would allow us to deduce if they lived in a matter or antimatter world. On the other hand, if there was a fundamental difference between matter and antimatter, such an experiment would be possible. It turns out that this is the case in our universe!
In 1964, a team lead by Val Fitch and Jim Cronin performed experiments with neutral Kaons, particles formed by a strange and an anti-down quark. These neutral Kaons have the amazing property that they can spontaneously transform into their own antiparticle. Fitch and Cronin discovered that the rate at which these Kaons changed from matter to antimatter and vice versa was different, clear evidence for CP violation! This discovery came as a total surprise to physicists (it was assumed that nature was symmetric under CP) and earned Cronin and Fitch the Nobel Prize in 1980.
In 1973, two Japanese physicists, Makoto Kobayashi and Toshihide Maskawa, found a very simple and elegant way to explain the occurrence of CP violation in our universe. The only problem: The explanation required a third generation of quarks (the top and bottom quarks) for which there was zero evidence at the time.
This turned out to be an incredible prediction, when both of these quarks were discovered decades later. So far, the idea of Kobayashi and Maskawa, called the CKM mechanism, has been able to explain every single occurrence of CP violation that physicists managed to detect in the lab. They were awarded the Nobel Prize in 2008.
CP violation is one of the necessary ingredients for explaining the abundance of matter over antimatter in our universe. But there is one problem: The CKM mechanism predicts too little of it. The amount of matter in our universe suggests that a correction or even a complete revolution in our understanding of CP violation is necessary.
CP violation remains a hot topic in Physics research. Specialized experiments like the LHCb detector at CERN in Switzerland are currently searching for hints of New Physics that could explain how our universe came to be the way it is.


Zoono Group's run continues as Shares Race heads into final week
by John CollettAngie Ellis, of 20 20 Investments, has increased her lead in week five of the six-week Shares Race, with her pick of Magmatic Resources remaining the best-performing stock tip of all.
Ellis' original $10,000 in the gold and copper explorer, which is also held by the fourth-placed Dan Silver, co-chief executive of Stake, is worth $24,167.
Ellis is also doing particularly well with Zoono Group – the third-best performing tip – with her original $10,000 investment in the anti-microbial products company now worth $22,674, up from $19,767 last week.
Her total portfolio value of $127,489 puts her comfortably ahead of Varun Ratra, of the newsletter Eye between Bulls & Bears, whose portfolio is worth $115,357. Michael Gable, of Fairmont Equities, is third with $109,956.
Ratra's best-performing stock tip remains Oncosil Medical, with his original $10,000 in the medical device company that focuses on oncology now worth $23,077.
Darren Gray, business reporter at the SMH & Age, holds New Century Resources, the fourth best-performing tip of all. His original $10,000 in the zinc miner is now worth $14,200.
The sharemarket, as measured by the S&P/ASX 300 index, finished the week almost unchanged at 6,668 points on Thursday, the day the competition closed.
The Shares Race is a fantasy shares game that runs for six weeks. Players start with $100,000, divided evenly across 10 stocks. Their progress is reported weekly.


{{^username}}
VertoSwap
Create account
Login
Login
To contact this swapper, log in or create an account.
{{/username}} {{#username}}
VertoSwap
MySwaps
Resume
Archive
Chats
Logout
{{/username}}
{{^service}}
{{#photoActive}}
{{caption}}
{{/photoActive}} {{#photos}}
{{caption}}
{{/photos}}
{{#photos}}
Previous
Next
{{/photos}}
{{/service}} {{#good}} {{#work}}
{{user.username}}'s Work History
{{jobTitle}}
{{description}}
{{/work}} {{/good}}
{{#good}}
{{title}}
Location:
{{location}}
Description:
{{description}}
Desired Swap:
{{acceptableExchange}}
{{timedateString}}
Posted By:
{{user.username}}
{{#username}}
Send a message to this swapper
Send
{{/username}}
{{/good}}


Brass
Home • Woodwinds • Brass • Percussion • Colorguard
What is Brass?
A brass instrument is a musical instrument that produces sound by sympathetic vibration of air in a tubular resonator in sympathy with the vibration of the player's lips. Brass instruments are also called labrosones, literally meaning "lip-vibrated instruments".
There are several factors involved in producing different pitches on a brass instrument. Slides, valves, crooks (though they are rarely used today), or keys are used to change vibratory length of tubing, thus changing the available harmonic series, while the player's embouchure, lip tension and air flow serve to select the specific harmonic produced from the available series.


1) Always work between class to class.
2) Do not work between object to object or field to field.
3) In inheritance child class has all attribute of parent class and can have more additional attributes.
General form:
Class parent{
// body of parent class
}
Class child:parent {
// body of child (body of parent class is included in child class due to inherritance)
}


This guide leads you through all the necessary steps to setup your own Taskserver to sync your Taskwarrior-tasks.
Please follow the steps carefully and note all things you do differently.
Let's reinforce a good habit and make a backup copy of your data first. Here is a very easy way to backup your data:
$ cd ~/.task
$ tar czf task-backup-$(date +'%Y%m%d').tar.gz *
Now move that file to somewhere safe. All software contains bugs, so make regular backups.
This is not only due to a good habit, we will modify your data, so a backup is highly recommended.
A suitable machine to run your Taskserver is one that is always available. If you have such a machine, or have access to a hosted machine, that is ideal.
If your machine is not continuously available, it can still be a suitable Taskserver because the sync mechanism doesn't require continuous access. When a client cannot sync, it simply accumulates local, unpropagated changes until it can sync.
A laptop is a poor choice for a Taskserver host.
By default, Taskserver uses port 53589. You can choose any port you wish, provided it is unused. If you choose a port number that is under 1024, then Taskserver must run as root, which is not recommended.
Ideally you will create a new user and group solely to run the Taskserver. This helps you keep the data secure from other users on the machine, as well as controlling the privileges of Taskserver.
Depending on what devices you use to access your server, you may need to configure the firewall to allow incoming TCP/IP traffic on your chosen port.
Installing Taskserver from a binary package is the simplest option, but you will need to refer to your package manager's documentation and procedures for doing this.
Take a look at the Download page for examples. Generally there are too many package managers to make a complete list with instructions here.
Before building the software, you will need to satisfy the dependencies by installing the following:
GnuTLS
(ideally version 3.2 or newer)libuuid
CMake
(2.8 or newer, check with)make
Note that some OSes (Darwin, FreeBSD ...) include libuuid
functionality in libc
, check the following slides for more detailed instructions.
You don't necessarily need the latest version of all components, but it is a good idea if you can. GnuTLS is a security component, and as such, it is very important that it is current.
Using GnuTLS version 2.12.x is neither adequately secure, nor production quality. Please check the slide describing the GnuTLS-Problems for details.
We have detailed instructions for the following operating operating systems on the following slides:
A note on other operating systems:
In case you can add your operating system of choice, please send an email to<EMAIL_ADDRESS>(Thank you!).
Install dependencies:
$ sudo yum install gcc-c++
$ sudo yum install gnutls-devel
$ sudo yum install libuuid-devel
$ sudo yum install cmake
$ sudo yum install gnutls-bin
Install dependencies:
$ sudo apt install g++
$ sudo apt install libgnutls28-dev
$ sudo apt install uuid-dev
$ sudo apt install cmake
$ sudo apt install gnutls-bin
Install dependencies:
$ sudo dnf install gcc-c++
$ sudo dnf install gnutls-devel
$ sudo dnf install libuuid-devel
$ sudo dnf install cmake
$ sudo dnf install gnutls-utils
Install dependencies:
$ sudo zypper install gcc-c++
$ sudo zypper install libgnutls-devel
$ sudo zypper install libuuid-devel
$ sudo zypper install cmake
$ sudo zypper install gnutls-utils
Install dependencies:
$ sudo apt install g++
$ sudo apt install libgnutls28-dev
$ sudo apt install uuid-dev
$ sudo apt install cmake
$ sudo apt install gnutls-utils
Install Xcode from Apple, via the AppStore, launch it, and select from some menu that you want the command line tools.
We expect you to have Homebrew installed on your Mac.
$ brew install cmake
$ brew install git
$ brew install gnutls
Start the Cygwin GUI and install the following packages and their dependencies.
GnuTLS
libuuid
CMake
make
gcc-c++
gnutls-utils
Installing Taskserver from a tarball is a matter of downloading the tarball, extracting it, satisfying dependencies and building the server.
The next step is to obtain the code. This means getting the Task Server 1.1.0 (or newer) source tarball. You should check for the latest stable release here:
http://taskwarrior.org/download/
You can download the tarball with curl
, as an example of just one of many ways to download the tarball.
$ curl -LO https://taskwarrior.org/download/taskd-latest.tar.gz
Expand the tarball, and build the Taskserver.
$ tar xzf taskd-latest.tar.gz
$ cd taskd-latest
$ cmake -DCMAKE_BUILD_TYPE=release .
...
$ make
...
We will refer to the directory where you extracted the data to as SOURCEDIR
(in the example above it is taskd-latest
).
If you ever want to build the software again, do some cleanup.
$ cd taskd-latest
$ make clean
...
$ rm CMakeCache.txt
...
Now install Taskserver. This copies files into the right place, and installs man pages.
$ sudo make install
...
Run the taskd
command to verify that the server is installed, and the location is in your $PATH
.
You should see something like this:
$ taskd
Usage: taskd -v|--version
...
Installing Taskserver from git is a matter of cloning the git repository and building the server.
The same dependencies as for installation from tarball apply. Please check the corresponding slides.
Now clone the repository like this:
$ git clone --recurse-submodules=yes \
https://github.com/GothenburgBitFactory/taskserver.git \
taskserver.git
...
It is highly recommended that you build the stable version. This involves simply executing the next command.
$ cd taskserver.git
$ git checkout master
...
Only under special circumstances you should build the unstable development version.
The unstable development version is at no point guaranteed to work or even compile. The only time it does stabilize is right at the end of the development cycle, and in that case, you should wait until the release.
The stable version is always merged to the master
branch, which is the default branch, so ordinarily nothing needs to be done.
To build an unstable branch, first determine which branch by looking at the available branches:
$ cd taskserver.git
$ git branch -a
* master
remotes/origin/1.1.0
remotes/origin/1.1.1
remotes/origin/1.2.0
remotes/origin/HEAD -> origin/master
remotes/origin/master
The convention we use is that master
represents the stable release.
The numbered branches represent the latest development (1.2.0, the 'highest' branch number, ending in '.0') and a patch branch (1.1.1, ending in a non-zero number).
Patch branches are reserved for emergency releases, so in this example you would choose to build 1.2.0 as the latest development branch like this (please not that starting with version 1.2.0 we make use of submodules).
$ git checkout 1.2.0
Branch 1.2.0 set up to track remote branch 1.2.0 from origin.
Switched to a new branch '1.2.0'
$ git submodule init
Submodule 'src/libshared' (https://git.tasktools.org/scm/tm/libshared.git) registered for path 'src/libshared'
$ git submodule update
Cloning into 'src/libshared'...
remote: Counting objects: 2180, done.
remote: Compressing objects: 100% (1379/1379), done.
remote: Total 2180 (delta 1641), reused 1018 (delta 796)
Receiving objects: 100% (2180/2180), 369.13 KiB | 554.00 KiB/s, done.
Resolving deltas: 100% (1641/1641), done.
Checking connectivity...
done.
Submodule path 'src/libshared': checked out '2b0b70d90acb9a3ff3548befab9db8beb85a0c2d'
Now build the Taskserver.
$ cd taskserver.git
$ cmake -DCMAKE_BUILD_TYPE=release .
...
$ make
...
In this case the SOURCEDIR
is taskserver.git
.
Having built the server, now build and run the unit tests. Although this is an optional step, it is a good idea to know whether the build works on your platform.
$ cd test # from SOURCEDIR
$ make
...
$ ./run_all
Pass: 2920
Fail: 0
Skipped: 0
Runtime: 1 seconds
$ cd ..
This example shows that all 2,920 tests pass. If you see test failures, stop and report them.
Note that there are some unit tests that fail if you have not built the latest commit. Seeing 4 test failures may mean all is well. Seeing 30 failures does not.
Now install Taskserver. This copies files into the right place, and installs man pages.
$ sudo make install
...
Run the taskd
command to verify that the server is installed, and the location is in your $PATH
.
You should see something like this:
$ taskd
Usage: taskd -v|--version
...
We assume that you will do all configuration with the taskd user you chose to run the server with.
Configuring the server is straightforward, but needs a little planning.
A location for the data must be chosen and created.
The TASKDDATA
environment variable will be used to indicate that location to all the taskd
commands.
$ export TASKDDATA=/var/taskd
$ sudo mkdir -p $TASKDDATA
If the TASKDDATA
variable is not set, then most taskd
commands require the --data ...
argument.
There are two 'D's in TASKDDATA
, and omitting one is a common mistake.
The user that will run the server must have write permissions in that directory.
Now we let the server initialize that directory:
$ taskd init
You must specify the 'server' variable, for example:
taskd config server localhost:53589
Created /var/taskd
It is a good idea to copy the pki
subdirectory from your SOURCEDIR
to your TASKDDATA
directory.
If you installed from a package (manager) search for the pki directory, find / -name pki -type d
(example /usr/share/taskd/pki/
for Ubuntu).
Now we create certificates and keys. The command below will generate all the certs and keys for the server, but this uses self-signed certificates, and this is not recommended for production use. This is for personal use, and this may be acceptable for you, but if not, you will need to purchase a proper certificate and key, backed by a certificate authority.
The scripts make assumptions that are guaranteed to be wrong for you.
Specifically the generate.server
script has a hard-coded CN
entry that is not going to work.
You need to edit the vars
file, which you find in the pki
subdirectory in your SOURCEDIR
.
CN=localhost
You will need to modify this value to match your server.
Most probably the result of hostname -f
is exactly what you need ("yourserver.example.com").
The value of CN (Common Name) is important.
It is this value against which Taskwarrior validates the servername, so use a value similar to ack.example.com
, don't expect that example to work for you.
If you do not change this value, the only option for the client is to skip some or all certificate validation, which is a bad idea.

Here is is assumed that you installed from the source tarball.
$ cd ~/taskd-1.1.0/pki
$ ./generate
...
$ cp client.cert.pem $TASKDDATA
$ cp client.key.pem $TASKDDATA
$ cp server.cert.pem $TASKDDATA
$ cp server.key.pem $TASKDDATA
$ cp server.crl.pem $TASKDDATA
$ cp ca.cert.pem $TASKDDATA
$ taskd config --force client.cert $TASKDDATA/client.cert.pem
$ taskd config --force client.key $TASKDDATA/client.key.pem
$ taskd config --force server.cert $TASKDDATA/server.cert.pem
$ taskd config --force server.key $TASKDDATA/server.key.pem
$ taskd config --force server.crl $TASKDDATA/server.crl.pem
$ taskd config --force ca.cert $TASKDDATA/ca.cert.pem
There are three classes of key/cert here. There is the CA (Certificate Authority) cert, which has cert signing capabilities and is used to sign and verify the other certs.
There are the server key/certs, which are used to authenticate the server and encrypt.
Finally there are client key/certs, which are not what you might expect. These are for API access, and not for your Taskwarrior client. Those are created later.
Now we configure some basic details for the server. The chosen port is 53589. Note that we allow Taskwarrior clients specifically.
$ cd $TASKDDATA/..
$ taskd config --force log $PWD/taskd.log
$ taskd config --force pid.file $PWD/taskd.pid
$ taskd config --force server localhost:53589
Note that we have chosen localhost:53589
, but this choice has consequences.
The name localhost
is not network visible, which limits the server to only serving clients on the same machine.
Use your full machine name for proper network addressability.
You can look at all the configuration settings:
$ taskd config
You can view all the supported settings with:
$ man taskdrc
You can now to launch the server:
$ taskdctl start # analogue stop to stop the server
This command launched the server as a daemon process.
This command requires the TASKDDATA
variable.
Your server is now running, and ready for syncing.
Check that your server is running by looking in the taskd.log
file, or running this:
$ ps -leaf | grep taskd
A daemon server is typically how you would want to run Taskserver, but there may be times when you need to run the server attached to a terminal. These two commands are identical:
$ taskdctl start
$ taskd server --data $TASKDDATA --daemon
By omitting the --daemon
option, the server remains attached to the terminal.
Then to stop the server you can enter Ctrl-C
.
The interactive mode is really only useful for debugging, in conjunction with TLS debug mode, like this:
$ taskd config debug.tls 3
$ taskd server --data $TASKDDATA
...
With a debug.tls
setting that is non-zero, you see lots of security-related diagnostic output.
You can start Taskserver using a systemd-unitfile (called taskd.service
) like the one on the next slide (please add the contents of $TASKDDATA
not the variable itself).
Running the Taskserver as root is not recommended, please add an appropriate user and group to run the daemon with ($TASKDUSER
and $TASKDGROUP
).
[Unit]
Description=Secure server providing multi-user, multi-client access to Taskwarrior data
Requires=network.target
After=network.target
Documentation=http://taskwarrior.org/docs/#taskd
[Service]
ExecStart=/usr/local/bin/taskd server --data $TASKDDATA
Type=simple
User=$TASKDUSER
Group=$TASKDGROUP
WorkingDirectory=$TASKDDATA
PrivateTmp=true
InaccessibleDirectories=/home /root /boot /opt /mnt /media
ReadOnlyDirectories=/etc /usr
[Install]
WantedBy=multi-user.target
Afterwards prepare systemd to recognise the file. The following commands need to be run as root-user.
$ cp taskd.service /etc/systemd/system
$ systemctl daemon-reload
$ systemctl start taskd.service
$ systemctl status taskd.service
In case everything is running fine, enable the script to start Taskserver on every boot.
$ systemctl enable taskd.service
A user account must be created, along with a key, cert and ID, before syncing may occur.
Before creating a user account, you may need to create an organization. An organization consists of a group of zero or more users. You can get away with just one organization, and in this example, we will create just one, named 'Public'.
You can create as many organizations as you wish (even one per user), and the purpose is simply to group users together. Future features will utilize this.
$ taskd add org Public
Created organization 'Public'
Now the organization 'Public' exists, we can add users to that organization.
Now we add a new user, named 'First Last' as an example. You can use any name you wish, and if it contains spaces, quote the name as shown.
$ taskd add user 'Public' 'First Last'
New user key: cf31f287-ee9e-43a8-843e-e8bbd5de4294
Created user 'First Last' for organization 'Public'
Note that you will get a different 'New user key' than is shown here, and you will need to retain it, to be used later for client configuration. Note that the key is just a unique id, because your name alone is not necessarily unique.

Here it is assumed that you installed from the source tarball.
$ cd ~/taskd-1.1.0/pki
$ ./generate.client first_last
This will generate a new key and cert, named first_last.cert.pem
and first_last.key.pem
.
It is not important that 'first\_last' was used here, just that it is something unique, and valid for use in a file name.
It has no bearing on security.
Certificates coming from Let's encrypt have not been successfully used by anyone.
Please remember that Let's encrypt only generates servers, but we need a client certificate as well.
A working scenario would be highly appreciated.
You have now created a new user account on the server, created a new client cert and key, and have details that need to be transferred to the user, to set up a sync client.
ca.cert.pem
is the certificate authority, and the only way to validate self-signed certs like ours.
first_last.cert.pem
is the client certificate.first_last.key.pem
is the client key.cf31f287-ee9e-43a8-843e-e8bbd5de4294
Public
.First Last
.
The server address and port, host.domain:53589
is needed as well.
In the server configuration we used localhost
as an example.
With localhost
your server can not be reached from outside the machine your are running it on.
Whatever you actually used there, should be used here.
If you have configured Taskserver and created a user account (or better yet, someone created an account for you) then you now have details needed in the configuration of your Taskwarrior client.
Now we feed this information to Taskwarrior.
Copy the Cert, Key and CA to your ~/.task
directory.
The reason we are copying the CA cert is because this is a self-signed cert, and we need the CA to validate against.
Alternately we could force Taskwarrior to trust all certs, but that is not recommended.
$ cp first_last.cert.pem ~/.task
$ cp first_last.key.pem ~/.task
$ cp ca.cert.pem ~/.task
Now we need to make Taskwarrior aware of these certs:
$ task config taskd.certificate -- ~/.task/first_last.cert.pem
$ task config taskd.key -- ~/.task/first_last.key.pem
$ task config taskd.ca -- ~/.task/ca.cert.pem
Now set the server info:
$ task config taskd.server -- host.domain:53589
Finally we provide the credentials, which combine the organization, account name and user key:
$ task config taskd.credentials -- Public/First Last/cf31f287-ee9e-43a8-843e-e8bbd5de4294
Your Taskwarrior is now ready to sync.
It is possible to configure Taskwarrior's trust level, which determines how the server certificate is treated.
You could specify taskd.trust=ignore hostname
to skip certificate hostname validation.
This is a bad idea.
You can also specify taskd.trust=allow all
to perform no validation.
This is a worse idea.
The default value is taskd.trust=strict
which performs the most stringent verification, and is more secure.
For Taskwarrior 2.3.0 you can specify taskd.trust=yes
in order to skip certificate validation.
This is a bad idea.
The default is taskd.trust=no
, which does not trust the server certificate, which is more secure.
You will do this differently depending on whether this is the first sync per device, or one of the many subsequent syncs.
The first time you sync is special - the client sends all your tasks to the server. This is something you should only do once on only one device.
$ task sync init
Please confirm that you wish to upload all your pending tasks to the Task Server (yes/no) yes
Syncing with host.domain:53589
Sync successful. 2 changes uploaded.
You should get an indication that tasks were uploaded, in this case 2 of them.
Please note that older Taskwarrior versions - before 2.5.1 - only sync the pending tasks and not all tasks.
After the first time sync, you switch and just use this command:
$ task sync
Syncing with host.domain:53589
Sync successful. No changes.
This will give you feedback about what happened. Please note that it is perfectly safe to run this command as often as you wish. Syncing is safe and does not consume great system resources.
Note that if your client is a mobile device, a sync command may consume some of your data usage. Act accordingly.
But it does require network connectivity, and if there is no connectivity you will be notified. It is not a problem if a sync fails because of this, because the next sync that works will catch up with all the changes, and do the right merging. Taskwarrior and Taskserver were designed to work together, and tolerate intermittent connectivity.
After you modify data locally, Taskwarrior will start notifying you that you need to sync, after commands, like this:
$ task project:foo list
No matches.
There are local changes. Sync required.
This is just a reminder to sync.
Respond with a sync, and the reminder goes away:
$ task sync
Syncing with <server>:<port>
Sync successful. 1 changes uploaded.
If you do not respond with a sync, then local changes accumulate unseen by other clients. When you do eventually sync, the data will be properly propagated, so it is a question of whether you need current data on the server. It is perfectly fine to allow weeks to go by without a sync.
Please note there is a troubleshooting guide as well.
You can find the recent version here.
As a last resort, ask for help. But please make sure you have carefully reviewed your setup, and gone through the checks above before asking. No one wants to lead you through the steps above to discover that you didn't.
We'll ask you to provide the diagnostics
output for both Taskwarrior and Taskserver, then we're going to go through the steps above, because this is our checklist also.
There are several ways of getting help:
There are several ways of getting help:


Find my iPhone
Apple ID:
Password:
Sign in...
Welcome! you're successfully Signed in
Forgot Apple ID or Password?
Setup Instructions
Your Session Expired
Please Try again later!


public class BuildLocationFactory
extends java.lang.Object
| Modifier and Type | Field and Description |
|---|---|
private InformationStorage |
informationStorage |
private int |
maxDistanceGeysers |
| Constructor and Description |
|---|
BuildLocationFactory(InformationStorage informationStorage) |
| Modifier and Type | Method and Description |
|---|---|
private void |
addUncheckedRegions(bwta.Region currentRegion,
java.util.HashSet<bwta.Region> alreadyCheckedRegions,
java.util.Queue<bwta.Region> regionsToCheck)
Function for adding all immediately accessible Regions from the provided
one that are not already checked (= Inside the provided HashSet) to the
given Queue of Regions to check.
|
private EnemyUnit |
extractClosestEnemyBuilding(bwapi.TilePosition playerStartLocation)
Function for extracting the closest EnemyUnit (Building) from the
currently known ones.
|
private java.util.HashSet<bwapi.Unit> |
extractFreeGeysers()
Function for extracting all geysers on the map without any refinery on
them.
|
private bwapi.Unit |
extractGeyserNearExistingCenter(java.util.HashSet<bwapi.Unit> freeGeysers)
Function for extracting a geyser from the provided HashSet of free
geysers that is near an already existing center building.
|
private bwapi.Unit |
extractGeyserNearNextCenterLocation(java.util.HashSet<bwapi.Unit> freeGeysers)
Function for extracting a geyser from the provided HashSet of free
geysers that is near the next generated center build location.
|
private java.util.HashSet<bwapi.TilePosition> |
extractRegionTilePositions(bwta.Region region)
Function for retrieving the TilePositions inside a specific Region.
|
private java.util.HashSet<bwapi.TilePosition> |
extractUncontendedRegionTilePositions(bwta.Region region)
Function for retrieving the uncontended TilePositions inside a
specific Region.
|
private bwapi.TilePosition |
findCenterBuildLocation()
Function for finding a suitable building location for a center Unit.
|
private bwapi.TilePosition |
findRefineryBuildLocation()
Function for finding a suitable building location around a given
TilePosition with a max range for a refinery.
|
private bwapi.TilePosition |
forceFindStandardBuildLocation(bwapi.UnitType building,
bwapi.TilePosition targetTilePosition,
int maxIterations,
ConstructionWorker worker)
Function for initializing a force search for a possible construction
spot.
|
bwapi.TilePosition |
generateBuildLocation(bwapi.UnitType building,
bwapi.TilePosition targetTilePosition,
ConstructionWorker worker)
Function for finding a suitable building location around a given
TilePosition.
|
java.util.HashSet<bwapi.TilePosition> |
generateNeededTilePositions(bwapi.UnitType unitType,
bwapi.TilePosition targetTilePosition)
Function for finding all required TilePositions of a building plus a
additional row at the bottom, if the building can train Units.
|
private java.util.HashSet<bwapi.TilePosition> |
generatePossibleAdjacentTilePositions(bwapi.TilePosition tilePosition,
java.util.HashSet<bwapi.TilePosition> regionTilePositions,
java.util.HashSet<bwapi.TilePosition> checkedTilePositions)
Function for generating the TilePositions that are the direct neighbours
of a provided TilePosition instance.
|
private bwapi.TilePosition |
getClosestTilePosition(bwapi.Position target,
java.util.HashSet<bwapi.TilePosition> tilePositions)
Function for extracting the closest TilePosition to a given Position from
a HashSet of TilePosition instances.
|
private boolean |
isBaseLocationFree(bwta.BaseLocation baselocation)
Function for testing if a base location is already occupied or if it is
free.
|
private boolean |
isInRegionAndUnchecked(bwapi.TilePosition tilePosition,
java.util.HashSet<bwapi.TilePosition> regionTilePositions,
java.util.HashSet<bwapi.TilePosition> checkedTilePositions)
Function for checking if a TilePosition instance is inside the HashSet of
Region TilePositions and not inside the ones marking the already checked
ones.
|
private boolean |
isTilePositionValidConstructionSpot(bwapi.UnitType building,
bwapi.TilePosition possibleTilePosition,
java.util.HashSet<bwapi.TilePosition> currentRegionTilePositions,
java.util.HashSet<bwapi.TilePosition> currentRegionUncontendedTilePositions)
Function for checking if a provided TilePosition can be used as a
construction spot.
|
private void |
sortFreeBaseLocations(java.util.List<bwta.BaseLocation> baseLocations,
bwapi.TilePosition playerStartLocation,
EnemyUnit closestEnemyBuilding)
Function for sorting the provided BaseLocations based on their distance
towards the closest enemy buildings known.
|
private InformationStorage informationStorage
private int maxDistanceGeysers
public BuildLocationFactory(InformationStorage informationStorage)
public java.util.HashSet<bwapi.TilePosition> generateNeededTilePositions(bwapi.UnitType unitType, bwapi.TilePosition targetTilePosition)
unitType
- the UnitType whose TilePositions are going to be calculated.targetTilePosition
- the TilePosition the Unit is going to be constructed /
targeted at.public bwapi.TilePosition generateBuildLocation(bwapi.UnitType building, bwapi.TilePosition targetTilePosition, ConstructionWorker worker)
building
- the UnitType of the building that is going to be built.targetTilePosition
- the TilePosition the new TilePosition is going to be
calculated around.worker
- the ConstructionWorker that is going to be constructing the
building.private bwapi.TilePosition findCenterBuildLocation()
private boolean isBaseLocationFree(bwta.BaseLocation baselocation)
baselocation
- the BaseLocation that is going to be checked.private EnemyUnit extractClosestEnemyBuilding(bwapi.TilePosition playerStartLocation)
playerStartLocation
- the TilePosition the Player started at.private void sortFreeBaseLocations(java.util.List<bwta.BaseLocation> baseLocations, bwapi.TilePosition playerStartLocation, EnemyUnit closestEnemyBuilding)
freeBaseLocations
- the List of free BaseLocations that is going to be sorted.playerStartLocation
- the Player's starting location which is necessary for sorting
the List of free BaseLocations.closestEnemyBuilding
- the closest enemy building. Can be null and is then not
considered in the sorting of the List.private bwapi.TilePosition findRefineryBuildLocation()
private bwapi.Unit extractGeyserNearExistingCenter(java.util.HashSet<bwapi.Unit> freeGeysers)
freeGeysers
- the HashSet of geysers without any refinery on them.private bwapi.Unit extractGeyserNearNextCenterLocation(java.util.HashSet<bwapi.Unit> freeGeysers)
freeGeysers
- the HashSet of geysers without any refinery on them.private java.util.HashSet<bwapi.Unit> extractFreeGeysers()
private bwapi.TilePosition forceFindStandardBuildLocation(bwapi.UnitType building, bwapi.TilePosition targetTilePosition, int maxIterations, ConstructionWorker worker) throws java.lang.Exception
building
- the UnitType of the building that is going to be built.targetTilePosition
- the TilePosition the new TilePosition is going to be
calculated around.maxIterations
- the max number of iterations until the search is stopped.worker
- the ConstructionWorker that is going to be constructing the
building.java.lang.Exception
- an Exception is thrown when the maximum number of iterations
is reached.private java.util.HashSet<bwapi.TilePosition> extractRegionTilePositions(bwta.Region region)
region
- the Region instance whose TilePositions are going to be
returned.private java.util.HashSet<bwapi.TilePosition> extractUncontendedRegionTilePositions(bwta.Region region)
region
- the Region instance whose uncontended TilePositions are going
to be returned.private void addUncheckedRegions(bwta.Region currentRegion, java.util.HashSet<bwta.Region> alreadyCheckedRegions, java.util.Queue<bwta.Region> regionsToCheck)
currentRegion
- the Region whose neighbour-Regions are going to be added
towards the Queue.alreadyCheckedRegions
- the Regions that are going to be ignored.regionsToCheck
- the Queue which the neighbour Regions are going to be added
to.private bwapi.TilePosition getClosestTilePosition(bwapi.Position target, java.util.HashSet<bwapi.TilePosition> tilePositions)
target
- the target Position instance to which the distance will be
calculated.tilePositions
- the HashSet of TilePositions which the function will iterate
over.private java.util.HashSet<bwapi.TilePosition> generatePossibleAdjacentTilePositions(bwapi.TilePosition tilePosition, java.util.HashSet<bwapi.TilePosition> regionTilePositions, java.util.HashSet<bwapi.TilePosition> checkedTilePositions)
tilePosition
- the TilePosition whose neighbours are being generated.regionTilePositions
- a HashSet containing all possible TilePositions that can be
returned.checkedTilePositions
- a HashSet containing all TilePositions that must not be
returned.private boolean isInRegionAndUnchecked(bwapi.TilePosition tilePosition, java.util.HashSet<bwapi.TilePosition> regionTilePositions, java.util.HashSet<bwapi.TilePosition> checkedTilePositions)
tilePosition
- the TilePosition instance that is going to be checked.regionTilePositions
- the HashSet of Region TilePositions.checkedTilePositions
- the HashSet of TilePositions that are forbidden / already
marked.private boolean isTilePositionValidConstructionSpot(bwapi.UnitType building, bwapi.TilePosition possibleTilePosition, java.util.HashSet<bwapi.TilePosition> currentRegionTilePositions, java.util.HashSet<bwapi.TilePosition> currentRegionUncontendedTilePositions)
building
- the type of building that is going to be constructed.possibleTilePosition
- the TilePosition that is being tested as a possible
construction spot.currentRegionTilePositions
- the possible TilePositions of the Region.currentRegionUncontendedTilePositions
- the free TilePositions of the Region.


After recently watching William Castle's spooky, funny classic "House on Haunted Hill," one is instantly reminded of the innocence that existed in horror films of the past. Director William Castle pushed for publicity and got it by promoting wild gimmicks in theatres. In the case with this film, a plastic skeleton would emerge from above the screen and terrorize the audience - the gimmick was known as "Emergo." Kids would toss popcorn at the skeleton but Castle's brilliance was in attracting an audience and he did. "House on Haunted Hill" does not need such external effects because it does succeed on its own merits.
This quaint horror item stars the benelovent Vincent Price as Frederick Loren, a millionaire who invites a group of selected guests to stay at a haunted house for one night for $10,000 - the trick is to spend an entire night in the house. Unfortunately, once the servants leave at midnight, there is no way to leave the house, no electricity (candles are in abundance) and the phone line is dead.
The guests include Elisha Cook Jr. (the Steve Buscemi of his day) as Watson Pritchard, a believer in ghosts who has a disturbing family history in the dreaded house, Carolyn Craig as Nora Manning, a secretary who needs the money to support her family, Richard Long as a suave, brave pilot who thrives on big thrills, Julie Mitchum as a gossip columnist aiming to pay back some gambling debts, and Dr. David Trent (Alan Marshal), who uses the opportunity to do a study on hysteria. And the coup de resistance is not a walking skeleton but a lovely, duplicitous blonde, Mr. Loren's young wife (Carol Ohmart) - afraid that her husband will poison her as he has the former wives.
The movie begins with lots of wicked, black humor touches such as the hearses that arrive in unison at the house, the delicacy of Price's line readings when offering booze to the curious guests and explaining the strategy of the long evening, the chandelier crashing down on some guests while Price looks on with amusement, the first conversation between Price and Ohmart as they talk about poison, death and jealousy, and so on.
The first half of "House on Haunted Hill" is chock full of moody atmosphere and shock effects, some of it surpassing even 1963's "The Haunting." After a while, director Castle can't resist the obligatory "who's there?" routine and the seemingly ghostly, floating apparitions appearing outside windows and darkly lit rooms. Oh, and there is an awful lot of screaming courtesy of Nora (a whiner if I ever knew one, and why does nobody ever hear her in the entire movie?). There is also a surprise ending that is more anticlimactic and illogical given the numerous plot holes preceding it. For instance, what is the deal with the caretakers? Why is one blind woman who seemed to be a ghost involved in scaring the bejesus out of everyone?  And how does one keep a vat of acid in a basement for so long?
Of course, I am nitpicking a movie that should not be picked out for logic or narrative cohesion, nor is director Castle the kind of man to care as long as people are entertained (imagine what he might have done with "Rosemary's Baby" if Polanski was not hired to direct). If you want an innocent, good old time at the movies with some spooks and occasional scares and the pleasing presence of the reliable Vincent Price, then by all means go and enjoy. If you are expecting the seriousness and chilling air of "The Haunting," look elsewhere.
For more reviews, check out JERRY AT THE MOVIES at http://buffs.moviething.com/buffs/faust/
E-mail with any questions, complaints or general comments at<EMAIL_ADDRESS>or at<EMAIL_ADDRESS>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