Introduction¶
If you haven't yet seen the first post for this series, please take a minute to read that first... Are you back? Great. Let's enter the wormhole...
This post is going to delve into the mechanics of feature engineering for the sorts of time series data that you may use as part of a stock price prediction modeling system.
I'll cover the basic concept, then offer some useful python code recipes for transforming your raw source data into features which can be fed directly into a ML algorithm or ML pipeline.
Anyone who has dabbled with any systems-based trading or charting already has experience with simple forms of feature engineering, whether or not they realized it. For instance:
- Converting a series of asset prices into percent change values is a simple form of feature engineering
- Charting prices vs. a moving average is an implicit form of feature engineering
- Any technical indicator (RSI, MACD, etc...) are also forms of feature engineering
The process takes in one or more columns of "raw" input data (e.g., OHLC price data, 10-Q financials, social media sentiment, etc...) and converts it into many columns of engineered features.
Motivation¶
I believe (and I don't think I'm alone here!) that featue engineering is the most under-appreciated part of the art of machine learning.
Feature engineering is also one of the key areas where those with domain expertise can shine. Those whose expertise in investing is greater than their skill in machine learning will find that feature engineering will allow them to make use of that domain expertise.
Feature engineering is a term of art for data science and machine learning which refers to pre-processing and transforming raw data into a form which is more easily used by machine learning algorithms. Much like industrial processing can extract pure gold from trace elements within raw ore, feature engineering can extract valuable "alpha" from very noisy raw data.
You have to dig through a lot of dirt to find gold.
Principles and guidelines¶
Feature engineering is fundamentally a creative process which should not be overly constrained by rules or limits.
However, I do believe there are a few guidelines to be followed:
No peeking: Peeking (into the future) is the "original sin" of feature engineering (and prediction modeling in general). It refers to using information about the future (or information which would not yet be known by us...) to engineer a piece of data.
This can be obvious, like using next_12_months_returns. However, it's most often quite subtle, like using the mean or standard deviation across the full time period to normalize data points (which implicitly leaks future information into our features. The test is whether you would be able to get the exact same value if you were calculating the data point at that point in time rather than today.
- Only the knowable: A corrolary to the above, you also need to be honest about what you would have known at the time, not just what had happened at the time. For instance, short borrowing data is reported by exchanges with a considerable time lag. You would want to stamp the feature with the date on which you would have known it.
Complete the table: Many machine learning algorithms expect that every input feature will have a value (of a certain type) for each observation. If you envision a spreadsheet where each feature is a column and each observation is a row, there should be a value in each cell of the table. Quite often, some features in the table will naturally update themselves more frequently than others.
Price data updates almost continuously, while short inventory, analyst estimates, or EBITDA tend to update every few weeks or months. In these cases, we'll use a scheme like last observation carried forward (LOCF) to always have a value for each feature in the naturally lower frequency columns. Of course, we will be careful to avoid inadvertent peeking!
- Avoid false ordinality: Finally, it's extremely important to represent features in a way that captures ordinality only if it has meaning. For instance, it's usually a bad idea to represent "day of the week" as an integer 1 to 7 since this implicitly tells the model to treat Friday as very similar to Thursday, but "a little more". It would also say that Sunday and Monday are totally different (if Sunday =7 and Monday =1). We could miss all manner of interesting patterns in the data.
import numpy as np
import pandas as pd
pd.core.common.is_list_like = pd.api.types.is_list_like # remove once updated pandas-datareader issue is fixed
# https://github.com/pydata/pandas-datareader/issues/534
import pandas_datareader.data as web
%matplotlib inline
def get_symbols(symbols,data_source, begin_date=None,end_date=None):
out = pd.DataFrame()
for symbol in symbols:
df = web.DataReader(symbol, data_source,begin_date, end_date)\
[['AdjOpen','AdjHigh','AdjLow','AdjClose','AdjVolume']].reset_index()
df.columns = ['date','open','high','low','close','volume'] #my convention: always lowercase
df['symbol'] = symbol # add a new column which contains the symbol so we can keep multiple symbols in the same dataframe
df = df.set_index(['date','symbol'])
out = pd.concat([out,df],axis=0) #stacks on top of previously collected data
return out.sort_index()
prices = get_symbols(['AAPL','CSCO'],data_source='quandl',\
begin_date='2015-01-01',end_date='2017-01-01')
With the data collected, we can create a new dataframe called "features" which will be used to compile all of the features we engineer. Good practice is to create this dataframe with an index from your downloaded data, since you should only have new feature values as you have new primary source data.
As the simple example below illustrates, we can then construct features from the data and store into multiple feature columns. Note that there will often be null values inserted if the formula doesn't produce valid values for each row index.
features = pd.DataFrame(index=prices.index).sort_index()
features['f01'] = prices.close/prices.open-1 # daily return
features['f02'] = prices.open/prices.groupby(level='symbol').close.shift(1)-1
features.tail()
Side note: I favor following a bland naming convention like f01, f02, etc... for each feature (and then documenting what each feature represents...) rather than using descriptive column names. My reasons for this are three-fold:
- Descriptive names tend to be long and cumbersome to use,
- They're rarely truely self-describing, and
- It's often useful to create an abstraction to conceal from the modeler (either yourself or someone else) what each represents. Think of it like a blind taste test.
Following this basic code pattern, we can generate infinite variations into our features. This is where your domain expertise and analytical creativity come into play!
My suggestion is to make sure you have a reasonable hypothesis before you create any feature, but don't be afraid to try many variations on a theme. There is much to be learned from trying several flavors of feature transformations out.
Common Transforms¶
In the interest of accelerating your creativity, I've listed below a series of "recipes" for some of the transforms I've found useful - especially when using linear or quasi-linear models - extract meaningful relationships.
Logs¶
Many times, values like market cap, volume, revenue can map better to the prediction target if put into log space. This is easy to do via pandas+numpy:
features['f03'] = prices.volume.apply(np.log) # log of daily volume
Differencing¶
It's often more important to know how a value is changing than to know the value itself. The diff()
method will calculate the change in value since the prior period (i.e., current minus prior). NOTE: the "groupby" is critically important since if it were omitted we would be comparing the difference in volume between symbols, which is not what we want.
features['f03'] = prices.groupby(level='symbol').volume.diff() # change since prior day
features['f04'] = prices.groupby(level='symbol').volume.diff(50) # change since 50 days prior
Rate of Change¶
Even more common is to want the rate of change as expressed by percent change. Pandas has the handy pct_change()
method for this purpose, but beware that you'll get odd behavior if you mix this with groupby()
as shown above. I prefer to create my own lambda wrapper function as shown below.
pct_chg_fxn = lambda x: x.pct_change()
features['f05'] = prices.groupby(level='symbol').volume.apply(pct_chg_fxn)
Moving Averages¶
Sometimes, we'd rather use the moving average of a value as part of a feature. This can be the value itself if you want to minimize how "jittery" a value is. Or, more commonly, you may want to compare a value with a trailing moving average of itself.
Again, we need to use groupby since our dataframe has info on multiple symbols - and again, we need to use a lambda function wrapper to avoid error. There are other patterns which will accomplish the same thing but I find this to be cleanest.
# log of 5 day moving average of volume
ma_5 = lambda x: x.rolling(5).mean()
features['f06'] = prices.volume.groupby(level='symbol').apply(ma_5)\
.apply(np.log)
# daily volume vs. 200 day moving average
ma_200 = lambda x: x.rolling(200).mean()
features['f07'] = prices.volume/ prices.volume.groupby(level='symbol')\
.apply(ma_200)-1
# daily closing price vs. 50 day exponential moving avg
ema_50 = lambda x: x.ewm(span=50).mean()
features['f08'] = prices.close/ prices.close.groupby(level='symbol')\
.apply(ema_50)-1
Side note: Since the rolling window is an important - and somewhat arbitrary - value, you should try a range of reasonable values. I have found that it's better to use an exponentially increasing range of values rather than a linear range. In other words, use [5,10,20,40,80,160] rather than [10,20,30,40...,100].
The rationale is that values like 90 and 100 are really quite similar whereas 10 and 20 are quite different. Therefore, if you choose linearly spaced values, you'll effectively be giving the higher end of the value range more chances to succeed than the lower values - and you'll increase the likelihood of overfitting a high value.
Z-Scores¶
A very popular/useful transformation for financial time series data is the z-score. We can easily define a generalized lambda function for this, which we can use whenever needed. Importantly, it allows us to mix together very different symbols (some high-beta, some low-beta) in a way that considers the statistical significance of any movement.
zscore_fxn = lambda x: (x - x.mean()) / x.std()
features['f09'] =prices.groupby(level='symbol').close.apply(zscore_fxn)
features.f09.unstack().plot.kde(title='Z-Scores (not quite accurate)')
However, the above example has a subtle but important bug. It uses the mean of the whole time frame and the standard deviation of the whole time frame to calculate each datapoint. This means we are peeking ahead into the future and the feature is potentially very danger-prone (it'll work famously well in sample and fail to work out of sample...).
Fixing this is cumbersome, but necessary.
zscore_fun_improved = lambda x: (x - x.rolling(window=200, min_periods=20).mean())\
/ x.rolling(window=200, min_periods=20).std()
features['f10'] =prices.groupby(level='symbol').close.apply(zscore_fun_improved)
features.f10.unstack().plot.kde(title='Z-Scores (accurate)')
Percentile¶
Less commonly used - but equally useful - is the percentile transformation. Getting this done properly in pandas (with groupby and rolling) is possible but tricky. The below example returns the percentile rank (from 0.00 to 1.00) of traded volume for each value as compared to a trailing 200 day period.
Note that we need to use a lambda within a lambda to make this work properly. We're on the bleeding edge.
rollrank_fxn = lambda x: x.rolling(200,min_periods=20)\
.apply(lambda x: pd.Series(x).rank(pct=True)[0])
features['f11'] = prices.groupby(level='symbol').volume.apply(rollrank_fxn)
Another interesting application of this same pattern is to rank each stock cross-sectionally rather than longitudinally as above. In other words, where does this stock rank within all of the stocks on that day, not for all prior days of that stock. The below example isn't very meaningful with only two stocks, but quite useful when using a realistic universe. In this example, we're also making use of an earlier feature (relative volume) to compare which symbol is most heavily traded for that stock's normal range in a given day. Also note that we need to dropna()
prior to ranking because rank
doesn't handle nulls very gracefully.
features['f12'] = features['f07'].dropna().groupby(level='date').rank(pct=True)
Technical Indicators¶
Those with a taste for technical analysis may find it difficult to let go of your favored TA techniques.
While this is not my favored approach, you'll have no problem engineering features using these methods. From my cursory googling, it looked as though the open source package ta
would be a good place to start.
Very new and only one contributor but it looks fairly comprehensive and well documented. If you find that it's missing your favorite indicators, consider contributing to the package. If you know of better such packages, please post in the comments below...
As an example:
import ta # technical analysis library: https://technical-analysis-library-in-python.readthedocs.io/en/latest/
# money flow index (14 day)
features['f13'] = ta.momentum.money_flow_index(prices.high,
prices.low, prices.close, \
prices.volume, n=14, fillna=False)
# mean-centered money flow index
features['f14'] = features['f13'] - features['f13']\
.rolling(200,min_periods=20).mean()
Alternative Representations¶
A bit different than transforms are "representations", i.e., other ways to represent continuous values. All of the transforms above returned continuous values rather than "labels", and that's often a good place to start - especally for early prototypes.
However, you may want to represent the data in different ways, especially if using classification-based approaches or worried about the curse of dimensionality due to large numbers of features.
Binning¶
We can easily convert a continous variable to discrete "bins" (like 1 to 10). This loses information, of course, but sometimes loss of information is a good thing if you are removing more noise than signal.
The below example shows volumes converted into ten equally sized buckets. In other words, we've converted a continuous variable into a discrete one.
NOTE: this example is not applied in a rolling fashion, so it does suffer from some data peeking, which I've described as the original sin. At the moment, I'm failing in my efforts to implement it in a rolling way. I'd be grateful for code snippets if anyone knows how to do this offhand.
n_bins = 10
bin_fxn = lambda y: pd.qcut(y,q=n_bins,labels = range(1,n_bins+1))
features['f15'] = prices.volume.groupby(level='symbol').apply(bin_fxn)
Signing¶
Very simply, you may wish to convert continuous variables into positive or negative (1 or -1) values, depending on input. For instance, was volume increasing or decreasing today?
features['f16'] = features['f05'].apply(np.sign)
Plus-Minus¶
You may be interested in how many days in a row a value has increased (or decreased). Below is a simple pattern to do just that - it calculates the number of up-days minus the number of down days.
plus_minus_fxn = lambda x: x.rolling(20).sum()
features['f17'] = features['f16'].groupby(level='symbol').apply(plus_minus_fxn)
One-Hot Encoding¶
Possibly the most common alternative representation is "one-hot encoding" where a categorical variable is represented as a binary. For instance, month_of_year would be represented as twelve different columns, each of which was either 0 or 1. January would be [1,0,0,0,...0] etc...
This is absolutely crucial in a few circumstances. The first is where there is false meaning in the "ordinality" of values. If we were looking to test the "santa claus effect" hypothesis, it wouldn't be helpful to use a month_of_year feature where January was "the least" and December was "the most".
The second is in cases where we are representing events or "states". Does the word "lawsuit" appear within the 10-Q footnotes? Is the company in the blackout period for share buybacks?
Finally, the particular machine learning algorithm (tree-based, neural networks) may find it easier to use binary representations than continuous or discrete ones.
The below example creates twelve one-hot features, one for each month, and names them automatically
month_of_year = prices.index.get_level_values(level='date').month
one_hot_frame = pd.DataFrame(pd.get_dummies(month_of_year))
one_hot_frame.index = prices.index # Careful! This is forcing index values without usual pandas alignments!
# create column names
begin_num = int(features.columns[-1][-2:]) + 1 #first available feature
feat_names = ['f'+str(num) for num in list(range(begin_num,begin_num+12,1))]
# rename columns and merge
one_hot_frame.columns = feat_names
features = features.join(one_hot_frame)
features.iloc[:,-12:].tail()
With raw data series month
transformed into 12 individual one-hot encoding columns, we can train a model which will learn whether the fact that it's July should materially affect our predictions, based on historical patterns.
Summary¶
Whew! We made it.
From this post, you've seen a simple code pattern for creating any number of "features" from raw input data, as well as some suggestions for useful transformations and alternative representations.
If we've done it right, this has resulted in many variations of similar features. Thus, before we start building models, we need a method of selecting only those features which provide greatest insight and robustness.
I'll cover this in the next post: Feature Selection
One last thing...¶
If you've found this post useful, please follow @data2alpha on twitter and forward to a friend or colleague who may also find this topic interesting.
Finally, take a minute to leave a comment below - either to discuss this post or to offer an idea for future posts. Thanks for reading!


The TOC tree¶
Since reST does not have facilities to interconnect several documents, or split
documents into multiple output files, Sphinx uses a custom directive to add
relations between the single files the documentation is made of, as well as
tables of contents. The toctree
directive is the central element.
Note
Simple “inclusion” of one file in another can be done with the :dudir:`include` directive.
-
.. toctree::
¶ This directive inserts a “TOC tree” at the current location, using the individual TOCs (including “sub-TOC trees”) of the documents given in the directive body. Relative document names (not beginning with a slash) are relative to the document the directive occurs in, absolute names are relative to the source directory. A numeric
maxdepth
option may be given to indicate the depth of the tree; by default, all levels are included. [1]Consider this example (taken from the Python docs’ library reference index):
.. toctree:: :maxdepth: 2 intro strings datatypes numeric (many more documents listed here)
This accomplishes two things:
- Tables of contents from all those documents are inserted, with a maximum
depth of two, that means one nested heading.
toctree
directives in those documents are also taken into account. - Sphinx knows the relative order of the documents
intro
,strings
and so forth, and it knows that they are children of the shown document, the library index. From this information it generates “next chapter”, “previous chapter” and “parent chapter” links.
Entries
Document titles in the
toctree
will be automatically read from the title of the referenced document. If that isn’t what you want, you can specify an explicit title and target using a similar syntax to reST hyperlinks (and Sphinx’s cross-referencing syntax). This looks like:.. toctree:: intro All about strings <strings> datatypes
The second line above will link to the
strings
document, but will use the title “All about strings” instead of the title of thestrings
document.You can also add external links, by giving an HTTP URL instead of a document name.
Section numbering
If you want to have section numbers even in HTML output, give the toplevel toctree a
numbered
option. For example:.. toctree:: :numbered: foo bar
Numbering then starts at the heading of
foo
. Sub-toctrees are automatically numbered (don’t give thenumbered
flag to those).Numbering up to a specific depth is also possible, by giving the depth as a numeric argument to
numbered
.Additional options
You can use
caption
option to provide a toctree caption and you can usename
option to provide implicit target name that can be referenced by usingref
:.. toctree:: :caption: Table of Contents :name: mastertoc foo
If you want only the titles of documents in the tree to show up, not other headings of the same level, you can use the
titlesonly
option:.. toctree:: :titlesonly: foo bar
You can use “globbing” in toctree directives, by giving the
glob
flag option. All entries are then matched against the list of available documents, and matches are inserted into the list alphabetically. Example:.. toctree:: :glob: intro* recipe/* *
This includes first all documents whose names start with
intro
, then all documents in therecipe
folder, then all remaining documents (except the one containing the directive, of course.) [2]The special entry name
self
stands for the document containing the toctree directive. This is useful if you want to generate a “sitemap” from the toctree.You can use the
reversed
flag option to reverse the order of the entries in the list. This can be useful when using theglob
flag option to reverse the ordering of the files. Example:.. toctree:: :glob: :reversed: recipe/*
You can also give a “hidden” option to the directive, like this:
.. toctree:: :hidden: doc_1 doc_2
This will still notify Sphinx of the document hierarchy, but not insert links into the document at the location of the directive – this makes sense if you intend to insert these links yourself, in a different style, or in the HTML sidebar.
In cases where you want to have only one top-level toctree and hide all other lower level toctrees you can add the “includehidden” option to the top-level toctree entry:
.. toctree:: :includehidden: doc_1 doc_2
All other toctree entries can then be eliminated by the “hidden” option.
In the end, all documents in the source directory (or subdirectories) must occur in some
toctree
directive; Sphinx will emit a warning if it finds a file that is not included, because that means that this file will not be reachable through standard navigation.Use :confval:`exclude_patterns` to explicitly exclude documents or directories from building completely. Use the “orphan” metadata to let a document be built, but notify Sphinx that it is not reachable via a toctree.
The “master document” (selected by :confval:`master_doc`) is the “root” of the TOC tree hierarchy. It can be used as the documentation’s main page, or as a “full table of contents” if you don’t give a
maxdepth
option.Changed in version 0.3: Added “globbing” option.
Changed in version 0.6: Added “numbered” and “hidden” options as well as external links and support for “self” references.
Changed in version 1.0: Added “titlesonly” option.
Changed in version 1.1: Added numeric argument to “numbered”.
Changed in version 1.2: Added “includehidden” option.
Changed in version 1.3: Added “caption” and “name” option.
- Tables of contents from all those documents are inserted, with a maximum
depth of two, that means one nested heading.
Special names¶
Sphinx reserves some document names for its own use; you should not try to create documents with these names – it will cause problems.
The special document names (and pages generated for them) are:
genindex
,modindex
,search
These are used for the general index, the Python module index, and the search page, respectively.
The general index is populated with entries from modules, all index-generating object descriptions, and from
index
directives.The Python module index contains one entry per
py:module
directive.The search page contains a form that uses the generated JSON search index and JavaScript to full-text search the generated documents for search words; it should work on every major browser that supports modern JavaScript.
every name beginning with
_
Though only few such names are currently used by Sphinx, you should not create documents or document-containing directories with such names. (Using
_
as a prefix for a custom template directory is fine.)
Warning
Be careful with unusual characters in filenames. Some formats may interpret these characters in unexpected ways:
- Do not use the colon
:
for HTML based formats. Links to other parts may not work. - Do not use the plus
+
for the ePub format. Some resources may not be found.
Footnotes
| [1] | The LaTeX writer only refers the maxdepth option of first toctree
directive in the document. |
| [2] | A note on available globbing syntax: you can use the standard shell
constructs * , ? , [...] and [!...] with the feature that
these all don’t match slashes. A double star ** can be used to match
any sequence of characters including slashes. |


The Pacific Resort is a 5-star hotel located in Mombasa offering the best services South of the Sahara.
This is a list of accomodation
Activities offered by the hotel are found here
For travelling arrangments book here
The beauty of these hotel can be seen in these photos


TikTok settles child data class-action one day after lawsuit was filed
Firm didn't leave the clock tik-tocking
by Carly PageVINE WANNABE TikTok and its parent company ByteDance have agreed to cough up $1.1m (£835,000) to settle a lawsuit related to its "reckless" collection of children's data.
The proposed class-action, filed just last week, alleged that TikTok violated privacy laws by collecting data on underage users "in a reckless and unlawful manner" back when it was known as Musical.ly.
Under the US Children's Online Privacy Protection Act (COPPA), social media companies are explicitly barred from storing data of children under the age of 13 without express parental consent.
However, Musical.ly requested that anyone under the age of 13 creating an account handed over personal information including name, phone number, email address, photo, and bio that information would be publicly available for other users to see.
The complaint also alleges that the app collected the location data of its users, including minors, between December 2015 and October 2016.
"[Musical.ly] surreptitiously tracked, collected, and disclosed the personally identifiable information and/or viewing data … of minor children, and then sold that data to third-party advertisers so they could, in turn, market their products and services," the complaint alleged.
In a statement, TikTok - which was last week dubbed a "potential threat" by the FBI - confirmed it had reached a settlement: "TikTok is firmly committed to safeguarding the data of its users, especially our younger users.
"Although we disagree with much of what is alleged in the complaint, we have been working with the parties involved and are pleased to have come to a resolution of the issues."
This isn't the first time TikTok has been forced to pay for privacy violations. Earlier this year, the FTC reached a $5.7m (£4.3m) settlement with TikTok over COPPA violations.
At the time, FTC Chairman Joe Simons said that the company "knew many children were using the app but they still failed to seek parental consent before collecting names, email addresses, and other personal information from users under the age of 13." μ
Further reading
FBI says it considers FaceApp and TikTok a 'potential threat'
- 03 Dec 2019
TikTok faces UK probe for allowing kids to throw money at influencers for little in return
- 03 Jul 2019


Hey there. This is an in-development preview of a new thing I'm working on for DestinyRep. I completely rewrote the server for this, so I'm pretty excited about it. It's got a long way to go, but check it out. Love it or hate it, we can talk about it here on Reddit.
The leaderboard is updated when players are searched on DestinyRep. If you or a friend are missing from the list, just pull the characters up on the main page.


Directive for creating a material designed menu. The menu can either be positioned manually, or automatically, by anchoring it to an element.
This directive will automatically apply proper accessibility attributes to the contained list, and its items:
role="menuitem"
, and a tabindex="0"
attributes.disabled
on the item), will be assigned: aria-disabled="true"
,
and tabindex="-1"
.role="menu"
attribute.


This is the cupcake shop!
We offer special holiday and event cupcakes
Birthday parties
Valentines day
Christmas
Weddings
Bar Mitzvahs
Click here to see our toppings!
Thanks for checkout out our cupcakes!


“Building OpenDNS Stats” at Velocity 2009/06/23
I just finished talking about OpenDNS’s stats system at Velocity and I think it went rather well. I got the official Allspaw and Hammond seals of approval so my life is pretty much complete.
Here are the slides: http://rcrowley.org/talks/opendns_stats.pdf
Questions I expected and wasn’t asked because I only left 8 seconds for questions:
- When you catch std::bad_alloc, why do you shutdown the process
instead of just freeing some memory? I chose to exit and let
supervise
restart the process because I might have run out of memory due to a slow memory leak. Starting fresh is safer and doesn’t have any downsides. In production, each node tends to restart every day shortly after midnight, UTC as rows for the new day start being allocated. - What’s up with the waffle at the end? Wednesdays are Waffle Wednesdays at OpenDNS. We’re hiring.
I’ll update later with the video link when O’Reilly
posts. Moving pictures with sound! http://blip.tv/file/2286154/ and embedded below.


- . Hong Kong is by far the most popular tourist city in the world. Hong Kong has more tourists any other city in the world. About 26 million visitors arrived in 2017 according to Euromonitor, and this is about three million more than to second place Bangkok.
- It is rated the top business city in the world. Hong Kong is usually voted the "Best Business City in the World" in the annual readers' poll organized by Business Traveller Asia Pacific magazine. It has the lowest tax rates in Asia. It was rated #1 from 2010 to 2015, though it was #2 in 2016 and 2017. So business conditions are usually more favorable there than any other place in the world.
- Most Popular Ferry - The little Star Ferry that carries 19 million people across Victoria Harbour each year.


class Array(T)
Overview
An Array
is an ordered, integer-indexed collection of objects of type T.
Array indexing starts at 0. A negative index is assumed to be relative to the end of the array: -1 indicates the last element, -2 is the next to last element, and so on.
An Array
can be created using the usual new
method (several are provided), or with an array literal:
Array(Int32).new # => []
[1, 2, 3] # Array(Int32)
[1, "hello", 'x'] # Array(Int32 | String | Char)
An Array
can have mixed types, meaning T will be a union of types, but these are determined
when the array is created, either by specifying T or by using an array literal. In the latter
case, T will be set to the union of the array literal elements' types.
When creating an empty array you must always specify T:
[] of Int32 # same as Array(Int32)
[] # syntax error
An Array
is implemented using an internal buffer of some capacity
and is reallocated when elements are pushed to it when more capacity
is needed. This is normally known as a dynamic array.
You can use a special array literal syntax with other types too, as long as they define an argless
new
method and a <<
method. Set
is one such type:
set = Set{1, 2, 3} # => Set{1, 2, 3}
set.class # => Set(Int32)
The above is the same as this:
set = Set(typeof(1, 2, 3)).new
set << 1
set << 2
set << 3
Included Modules
- Comparable(Array(T))
- Indexable(T)
Defined in:
Instance Method Summary
- #as_10_tuple!
- #as_10_tuple?
- #as_11_tuple!
- #as_11_tuple?
- #as_12_tuple!
- #as_12_tuple?
- #as_13_tuple!
- #as_13_tuple?
- #as_14_tuple!
- #as_14_tuple?
- #as_15_tuple!
- #as_15_tuple?
- #as_16_tuple!
- #as_16_tuple?
- #as_17_tuple!
- #as_17_tuple?
- #as_18_tuple!
- #as_18_tuple?
- #as_19_tuple!
- #as_19_tuple?
- #as_1_tuple!
- #as_1_tuple?
- #as_20_tuple!
- #as_20_tuple?
- #as_2_tuple!
- #as_2_tuple?
- #as_3_tuple!
- #as_3_tuple?
- #as_4_tuple!
- #as_4_tuple?
- #as_5_tuple!
- #as_5_tuple?
- #as_6_tuple!
- #as_6_tuple?
- #as_7_tuple!
- #as_7_tuple?
- #as_8_tuple!
- #as_8_tuple?
- #as_9_tuple!
- #as_9_tuple?
- #requiring(minimum : Int32, &)
- #split_by(separator : T) : Array(Array(T))


Services
Available 24/7
Check out our social media pages or send us an email. See below for our various contact methods. DM us to learn more about how we can help.
<EMAIL_ADDRESS>@TheSoFound


This is part of PEP 20 - The Zen of Python.
Think on a good mystery novel or show. When the murderer is revealed at the end them you should be able to look back and see the line of evidence. If any detail was omitted only to be pulled out during the final show-down, then it was a poor whodunnit. All the facts required must be explicitly spelled out. Only those things the audience knows about can be implicit.
The same goes for software. Explicit does not mean that the logic must be obfuscated with lots of scaffolding. It does mean that when the code references something, a reader of said code can follow that something back to it's source and/or documentation.
This is why I am not comfortable with dependency injection. I am reading some code that all of a sudden refers to an instance of an object that has not been defined or instantiated anywhere I can find.
DRY is a fine principle. I continually refactor my code so that I do not have the same algorithms in more than one place. But, I am happy to explicitly check authorisation at the start of each servlet where I can see it. I do not consider this scaffolding or breaking the DRY principles - I am just explicitly telling the servlet what I expect.
When the dust settles and I look at all the jobs I have done is the SDLC, I still consider myself primarily a software designer. It is the support that uSDLC provides for software design that is, for me, the most exciting aspect.
I have a problem - and it is one I have not been able to see my way through. It is around communication. I can send a uSDLC driven design page to interested parties (vision holder, owner, architect, BA, etc) and they will file it with the other artifacts. If they ar dilligent they may read it and send me comments. But they don't get it. I can sit down with them for 5 minutes and the light will go on.
A uSDLC document is a living part of the application - through all the development cycles and into production. A sign-off on a uSDLC design document is a sign-off on what will reach production. Any less will automatically raise issues - any more is an unjustified expense.
I am not too worried about projects using uSDLC. The benefits become obvious to all quickly - and the automated task system will ensure that everyone is kept informed of when they need to provide input.
My problem is in how to tell people who don't use uSDLC why it would help them in their projects. Any explanation I come up with is too complex and the benefits, while huge, are unclear to the uninitiated.
In my next article or two I will walk through a design process using uSDLC. Perhaps with your help I can find a way of simplifying describing the benefits.
I have talked about the rules of three (http://en.wikipedia.org/wiki/Rule_of_three) before. For my last few projects I have used it as a template when starting the design. It is more of a guide than a rule...
One of the outstanding tasks for uSDLC is to be able to create a project with a choice of template - one of which will be this one.
Iterative divide-and-conquer will eventually leave the designer with pages defining single, possibly indivisible, pieces of functionality. It doesn't matter if the subject is a user interface, business functionality or anything else - the approach is similar.
I will often use a bullet point list to outline the functionality provided. Once I am happy that I have covered all aspects, I use a uSDLC command to split the list into separate sections. The list becomes the title pointing to an instrumentation addendum.
Adding text to each section can be kept lite. Just say enough to explain the functionality, just as if you were discussing it with the project visionary or business analyst. Most of the description, detail and restrictions are documented in the instrumentation section - information that is readable to both the business representatives and the computer.
An example may make it clearer. The first page we are likely to tackle on a web based system would be for authorisation and authentication. On that page, the first section is likely to describe each type of user the system will cater for. On a large system, this would be a page in it's own right.
Development Users
For development to proceed we need a set of users - for both manual and automatic testing. The groups are the same as for production use. A user in the test group can do special actions, but cannot, by design, change production data.
create group 'administator' create group 'operator' create group 'test' create user admin, groups: 'test', 'administrator', 'operator' create user oper, groups: 'test', 'operator' create user test, groups: 'test', 'administrator', 'operator'
As you can see above, the prose is to help the reader understand what we are trying to do. The instrumentation is human readable. It not only clearly defines the system, but can be understood by anyone with domain knowledge. A business owner may, for example, look at it and note that we need an operations manager.
Once the interested parties have been involved in iterative feedback, have them sign on - in blood preferably. The instrumentation will drive the newly created system. It should describe functionality, restrictions and edge cases where they are known. Whatever it says, the system will do - feedback is king. When the customer comes back later and complains that the system doesn't do Y, it is easy to prove whether Y was ever accounted for - and if it was it will be implemented or the instrumentation will fail.
The next article will extend the above example, while the one after that will discuss how to turn instrumentation into something your application will understand.
A practical starting point is authorisation and authentication - as most systems rely on knowledge of the operator.
The same technique of divide and conquer works inside the page. First I create a bullet point list from what I have learnt that I will need:
uSDLC allows me to split a list into separate sections with the text as the heading and linked to an instrument block. It is a good idea to edit each section and document the reason for the section. Instrumentation, like code, tells us how but rarely why. For example:
Auditing
The audit log includes logging in and all page views, successful or unsuccessful.
Now to filling in the instrumentation block. These are a list of simple statements that fully define the section while remaining readable to domain specialists as well as the computer:
set audit log checkpoint login oper check audit log oper 'log in' browse '/oper' check audit log oper 'view /oper' browse '/admin' check audit log oper 'FAILED: view /admin' logout oper check audit log oper 'log out'
Train your domain specialists to not ignore instrumentation as 'code'. If they can't understand it, then it is still not good enough. What they sign off on here is what will work in production. It will grow - either in the instrumentation block or as new sections or pages - as more information becomes available. With luck this will happen with the domain specialist reviews, but it may happen later when the working system pages are run through their paces. Get each change signed off so expectations meet actuality.
Next blog I will discuss activating the instrumentation.
There is a gap between how we communicate with each other and how we tell a computer what to do. As software becomes more powerful this gap is, in some areas, larger, not smaller. It is far easier to ask Google a natural language question than the search engine rules of a decade ago, but when it comes to having a computer help with less common tasks we have to rely on software developers to write programs that tend to be 'one size fits all'. For example:
Why do I say the gap is larger? Twenty years ago those in the more technical domains such as engineering and science would write their own software to help with their work. Today computers and computer languages are so much more complex that they need specialist to write their software. That's ok as the results are often better. The problem arises when the domain specialist needs something not foreseen. They have to get the specialist in again - if the original developers are available - if the source is up to date - if there is budget.
I blame the GUI and WYSIWYG :) I will use my a/c as an example - although the same problems exist for your accounts program or your bill paying web-site. I can set my a/c to vent, heat, cool or auto. Auto shuts everything down if the house is at temperature. What I really want is cool if the temperature is above 24 degrees, heating if below 18 degrees and venting otherwise.
In the modern world of the easy-to-use GUI I am out of luck. This is why many services like Google apps or Facebook provide an API. Unfortunately to use them you need to cross the line from domain specialist to software developer.
What is needed, along with the GUI, is a way of expressing more complex requirements in a language the domain specialist undertands. Enter the concept of a DSL or domain specific language. I suspect that one of the most common used DSLs is also one of the most difficult to grasp - the spreadsheet formula editor. Imagine a spreadsheet without a DSL - behaving like other GUI applications we use. We could highlight blocks of numbers and sum them, but would spreadsheets be as common if they were so limited?
Next week I will talk about what a DSL is and why they are not in common use.
Firstly, I believe that all computer languages are domain specific. For most modern languages the domain is 'Computer Science'. This is good because it gives software designers and developers better tools to cope with the complexities of modern requirements. It is also bad because the code we produce is incomprehensible to specialists in another domain.
So, what do I think is a DSL?
There are many good examples that meet the first four requirements, but the last two are less understood. Without these, DSL penetration will be limited. Unless a domain expert can use a DSL as easily as a point-and-click interface, they will not take the time. If changes are not monitored so we can see effects we would want the resulting DSLs in production.
I am working on both of these problems for uSDLC this year.
So, what is a DSL? It is a language that can be read by the domain specialist and also by the computer so that the domain specialist gets the response they anticipate.


Father shares 10-year-old daughter's expensive Christmas wish list featuring an iPhone 11
- A Twitter user has taken to social media to share the funny experience he had with his 10-year-old daughter
- Johnson’s daughter had given him an interesting list of things she wants for Christmas
- The long list included iPhone 11, Airpods, Macbook Air, 4000 dollars, expensive sneakers and more
As the year gradually spirals to its end, many people anticipate the celebration of the popular Christian holiday known as Christmas.
Adults might no longer be excited about Christmas as they grow up but kids are usually very happy as the celebration comes closer because they receive gifts from their parents.
Well, a Twitter user identified as Johnson, got more than what he bargained for after his 10-year-old daughter gave him an interesting list of things she wants for Christmas.
Apparently, Johnson’s daughter is not yet aware of the realities of life as she wrote her father a Christmas list that included very expensive items that even adults only dream of getting.
The list included things like an iPhone 11, a Macbook Air, Airpods, a real bunny, Gucci slides, jewelleries, 4000 dollars, vans sneakers and more.
See Johnson’s tweet and the interesting list below:
Many social media users were quite amused by the list and they wasted no time in sharing their opinion on it. See some comments below:
Very interesting comments. Who knows? Lil sis might have her daddy turn up for her.
In other news, Legit.ng reported that BBNaija 2019 star, Ella Nnabuchi, recently took to social media to beg for financial help for her ailing mother.
Ella had revealed on Instagram that her mother needed the sum of N600k for an operation. Popular intimacy therapist, Jaruma, tuned up for her and sent the money.
Jaruma also commended Ella's boldness to be able to publicly ask for help, despite her celebrity status.
PAY ATTENTION: Do you have news to share? Contact Legit.ng instantly
HELLO! NAIJ.com (naija.ng) upgrades to Legit.ng We keep evolving to serve our readers better
How do you plan to spend your Christmas? | Legit TV


Written by Ntsikelelo Mnqokoyi, 8 November 2019
A marketing guru who goes by the name of Gary Halbert once posed a famous riddle which goes like this: “Suppose you’re given the opportunity to launch a hot dog stand on a beach right next to a competing hot dog stand. If you could choose one marketing advantage over your competitor, what would you choose? Would it be a favourable location, higher quality of ingredients, or the most beautiful waitresses?”
Gary says the only advantage that he would choose is a starving crowd (take the time to think about the simplicity of this answer).
Most business owners and entrepreneurs focus more on creating the ‘perfect product’ first before they start searching for customers to buy their product. These individuals are then met with regret and disappointment when they find out that no one really needs their ‘perfect product’ which leads to the inevitable failure of that business.
A truly smart entrepreneur would do the opposite of this and begin by looking for a ‘starving crowd’ first before creating the product to satisfy their hunger.
This ensures that all the hard work that was put into the creation of your business will be met with success in the form of a market of customers who are interested in your product and are willing to buy what they want from you.
What if I told you that it is possible to find and create your own market of starving consumers to market your product/services whenever you want to?
What if I told you that you could make even more money by renting this market of starving consumers to other businesses that are related to your industry (as long as they are not your direct competitors).
The beauty of technology in the 21st century makes this possible for all business owners. "How do I do this?", you ask yourself.
The answer is simple. Business owners from all over the world are now able to create their very own market of hungry customers by collecting e-mail addresses from potential or established customers who are interested in their product/services and saving them on a customer database to be used for marketing purposes later.
These business owners will either choose to compel potential customers into becoming established customers by marketing specials or deals to their e-mail subscribers or they can choose to rent out this list of e-mail subscribers and let other businesses related to your industry (except for direct competitors) market their products/services to your market of hungry customers. These two methods will increase the chances of generating more money for your business.
We will discuss two good ways to generate more e-mail subscribers into your customer database of hungry customers
You can create a pop up advertisement on your website which will offer something (such as a free report, or pdf file, or a discount towards their next purchase) to your potential customer in exchange for their e-mail address. Make sure that you offer something that your potential customers will really appreciate.
Alternatively, you can run an advertisement on Facebook and showcase your business to potential customers on Facebook and ask them to comment their e-mail address that you will save onto your e-mail customer database. You can use any of these two ways to grow your e-mail database and establish a sense of familiarity with your potential or established customers by keeping in touch with them.
You can use any of these two ways to grow your e-mail database and establish a sense of familiarity with your potential or established customers by keeping in touch with them.


Show success toast
Show error toast
Show info toast
Show warning toast
Successful!
Hello, world! This is a toast message.
Error!!!
Hello, world! This is a toast message.
Info!!!
Hello, world! This is a toast message.
Warning!
Hello, world! This is a toast message.


Irish, Alice Louise
| Birth Name | Irish, Alice Louise |
| Gender | female |
| Age at Death | 93 years, 4 months, 15 days |
Narrative
SMH - IRISH, ALICE LOUISE - Dec 6, 1977, late of 1/26 Queens Ave, Parramatta, formally of Campbell St, Parramatta, only sister of Elsie Victoria Schofield (dec) loved Aunt of Henry, Gwen (Mrs Bassingthwaighte), Arthur, Dulcie (Mrs Hunt) and Jack. Aged 93 years.
FUNERAL - The relatives & Friends of the late Miss ALICE LOUISE IRISH are invited to attend her funeral, to leave All Saints Church of England, Victoria Rd, Parramatta, tomorrow Thursday, after a service at 1pm, for Castlebrook Crematorium, Windsor Rd, Rouse Hill.
Alice Louise Irish is buried with her mother at Mays Hill Cemetary, because I've cleaned up the headstone & taken a Photo of the grave. Her father is at Rookwood Cemetery with his parents.
Events
| Event | Date | Place | Description | Sources |
|---|---|---|---|---|
| Birth | 1884-07-22 | Petersham NSW Aust #6673 | ||
|
|
||||
| Death | 1977-12-06 | Parramatta NSW Aust (Spinster) | ||
|
|
||||
| Burial | Castlebrook Crem, May’s Hill Cemetary, Parramatta NSW | |||
|
|
Parents
| Relation to main person | Name | Birth date | Death date | Relation within this family (if not by birth) |
|---|---|---|---|---|
| Father | Irish, Charles | 1854-08-08 | 1921-07-01 | |
| Mother | Callan, Annie Ruth | c1860 | 1928-02-02 | |
| Sister | Irish, Elsie Victoria | 1881-05-24 | 1969-06-25 | |
| Brother | Irish, Charles | 1883-07-00 | 1883-08-24 | |
| Irish, Alice Louise | 1884-07-22 | 1977-12-06 |
Attributes
| Type | Value | Notes | Sources |
|---|---|---|---|
| _UID | 4E2CE774A489DA1195229310154BD04EC525 |
Pedigree
-
Irish, Charles
-
Callan, Annie Ruth
- Irish, Elsie Victoria
- Irish, Charles
- Irish, Alice Louise
-
Callan, Annie Ruth


Getting code-coverage of browser-Javascript files requires interaction with an external tool that does JS-code instrumentation. The most common approach requires that Javascript files be instrumented manually, then upload onto the web-server for the web-page-under-test (WUT). This latter install is a manual step and may be considered intrusive. There are other approaches and various tools for Javascript instrumentation.
JscovTestUtil came about due to the author’s requirement to test a MCU (micro-computer-unit) that supported WiFi and enough storage to run a small web-server (an ESP8266 device). Manual instrumenting and upload, to the MCU, approach would be time consuming and subject to coordination error, while placing wear-&-tear on the MCU development board.
JSCover was found to meet the requirements needed for automatic instrumentation and no re-upload to the device. So the design and development of JscovTestUtil was instigated.
Using JSCover's proxy-server of on-the-fly instrumentation (which works great), and interacting with Selenium and TestNG, the goal of a seamless flow-through for getting code-coverage of JS-files on a MCU device/web-server works.
Used in a like manner as a user, by
executing the tool using Java's ProcessBuilder
class.
webDriverForJSCCoverProxy(..)
) [the
WebDriver is configured to use JSCover's as a proxy]webDriverForBrowser(..)
, or
webDriverForTypeSameAs(..)
)JscovTestUtil employs JSCover's proxy-server capability to do on-the-fly instrumentation of JS-files.
For all intent-&-purposes, users of JscovTestUtil will find it removes 'manual instrumentation' for the user and subsequent upload to web-servers. The removal of any upload reduces the risk of leaving instrumented JS-files on the web-server by accident.
The proxy-server approach (simplified) allows processing in the following manner:
For JscovTestUtil to work setup/configuration of Selenium V3 and JSCover is needed.
How-to setup/configure is outside this documents scope, and it is assumed users will follow-up with Selenium and/or JSCover documentation.
IDEA: consider using WebDriverManager for Selenium setup/install/configuration management.
The following diagram and its ordered steps is a brief on how JscovTestUtil interacts with hi-level "components" to do Javascript code-coverage in a test Selenium (Java) and @Test framework environment.
Note: JscovTestUnit causes JSCover to generate report-files,
however, creation of files is NOT concurrent friendly for
parallel processing of @Test testcase-scripts.
JscovTestUnit is a part of the Test environment as a Selenium
add-in. It is a library that provides JSCover control interaction
methods to simplify/integrate run-time configuration.
JscovTestUtil has been designed to be integral with IDE's and/or using external locations for resources, the resources being Selenium V3 WebDriver executables and the JSCover program.
Selenium setup is involved, in that WebDriver executables are OS-platform and browser type dependent, JSCover setup has no dependencies as such.
Notes: An assumption is made that users are familiar with Selenium V3's WebDriver setup/configuration.
Also, the user is capable of configuring JSCover as per its setup/configuration arrangements.
It is recommended that JSCover and Selenium WebDrivers be installed on a machines local-file-system, thus supporting distributed development and no reliance on a network connection.
The integral support of JscovTestUtil is focused on IDE use, where all the resources are contained within an IDE's project structure. This is done by making JSCover part of the test-environment.
JSCover IDE integration"installing" JSCover within the IDE's "user.dir" structure at '<user.dir>/jscoverInst' directory. Notes
|
Selenium Web-driver installSelenium V3 WebDrivers are independently provided files for each browser type. There is a specific manner in which they are setup/install to interface with Selenium Java. The user should refer to Selenium V3 documentation on how this is done.
Also, consider using |
|||
|
||||
|
Structure allows cross-platform of project distribution
so shopping around is unnecessary.
CON: Large amount of storage on SCM system PRO: all users have the same JSCover programs PRO: single person program update into a repository PRO: SCM pull provides the driver distribution, vs individual download PRO: supports distributed SCM development when network is not available PRO: structure can be reduced in size by removing 'items' e.g. Examples |
Using the external resources capability of JscovTestUtil allows users to choose how-to and where-from resources are accessed. The following diagram outlines access arrangements. It is the users decision to use the external resources arrangement:
With Selenium and JSCover setup in the test environment, either as identified to a JscovTestUtil object, or with a user's setup, test-cases are written against the JscovTestUtil object.
The setOn...
or setOff...
should be called
before action methods.
JSCover has a number of options that may be added to influence the operation of the proxy-server. The key options are those that influence which JS-files are instrumented, or not (see below and/or the JSCover manual).
|
|
JSCover has proxy-server options that are "include/exclude settings" for JS-files that are to be instrumented, while others are excluded.
| JscovTestUtil | JSCover opt | what |
|---|---|---|
optionNoInstrument(...) |
--no-instrument=URL | exclude URL, all other included |
optionNoInstrumentReg(...) |
--no-instrument-reg=URL | exclude regex-URL, all other included |
optionOnlyInstrumentReg(...) |
--only-instrument-reg=URL | include regex-URL, all other excluded |
'Reg/-reg' is a regular expression and should be used when dealing with multiple file patterns to include or exclude from instrumenting.
Javascript files are HTTP GET requested due to the <script src... > tag:
<script type="text/javascript" src="./subdir/file1.js"></script> <script type="text/javascript" src="./subdir/fileA1.js"></script> <script type="text/javascript" src="./file2.js"></script> <script type="text/javascript" src="/file3.js"></script>
The parameter regexOfJsFile
is a regex-pattern
to match a URL of a JS-file (as it pertains to
the above paths). Regex can be involved and deal with complex
patterns. For JscovTestUtil very simple patterns are
recommended, for more involved patterns consult external Java
regex expertise.
Following are simple positive matches (note: '\' needs to be coded as '\\' in Java)
| regex-pattern | ./subdir/file1.js | ./subdir/fileA1.js | ./file2.js | /file3.js | simple wildcard | coded as |
|---|---|---|---|---|---|---|
^.*dir.file.*$ |
X | X | - | - | *dir*file* | |
^.*file.*$ |
X | X | X | X | *file* | |
^.*file.*1.*$ |
X | X | - | - | *file*1* | |
^.*file3.*$ |
- | - | - | X | *file3* | |
^.*file2.*$ |
- | - | X | - | *file2* | |
^.*2.*$ |
- | - | X | - | *2* | |
^.*file3\.js$ |
- | - | - | X | *file3.js | ^.*file3\\.js$ |
^.*subdir.*$ |
X | X | - | - | *subdir* | |
^.*file[32].*$ |
- | - | X | X | ||
^.*file[321].*$ |
X | - | X | X | ||
^.*file.*[321].*$ |
X | X | X | X | ||
^.*file.*[13].*$ |
X | X | - | X | ||
^.*file.*[3].*$|^.*file.*[1].*$ |
X | X | - | X | regex or condition | |
^.*file.*[A].*$|^.*file.*[3].*$ ^.*file.*[A].*$|^.*file[3].*$ ^.*file.*[A].*$|^.*file3.*$ |
- | X | - | X | regex or condition |
At the beginning and end of testing the following methods need to be used. The start and stop are best placed in @BeforeSuite and @AfterSuite respectively. The store-report may be done anytime (before stop).
If the setOffCodeCoverage is done before testing, most JscovTestUtil methods will be ignored and not do anything.
|
|
|
WebDriver driver = new FirefoxDriver(); // the normal manner of API actions driver.get("http://........); WebElement myTestElement = driver.findElement(........); ::
However, for code-coverage to work a driver needs to be acquired from a JscovTestUtil object (the object provides the JSCover proxy-server management and provides a WebDriver to use the proxy).
JscovTestUtil jscovObj = new JscovTestUtil(3129, "base"); jscovObj.setOnCodeCoverage(); jscovObj.startProxyServer(); WebDriver jscovDriver = jscovObj.webDriverForJSCoverProxy(JscovBrowserKind.FIREFOX); // the normal manner of API actions jscovDriver.get("http://........); WebElement myTestElement = jscovDriver.findElement(........); ::
NOTE: getting a new driver per test-case is not ideal. Consider defining the driver-for-proxy and start and stop in @BeforeSuite or @AfterSuite setup/configuration methods.
Additional methods provide the ability to have a report viewed at the end of the testing.
|
|
Hint:
>cd <JSCover directory>
>java -cp target/dist/JSCover-all.jar jscover.server.SimpleWebServer . 8080
Launch a browser with URL 'http://localhost:8080' and follow the sub-directories to the location of the 'reports' directory.
Copyright (c) 2019 dbradley.


DOCTOR Review
Patient Name:
Patient Case:
Patient History:
AAAAAAAAAAAA
AAAAAAAAAAAA
AAAAAAAAAAAA
AAAAAAAAAAAA
AAAAAAAAAAAA
AAAAAAAAAAAA
AAAAAAAAAAAA
Send to patient for style and personalize


{# import_export/templates/import_export/index.html #} {% extends "we_vote_base.html" %} {% block title %}Import Export Options{% endblock %} {% block content %}
Bring data in from these sources, into the local database cache:
Take the data cached locally and distribute it to the correct local We Vote db tables:
{# Could be ux_oak too #} {% endblock %}


Helios is an open-source system from Ben Adida and a small community of developers that was built in coordination with Josh Benaloh. The core feature that Helios advertises is verifiability.
Helios elections are fully verifiable. This means that the system is designed to provide proofs of integrity at each step in the election process. Ideally, a Helios election could be conducted with little trust in the voters, the machines, or even elected officials.
The structure of Helios resembled Benaloh's vision of distributed voting systems, where separate machines handle ballot generation, booth functions, and auditing or casting.
Helios offers end-to-end verifiable elections, providing several features in which users can contest the validity of both individual ballots and election results to achieve its central goal of public auditability. Voters are extremely encouraged to use these features to be convinced of two properties which should be satisfied in all end-to-end verifiable voting systems:
(1) Individual verifiability: individual voters gain personal assurance that their own votes are correctly captured.
(2) Universal verifiability: that anyone can verify that all captured votes were properly tallied.
Another key aspect of verifiability is that voters can receive a receipt that they have been convinced matches their vote. All votes are public once cast, although they are in encrypted form. This means that each choice is visible, but looks random. A voter can check that their receipt matches the hash attributed to them on the public ballot tracking page, but cannot prove that they voted for a specific candidate. Previously, receipts caused a problem with this, since a voter could be forced to reveal who they voted for using a receipt.
Ensuring that voters are convinced that their hash-receipts faithfully correspond to their votes before they finish voting allows us to have both receipts and coercion resistance.
One important note here is that Helios can be used in fixed installations like a regular EVM, or like we have set it up as a website. When voters use their own devices we lose coercion resistance and some degree of overall security.
Anyone can add up the responses (which are still encrypted) and produce an encrypted tally. Anyone can inspect all ballots and check that the public encrypted tally is correct
On the administration side, multiple trustees oversee the election and prevent individuals from changing settings, removing votes or voters, or adding new voters. These trustees should be selected from all local stakeholders so that they will identify and refuse to certify incorrect decryptions.
Helios embodies many goals of EVMs that appear throughout our research, since the appearance of the system is easy to update and modify, it’s free to use, and it provides the verifiability features previously mentioned.


The Ayahuasca Experiments
~~~~~~~~~~~~~~~~~~~~~~~~~
First of all let me state that I am interested in the exploration of consciousness, spiritual growth and healing. I am not interested in tripping or getting high.
My interest in Ayahuasca started around New Year 2000 when I was on a trip to South America and I came across it. Unfortunately my attempts at having Ayahuasca in Peru were unsuccessful due to the only �real� shaman we found after days of looking being drunk and very anti-western. Since then I have kept a look out for Ayahuasca� much to my delight I have found a supply of all the ingredients I could ever want.
My experiments are aimed at have a traditional Ayahuasca experience. For this reason I choose the most traditional mixture. I was very cautious about dosage due to everything I read about Ayahuasca being so strong. Please note: Ayahuasca is the name of the vine Banisteriopsis Caapi as well as of the drink made from the vine and admixtures such as Psychotria Viridis
Recipe:
http://www.ayahuasca.com/cgi-bin/faq.pl#2.USE
Ingredients:
Dried Banisteriopsis Caapi (Ayahuasca) Black vine, Shipibo-Conibo, Peru
Dried Psychotria Viridis (Chacruna) Puccallpa, Peru
Dosage:
Based on extensive research. I decided to base my dose calculations on Jonathan Ott's Ayahuasca Analogues: http://www.serendipity.li/dmt/hoasca.html
Verified on: http://www.erowid.org/chemicals/ayahuasca/ayahuasca_info8.shtml
Body Weight 68 kg
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Potion (1):
Banisteriopsis Caapi 15 grams
Psychotria Viridis 34 grams
Results (1):
Failed. No Effects. Single purge. Something wrong. Assumption: Dosage is too low.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Potion (2):
Banisteriopsis Caapi 30 grams
Psychotria Viridis 70 grams
Results (2):
Failed. No effects except some Nausea. No purge. Assumption: Dosage wrong again.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Potion (3):
Banisteriopsis Caapi 70 grams
Psychotria Viridis 70 grams
Potion (3) Results:
Failed. B. Caapi went off because I decided to soak it in water with lemon juice for a few days before brewing. You can smell it was bad. It gives you this feeling of wanted to puke just smelling it.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Potion (4):
Banisteriopsis Caapi 100 grams (Red, Equador)
Psychotria Viridis 100 grams
Potion (4) Results:
Success: Good strong purging. No psychedelic effects for two hours and then mild effects for 3 hours. The effects include:
� Mild C.E.H. (closed eye hallucinations)
� Slight buzzing sound which was irritating
� Feeling of energy �field� in my body
� Slightly altered thoughts, colours and perception
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Conclusion:
I am no where near the level of mystical experience. I have decided to change my DMT source to M. Hostilis or D. Cabrerana. Both are used in South America so can still be considered traditional admixtures although less common than P. viridis.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Graphical Password Authentication System - Sign Up
Username
*
Roll No
*
Your Email
*
Your Password
Sign Up
Login
Rohan Pillai (15BIT049) | Shrey Vaghela (15BIT064)


Snookes1516.github.io
Online custom essays, term papers, research papers, reports, reviews and homework assignments. Professional custom writing service offers high quality and absolutely.
Walgreens is your home for Pharmacy, Photo and Health Wellness products. Refill your prescriptions online, create memories with Walgreens Photo, and shop products. Buy Essay Online Meet Short Deadlines with If you are faced with the question where to buy term papers online or get assistance with other types. Professional custom writing service offers custom essays, term papers, research papers, thesis papers, reports, reviews, speeches and dissertations of superior. Essay Writing Service with Certified Writers and Cheap Prices. Hire Best Essay Writer to Help You with College Papers.
Buy a term paper online and get rid of unbearable. Welcome to Genuine Writing - Essays, Term Paper Writing. Buy custom essays online for all purposes. Buy Term Papers Online – Ensure your Academic Success.
It s easy to buy term paper online - simply send us your details and team of professional writer, editor and researcher will start their work on it right. Buy custom essay online service – Buy custom essays from vetted experts. Are you running out of time to complete your essay? Do you need help with finding credible.
Whether you want to apply for your first provisional licence or exchange a paper licence for a photocard, apply for your tax disc or check the information DVLA holds. Professional Essay writing help from Speedy Paper is 24/7 here for you. Get a free quote Pay for Essay and Get the Best Paper Essay Writing help online at your service SpeedyPaper.com. Buy essay online at professional essay writing service. Order custom research academic papers from the best trusted company. Just find a great help for students Vagabonding: An Uncommon Guide to the Art of Long-Term. On-line Writing Service Order Custom Essay, Term Paper. Essay Writing Service From Vetted Writers - GradeMiners. Custom Essay Writing Get Professional Essay Buy Essay Online Professional Academic Writers. Wish to buy term paper online but don’t know whom to trust? Our service is always there to meet your demands. Only on-time delivery and plagiarism-free papers.
Why Buy an Essay Online? Sometimes it happens that you find yourself in a drastic situation when your essay is due tomorrow or even today. Obviously, if you cannot. Studybay is an academic writing service for students: essays, term papers, dissertations and much more! We're trusted and chosen by many students all over the world. Professional essay writing service UK provided for students. Order best assignment writer help. Complete plagiarism-free quality papers and affordable customer. Shop Direct for Canon Digital Cameras, DSLRs, Lenses, Flashes, Printers, Ink, Paper, Toner More. Free Shipping Great Offers on Hundreds of Products. Professional Essay Writer to Help You with Your College Papers.
Buy Term Papers Online From Native Speakers NEW CUSTOMER DISCOUNT! Buy an essay now with 20% OFF using the code new20! 100% Original papers, ready in 3 hours. Don't miss the chance to buy essays online cheaper. Term paper writing service, buy custom term paper online. Professional Paper Writer Service Order Quality.
Street Smarts: High Probability Short-Term Trading Strategies Linda Bradford Raschke, Laurence A. Connors on Amazon.com. FREE shipping on qualifying offers. Best Custom Writing - Online Essay Writing and Academic. Write My Paper - Best Professional College Essay Writing.  Complete confidentiality. Zero plagiarism. Affordable pricing. Turnaround from 3 hours. By buying a term paper cheap from a skilled specialist, you are able not to worry about your time and task requirements. The uniqueness of our materials
Choose our professional online paper writer service. Order high quality assignments written from scratch. Affordable prices, good customer support and best research. Street Smarts: High Probability Short-Term Trading Strategies. Royal Essays is a luxury writing service with over 200 professional writers on the team. Any topic, any deadline, any project can be handled. Join us and buy Term Paper online If you want custom term papers fast, get it from the most reliable term paper writing service online. Buying term papers online is not difficult task nowadays. Just try our term papers writing service. 100% plagiarism free papers. We are ready to guarantee. The most popular types of content requested from custom-writing services are essays, research papers, and MA thesis. Students have an abundance of essays. TermPaperMonster will help you with any kind of Term Papers you may be having problems with. Get your perfect custom Term Paper and have a well-earned.
Wish someone could write your academic paper for you? Text us "write my essay" and get matched with a professional essay writer in seconds. Our writing service provides custom papers written from scratch in 80+ disciplines. Fast delivery, high quality, 24/7 online support. More than 400 professional. Buy Essay: 100% Original. Subject Matter Experts. Essay Writing Service UK Order Best Student Assignment.
Need assistance with your college term paper? Order 100% original custom written term papers from our professional online research paper writing service. Contact. We know for sure where you can buy term papers online - only vetted writers and professional ways to writing you will find in our service that will be your best helper. Editing and Custom Writing Service - Studybay.com. Generic Viagra Online comes into strength of 100mg. Best sale/prices on Viagra from licensed, top-rated pharmacies in the U.S., Canada, and internationally. Looking where to buy term paper online? PapersOwl propose you 24/7 Support, 100% Plagiarism Free College Papers, Full Confidentiality. Order term paper at affordable.
Canon Online Store Digital Cameras, DSLRs, Lenses. The best place to buy custom essays online, and how to order your own for colleges and universities. Custom Writing Service Order Custom Essay, Term Paper. Have no time nor desire to write your college papers? Apply for essay help at our legit, professional writing service. Have your paper written by the best expert. Buy Term Paper Online at Best Custom Writing Service. Affordable-Papers: Your Personal Essay Writer Exceeds.
You have stumbled upon one of the best custom writing services online. If you are stressed by tons of assignments - our professional academic Buy Term Paper Online – Choose Our A-Quality Service. Custom Term Paper Writing Service - Expert Academic. Best Place to Buy a Term Paper Online at a Reasonable Price. Buy essays that perfectly suit your requirements. Professional writers and lowest prices on the web! Constant discounts and guaranteed quality. Quality academic help from professional paper essay writing service. Best team of research writers makes best orders for students. Bulletproof company. Vagabonding: An Uncommon Guide to the Art of Long-Term World Travel Rolf Potts, Timothy Ferriss on Amazon.com. FREE shipping on qualifying offers.
The Shocking Truth About Essay Writing Services HuffPost.


https://www.gov.uk/government/publications/health-matters-air-pollution/health-matters-air-pollution
https://www.gov.uk/preventing-air-pollution/dark-smoke
https://en.wikipedia.org/wiki/Particulates
https://en.wikipedia.org/wiki/Ringelmann_scale
https://www.gov.uk/emissions-testing
This website exists to demonstrate how easy it is for the public to report to competent authorities when they happen to see very smoky vehicle exhausts on the road. It does not take any specific action. More info below.
Feedback
Your detected geolocation:
Please correct if it has been wrongly detected
About this site
This demonstration does not store number plates or precise locations. Spam content is also filtered out in the image processing step.
Detected geolocation and number plate could be collected and processed by a competent authority e.g. to inform the owners of the vehicles of potential problems with their vehicles - many drivers are unaware.
This site currently only shows them to the user who submits the photo, to show how the site functions. Number plates and faces are blocked out from submitted photos before being stored, and geolocation is trucated to tenths of a degree - a few miles square in the UK.


May 30
Tell the Good News
God was in Christ, reconciling the world unto himself, not imputing their trespasses unto them; and hath committed unto us the word of reconciliation.
2 Corinthians 5:19
Very few unsaved people today have ever really heard the good news. Why? Because too many Christians are busy telling the world God is mad at them. And telling them that they're terrible and wrong. Some call that good news, but it's not, and it's not what God has commissioned us to share.
He's given us the "word of reconciliation"!
He's sent us to tell the news that God has restored harmony and fellowship between Himself and men. All men. Not just believers. Not just the people in your church, but everyone!
That's right. The worst old reprobate sinner in the world is every bit as reconciled to God as you are. Look at Romans 5:10 and you'll see what I mean. It says that "when we were enemies, we were reconciled to God by the death of his Son."
Reconciled. That word is past tense. God has already restored fellowship between Himself and the world. He did it when there was not one person on earth except Jesus who believed in the new birth. He did it when the entire world was lying in sin.
Through the death and resurrection of Jesus, God has cleansed and forgiven and restored to Himself every man, woman and child on the face of this earth. All any of us have to do now is receive that good news.
That's the good word God has given us. That's the word we need to share with those who are lost. If we'll do it, I can almost guarantee you, they won't stay lost very long.
Scripture Reading: 2 Corinthians 5:10-21


Planet Sick-Boy: http://www.sick-boy.com "We Put the SIN in Cinema"
© Copyright 2001 Planet Sick-Boy. All Rights Reserved.
It's late February, and a new film hits the screens in which a character gets out of jail and meets up with a group of other criminals, led by a maniacal madman. They successfully rob a casino, but the two Alpha males end up butting heads because of the money and a girl. No, you're not having a flashback to 2000's Reindeer Games (which was released exactly one year ago). The new film is 3000 Miles to Graceland, and it probably would have been a direct-to-cable release if it weren't for the cast.
Graceland features two male leads that have 15 Razzie nominations between them. Kurt Russell (Soldier) plays Michael, a Jersey baddie who has just been popped from the pokey and is on his way to Las Vegas to meet up with Murphy (Kevin Costner, Thirteen Days) and his band of miscreants (Christian Slater, Bokeem Woodbine and David Arquette), who are planning to knock off a casino. The heist has been coordinated around "Elvis Week" at the Riveria, and each of the five men dress like The King to, theoretically, blend into the background.
But they hardly keep a low profile. People are still going to notice five men purposefully marching across a casino floor, whether they're dressed as Elvis or not. Punching a guy out probably wouldn't be high on the list of things to do if you're trying to go undetected, but don't tell that to this think tank. They get their loot and also get involved in a big shoot-out that proves The Brother Rule is in full effect and that guns never need to be reloaded.
You know right away which character you're supposed to root for after seeing Murphy carelessly blow away innocent people, while the more gentle, caring Michael opts to use his brains to avoid violent clashes with police and casino security. They get split up, but each knows where the other is headed, so the rest of the film is kind of a road picture where Michael and Murphy try to out-con each other to get their hands on the money. Courteney Cox (Scream 3) plays a sex-hungry single mom who is either in love with Michael or just out to get the casino cash (she appears Arquette-less in the credits).
 The thought never crosses the minds of Michael or Murphy, and that's just one of several things that don't make sense in Graceland. The film was helmed by music video director Demian Lichtenstein, who co-wrote the script with first-timer Richard Recco. The technical standout is George Clinton's score, which isn't really all that great, but compared to the rest of the film it's pure genius. Like Payback, Graceland is so needlessly violent, Charlton Heston would likely turn his head in disgust at the unoriginal, over-the-top gunplay. It's violence for the sake of violence, and completely devoid of style.
Costner, who is like an old, dull Batman villain, has been a much better (and much cooler) robber in A Perfect World, and Russell has been a better Elvis (he played The King in John Carpenter's 1979 television movie). The best - and most underused - characters were the two federal agents (Thomas Haden Church and Kevin Pollak) trying to track down Michael and Murphy. And don't get me started on former NFL star Howie Long. The latent homosexual is only in a handful of scenes, but gives one man an extended hug, sings a Paul Simon song and, in the coup de grace, grabs Costner from behind and grunts like a man in love.
If you get queasy during a Lars von Trier film, this one will probably make you throw up.  And the editing here makes Michael Bay look like John Sayles. There's enough smoking in the film to give you cancer (third-hand smoke?), but there aren't enough pyrotechnics, bullets or modern rock to spackle the giant holes in the plot.
2:03 - R for strong violence, sexuality and language
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


kbeznak parmatonic for csce 670 homework by dr. James Caverlee
This is the Contact Page for kbeznak parmatonic.
This is the homework 2 website for kbeznak parmatonic by Yukun Zeng at Texas A&M.
The author’s email<EMAIL_ADDRESS>Markdown is a lightweight and easy-to-use syntax for styling your writing. It includes conventions for
Another kbeznak parmatonic can be found here
Syntax highlighted code block
# Header 1
## Header 2
### Header 3
Kbeznak Parmatonic for csce 670 homework by dr. James Caverlee
**Bold** and _Italic_ and `Code` text
[Link](url) and ![Image](src)
Trends (Top Search Key Words):
For more details see GitHub Flavored Markdown.
Your Pages site will use the layout and styles from the Jekyll theme you have selected in your repository settings. The name of this theme is saved in the Jekyll _config.yml
configuration file.
Having trouble with Pages? Check out our documentation or contact support and we’ll help you sort it out.


bob
OMGACM 4
Bob hates his job! Running at bigbadbob.shallweplayaga.me:2232
bcrypted answer: $2a$10$cm.NGaE3exbOY2JsigKRfOUhgOVWKJhnX2AkZyDRkwpRi0seo5.Ya
solving teams:
solved by 14 teams
OMGACM 4
Bob hates his job! Running at bigbadbob.shallweplayaga.me:2232
bcrypted answer: $2a$10$cm.NGaE3exbOY2JsigKRfOUhgOVWKJhnX2AkZyDRkwpRi0seo5.Ya
solved by 14 teams