Pharo by Example 9 - 2022 Edition
Pharo is a clean, innovative, open-source, live-programming environment.
Pharo by Example 9 is the third edition of Pharo by Example. It is based on Pharo 90. It covers all the elements of the language, core libraries and the IDE. This edition saw the following enhancements:
-
We have reorganized the beginning of the book to get shorter chapters.
-
We have introduced a new ’first contact’ chapter with a simple counter example. This lets the reader see the most important operations to define a class, its tests, and save its code.
-
We briefly cover the new system browser, Calypso, as well as the Pharo Launcher.
-
We have introduced a new chapter covering Iceberg and package management. A larger book on Pharo and git is available at http://books. pharo.org.
-
We added a new chapter on Traits.
-
We have simplified the SUnit chapter, since a companion book is now available at http://books. pharo.org
-
We have revised parts of the book that were wrong in previous editions, such as the Morphic chapter; the current version is a considerable improvement over Pharo by Example 5.
Chapter Topics
Tour on Pharo
Syntax, Environment, Basic examples, Object model
Libraries
Collection, default behavior, Streams, Iterators
SUnit
Morphic
Advanced
Understanding Metaclasses, Reflection
Traits
An Open Book
Pharo by Example 9 is an open book:
The full book is available at https://github.com/SquareBracketAssociates/PharoByExample9.
The content of this book is released under a Creative Commons Attribution-ShareAlike license.
Authors
- Stéphane Ducasse
- Gordana Rakic
- Sebastian Kaplar
- Quentin Ducasse


| Degree | Major | Minor | University | Year |
|---|---|---|---|---|
| PhD | Soil and Water Sciences | Food and Resource Economics | University of Florida, Pedometrics, Landscape Analysis & GIS Laboratory | 2020 |
| M.S. | Soil and Water Sciences | - | University of Florida, Pedometrics, Landscape Analysis & GIS Laboratory | 2016 |
| B.S. | Environmental Engineering | - | Soka University (Japan) | 2014 |
| Training Course | Organization | Year |
|---|---|---|
| Benchmarking Infrastructure Operations | University of Florida, Warrington College of Business | 2015 |
| Air Pollution Control Orientation Course | U.S. Environmental Protection Agency | 2012 |
| International Business and Project Managements | University of Washington | 2011 |
For any collaborations in research and business, please contact the above email address.


Bell
20:49
3G
Login
Login using:
Login using email/password:
Remeber Me
Login
Login as a guest
Signup
Help with login


{% extends "leaderboards/base.html" %} {% load static %} {% block subtitle %} - about{% endblock %} {% block breadcrumbs %}
Mario 64 Rivals is an open-source web application written by Matt Wiens for competing against your best friends (dawww ) in Mario 64.
Make a record, record it, and submit your time along with a video link. While it's not strictly necessary, it's recommended that you overlay a timer on your record's video.
There are two classes of records: course records and category records. For course records, collect all six main stars in whatever order you want, and, depending on whether you want to submit a seven star record (instead of a six star record), collect the 100 coin star too. Start the timer when you first enter the course from the course menu and end the timer when you touch the final star. For category records, each has its own rules, which can be found on the respective category's page.
This instance of Mario 64 Rivals is meant to have a closed community, in the sense that all users know each other in person. If you're such a person, contact me and I'll hook you up with an account. If you're not such a person, feel free to host your own instance of Mario 64 Rivals .
The source code can be found on Github here. It's licensed under the BSD 3-Clause license, which you can find here.


{% extends 'minimal.html' %} {% block page_title %}{{ _('Submit your flick') }}{% endblock %} {% block site_css %} {{ super() }} {{ css('upload') }} {% endblock %} {% block content %}
{% trans link_vimeoformat='http://vimeo.com/help/compression', link_upload=url('flicks.videos.upload') %} There was an error in the upload process. Please try again, and be sure you're uploading a video in one of our supported file formats. {% endtrans %}
{% trans %} If you continue to see this message, please wait and try again later. {% endtrans %}


goes to find something better to do after trying to get this to work for over an hr
smk76218-Dec-19 11:20 AM
I had to clear out ~/komodo before mine would start a few days ago. those error codes are new to me tho
ComputerGenie 👴🏼📢18-Dec-19 11:24 AM
yeah, that didn't work either
ComputerGenie 👴🏼📢18-Dec-19 11:33 AM
the build script molested the komodo.conf
smk76218-Dec-19 11:34 AM
I'm testing the steps from Joker's post now.
clean slate + compartmentalisation to avoid conflicts with existing folders (e.g. KMD core) looks good.
molested how?
 I might be able to help (edited)
ComputerGenie 👴🏼📢18-Dec-19 11:37 AM
starts up windows remote desktop so that you may help
smk76218-Dec-19 11:37 AM
throws a brick
ComputerGenie 👴🏼📢18-Dec-19 11:38 AM
goes back to doing something more useful than feking an entire network just to rename a dir
CrisF18-Dec-19 12:06 PM
My .conf was also damaged. This happened on 3p toorecently if I remember correctly (A very long day that one)
smk76218-Dec-19 12:06 PM
[LABS] : Waiting for LABS daemon to start...
[KMD] : Waiting for KMD daemon to start...
[LABS] : RSchwBApVquaG6mXH31bQ6P83kMN4Hound
[KMD] : waited ... 30s ... errcode: 28
[KMD] : waited ... 60s ... errcode: 28
[KMD] : waited ... 90s ... errcode: 28
[KMD] : RSchwBApVquaG6mXH31bQ6P83kMN4Hound
[LABS] 99.400% 283171 of 284863
[LABS] 99.800% 284344 of 284864
[LABS] 100.000% 284865 of 284865
[LABS] Synced on block: 284865
[KMD] Synced on block: 1666435
./starting.sh: line 317: labs.json: No such file or directory
[iguana->blackjok3r] Updated elected notaries json, stopping iguana...
All chains started sucessfully, party time...
working here
err code 28 I assume is the "rewinding blocks" stage
not sure about this bit tho ./starting.sh: line 317: labs.json: No such file or directory
@ComputerGenie 👴🏼📢 what do you need added to the conf file? I can PR the change
ComputerGenie 👴🏼📢18-Dec-19 12:15 PM
likely rpcallowip=<IP_ADDRESS> should be enough
err code 28 I assume is the "rewinding blocks" stage
as far as I can tell, yes
labs.json: No such file or directory
looks like it didn't pull the file from git
Alright18-Dec-19 12:57 PM
LABS SPVs will be down until after the hard fork
would recommend not using atomicdex (buying or selling) until day or so after hard fork
I think the labs.json bit is ignorable. seems like a check and compare against new/old, so prob something for the future.
strangely, rpcallowip=<IP_ADDRESS> is already in my conf... cant see where it came from, or if it was already there.
couldnt quite find code modifying the conf except to add blocknotify
repo to launch and manage KMDLabs notary nodes. Contribute to KMDLabs/LabsNotary development by creating an account on GitHub.
added the allowrpc bit
CrisF18-Dec-19 02:36 PM
Having trouble splitting. tried changing port to 8222. also tried acsplit. no joy.
daemonfox18-Dec-19 02:37 PM
is ac_perc working n this LABS build?
smk76218-Dec-19 02:38 PM
any err msg @CrisF ? seems to work for me
~/LabsNotary$ ./utxosplitter.sh
----------------------------------------
Splitting UTXOs - 2019-12-18:22:37:48
KMD target UTXO count: 200
KMD split threshold: 100
Other target UTXO count: 100
Other split threshold: 50
----------------------------------------
[LABS] Current UTXO count is 46
[LABS] Splitting 54 extra UTXOs
[LABS] Split TXID: 8df0c325f3850fefb4682756c31c18e75d59ac553aa37d6a8e031f527b0d8124
[KMD] Current UTXO count is 105
CrisF18-Dec-19 02:39 PM
Mine worked once. then trouble. rm-ed wallet.dat
smk76218-Dec-19 02:39 PM
not sure @daemonfox would have to ask joker. I've not had time to test or read code yet
CrisF18-Dec-19 02:40 PM
./acsplit KMD 77Warning: Binary output can mess up your terminal. Use "--output -" to tellWarning: curl to output it to your terminal anyway, or consider "--outputWarning: <FILE>" to save to a file.
smk76218-Dec-19 02:40 PM
you rm'd wallet or script did?
CrisF18-Dec-19 02:41 PM
I did after trying to consolidate utxos.
smk76218-Dec-19 02:41 PM
I cant see ac_split.sh in the LabsNotary rep
CrisF18-Dec-19 02:41 PM
SuperNET
smk76218-Dec-19 02:41 PM
maybe older scripts obsoleted?
you had me parnoid for a minute there
CrisF18-Dec-19 02:42 PM
sry, haha
[KMD] Error: failed to sign tx Trying iguana splitfunds method...../utxosplitter.sh: line 63: ./listlizards: No such file or directoryjq - commandline JSON processor [version 1.5-1-a5b5cbe]Usage: jq [options] <jq filter> [file...]
when is it advised to shut down staking nodes so I won't end up on a nasty fork like last time?(edited)
or maybe i just started it too early after the HF
wait, will there be new binary or we sticking to the current?
smk76218-Dec-19 03:00 PM
shouldnt happen, but keep an eye on sync and latest block hash after updating just in case
a few of us have updated NN from in the last few hours after seeing no ntx for a while.
cd ~
mv StakedNotary StakedNotary.old
git clone https://github.com/KMDLabs/LabsNotary.git
cp ~/StakedNotary.old/config.ini ~/LabsNotary/
cd LabsNotary/install
you may need to remove ~/komodo due to disk space requirements
./buildkomodo.sh
cd ..
./start.sh
I havent checked or updated my staking node yet
daemonfox18-Dec-19 03:29 PM
dont htink staking node needs a diff daemon f you used the master branch...
cd ${HOME}/LabsNotary
git clone https://github.com/KMDLabs/komodo.git LABSKomodo
cd LABSKomodo
./zcutil/fetch-params.sh
./zcutil/build.sh -j$(nproc)
mkdir -p $HOME/LabsNotary/komodo/master
looks like it builds the same repo
Oszy18-Dec-19 03:46 PM
cool
daemonfox18-Dec-19 03:48 PM
did git pull and make though... there were some additions


The Line Grinder software converts the Gerber plots of PCB circuits into GCode which can then be used to create isolation milled circuit boards. The freeware DesignSpark software is one product which can be used to create the PCB designs suitable for isolation milling. There are a number of things you need to know in order to configure DesignSpark so that it will save Gerber plot files in a format which the Line Grinder can read.
The following is a step-by-step tutorial using the DigitalCircuit_Inch.pcb DesignSpark PCB design sample which is installed with the Line Grinder software in the Examples - DesignSpark sub folder. Click on any of the images to make them larger.
The image below shows the DigitalCircuit_Inch.pcb PCB design sample open in the DesignSpark software.
If you move your mouse over the objects in the pads and traces in the PCB design you will see that the origin, the point (0,0) is well off the page - about three inches to the left and five inches below. The Line Grinder software can cope with this - but it makes things much better if the origin is located on the lower left hand corner of the border. This is easy to change:
Once the origin is set, you will see a cross hair icon on the bottom corner as shown in the image below.
One of the hardest problems to solve when creating isolation milled circuits is how to align the top and bottom copper layers. Line Grinder resolves this issue by requiring pads of a specific size called Reference Pin pads to be added to the PCB. You determine the size you use and tell the Line Grinder software (in the Isolation Cut File Managers) what that size is. Often the Reference Pin Pads are co-incident with the mounting holes of the PCB. If you do not want these pads on your board (as in the example below) - no problem. Just put them outside the border.
The following steps will now place the first Reference Pin pad. Since we do not want to have any mounting holes drilled on this board we will place the Reference Pin pads outside the PCB border.
The image below shows the bottom left Reference Pin pad once it has been sized and positioned. Note that it is centered over a grid dot. This will make it easy to place the other Reference Pin Pads an identical distance from the border.
The main thing about the Reference Pin pads is that they must be of a known unique size, they must be in a rectangular formation and they must be the same distance from the board edges. They can be inside or outside the board - but it is critical that they are equidistant from the edges. You must have at least two Reference Pin Pads. If the IsoFlipMode in your Isolation Cut File Manager is Flip_X then the Reference Pin pads must be on the same line parallel to the X axis. Similarly if the IsoFlipMode in your Isolation Cut File Manager is Flip_Y then the Reference Pin pads must be on the same line parallel to the Y axis. In general it is easier to just put four Reference Pin Pads on the PCB - each equidistant from a border corner.
Note the easy way to create the rest of the Reference Pin pads is just to copy the first pad placed in the step above and then paste it into the design where needed. Once dropped in place, you can easily drag the pad about to get the position right.
The image below shows the PCB with four Reference Pin pads placed. Click on the image to enlarge it and note that the pads are equidistant from the border edges and are in a strict rectangular formation.
Now that the origin is set and the Reference Pin pads have been placed on the PCB, it is time to save the design as Gerber and Excellon files. These files are what the Line Grinder software will read in order to produce the Isolation Milling GCode (and other useful GCode as well). Click on the Output menu item at the top of the screen and then choose the Manufacturing Plots ... sub item. This opens the Gerber Output Form as seen in the image below.
On the Gerber Output Form a number of options have been enabled that we do not need, and also, a plot to output the board outline will need to be added - it is not present by default. The steps below indicate the procedure
The images below show the Gerber Output Options in a suitable configuration.
Pressing on the Run button on Gerber Output Form will output the Gerber files for the top and bottom copper layers and the board outline. The plot entitled Drill Data - Through Hole will be output as an Excellon drill file. The image below shows the output files. Note the format of the names - the trailing part of the names such as Bottom Copper.gbr or DigitalCircuit_Inch - Drill Data - Through Hole.drl can be used as FilenamePatterns in the Line Grinder software to associate a File Manager with the file. The File Manager will determine the operations (what type of GCode it is converted to) and the settings used in the GCode.
At this point, the files are ready to be read by the Line Grinder software. Once the Line Grinder software is started you will need to create some File Managers - and configure them to settings suitable for your purposes. There is a button on the Settings Tab entitled Add Managers for DesignSpark that can be used to create a useful set of File Managers to get started with. You will need to adjust the settings as appropriate.
Note that the default setting for the Reference Pin pads is 0.125 inch and the above discussion sets the pins to a value of 0.100 inch. Using the default settings, the Line Grinder software will not be able to find the Reference Pins, and will return an error message when the file is opened. Change the ReferencePinPadDiameter setting in the IsolationCut File Managers for the Top and Bottom Copper layers to a value of 0.100 to fix this problem.
The image below shows the DigitalCircuit_Inch - Bottom Copper.gbr file after conversion to Isolation GCode in the Line Grinder software.


Correlation Heatmaps with Significance in Python
using pandas, scipy and seaborn
While Pandas and Seaborn offer very quick ways to calculate correlations and show them in a heatmap. Whether those correlations are statistically significant or not is omitted from those plots. Over the years I’ve collected bits and pieces of code, like this, that turn out to be quite useful. Though them being scattered across a few dozen projects isn’t very convenient when I actually need them. So I’ll start to add some documentation and put them here with the tag Code Nugget, so they can easily be found by myself and others.
Normally you can use corr_df = df.corr()
to get a correlation matrix for numerical columns in a Pandas data frame.
These in turn can be shown in a heatmap using sns.clustermap(corr_df, cmap="vlag", vmin=-1, vmax=1)
, leveraging
SeaBorn’s clustermap
. Easy, though the significance of those correlations isn’t reported. To get those you can’t
rely on built-in functions and a bit more effort is required.
from sklearn.datasets import load_iris
from scipy.stats import spearmanr
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from statsmodels.stats.multitest import multipletests
iris_obj = load_iris()
iris_df = pd.DataFrame(iris_obj.data, columns=iris_obj.feature_names)
def get_correlations(df):
df = df.dropna()._get_numeric_data()
dfcols = pd.DataFrame(columns=df.columns)
pvalues = dfcols.transpose().join(dfcols, how="outer")
correlations = dfcols.transpose().join(dfcols, how="outer")
for ix, r in enumerate(df.columns):
for jx, c in enumerate(df.columns):
sp = spearmanr(df[r], df[c])
correlations[c][r] = sp[0]
pvalues[c][r] = sp[1] if ix > jx else np.nan # Only store values below the diagonal
return correlations.astype("float"), pvalues.astype("float")
correlations, uncorrected_p_values = get_correlations(iris_df)
# Correct p-values for multiple testing and check significance (True if the corrected p-value < 0.05)
shape = uncorrected_p_values.values.shape
significant_matrix = multipletests(uncorrected_p_values.values.flatten())[0].reshape(
shape
)
# Here we start plotting
g = sns.clustermap(correlations, cmap="vlag", vmin=-1, vmax=1)
# Here labels on the y-axis are rotated
for tick in g.ax_heatmap.get_yticklabels():
tick.set_rotation(0)
# Here we add asterisks onto cells with signficant correlations
for i, ix in enumerate(g.dendrogram_row.reordered_ind):
for j, jx in enumerate(g.dendrogram_row.reordered_ind):
if i != j:
text = g.ax_heatmap.text(
j + 0.5,
i + 0.5,
"*" if significant_matrix[ix, jx] or significant_matrix[jx, ix] else "",
ha="center",
va="center",
color="black",
)
text.set_fontsize(20)
# Save a high-res copy of the image to disk
plt.tight_layout()
plt.savefig("clustermap.png", dpi=200)
In this example we’ll load the iris dataset and convert it to a Pandas data frame, next a new function get_correlations
is defined that will return two new dataframes, one with the correlations (here spearman rank is used, see below) and
another one with the p-values for those correlations. Note we don’t store p-values for
combinations we don’t want to test (values on the diagonal) or don’t need to test (correlations are symmetrical, only
values below the diagonal are stored). Including these would make corrections for multiple testing unnecessarily harsh.
| sepal length (cm) | sepal width (cm) | petal length (cm) | petal width (cm) | |
|---|---|---|---|---|
| sepal length (cm) | 1.000000 | -0.166778 | 0.881898 | 0.834289 |
| sepal width (cm) | -0.166778 | 1.000000 | -0.309635 | -0.289032 |
| petal length (cm) | 0.881898 | -0.309635 | 1.000000 | 0.937667 |
| petal width (cm) | 0.834289 | -0.289032 | 0.937667 | 1.000000 |
While we have p-values for all those values, shown below, these are not corrected for multiple testing. The function
multipletests
from the statsmodels package can correct these for us and report which ones are significant
(default cutoff <0.05), but the function requires a flat list of values. So we convert the matrix to a one-dimensional
array, apply the function and transform it back to the original shape using reshape
.
| sepal length (cm) | sepal width (cm) | petal length (cm) | petal width (cm) | |
|---|---|---|---|---|
| sepal length (cm) | NaN | NaN | NaN | NaN |
| sepal width (cm) | 4.136799e-02 | NaN | NaN | NaN |
| petal length (cm) | 3.443087e-50 | 0.000115 | NaN | NaN |
| petal width (cm) | 4.189447e-40 | 0.000334 | 8.156597e-70 | NaN |
Finally, the correlations need to be drawn and the clustermap
function is great here. Though we need a few
extra lines of code to put an asterisk in the cells which are significant. While it isn’t exactly rocket science how
this is done, it did require a fair bit of digging in the clustermap
code to find exactly how to hook this in.
There are a ton of tweaks that could still be done here, but this will depend on your personal style and preference. The
hard part is done! Check out the result below!
Liked this post ? You can buy me a coffee


Hulton Hotels helps you find, book, and review your next great experience!
Find Out MoreHulton has everything you need to get your bookings saved and running in no time! All of our rooms and meal packages posted are currently available, and easy to browse. No strings attached!
Browse Hotels!Our room service is second to none.
You can use place your purchases anytime!
We update our furniture and culinary experience to keep things fresh.
We strive to make our clients happy with love in our work!
Ready to start your next vacation with us? That's great! Give us a call or send us an email and we will get back to you as soon as possible!
123-456-6789


We believe that sponsors are interested in the multi-channel promotion and therefore we have channels with a considerable audience to take care of our sponsors.
The ideology of Vivacity cannot be realized without ample support from
the public. Here is why you should support us in our endeavour. We
record an annual footfall of over 15,000 attendees amongst which 95 %
are in the age group of 16-25. By being a part of Vivacity, brand
loyalty can be encouraged from an early age.
With an approximate audience of 20,000 people, Vivacity gives their
sponsors a wide outreach showcase their products and services.
Vivacity has an exemplary record of giving significant reach on
investment to its sponsors With high profile guests and organizations
visiting the campus, it gives its sponsor an opportunity to build
mutually beneficial relationships.
The LNM Institute of Information Technology, Rupa Ki Nangal, Post-Sumel, Via Jamdoli, Jaipur 302031


SUPERFAN Sign In Sign Up Username Password Keep Me Signed In Forgot Password? Username Password Repeat Password Email Address Already Member?
MOVIES Paleo authentic mlkshk taxidermy, vinyl meditation lomo drinking vinegar sartorial raw denim Thundercats bitters selvage listicle. Keffiyeh Williamsburg gastropub McSweeney's.
TELEVISION Beard sriracha kitsch literally, taxidermy normcore aesthetic wayfarers salvia keffiyeh farm-to-table sartorial gluten-free mlkshk. Selvage normcore 3 wolf moon, umami Kickstarter artisan meggings cardigan drinking vinegar bicycle rights.
ADD A TV SHOW Name Year Created By Number of Episodes Director Writer Syndication Status Network Exclusivity
Are you an Industry Professional? Name Email Contact Agent contact (blank if N/A) Current/Most Recent Studio employer


Categories
Members
Home
-------
What would you like to do
-------
----------------
Add Member
---------------
Add Book
Add Category
View All Category
View All Members
Search Member


knex-rqlite
Rqlite dialect for knex
Usage
First install knex and knex-rqlite: npm install knex rqlite-js knex-rqlite
Then to use the driver like this:
import Knex from "knex";
import { RqliteDialect, typeConfig } from "knex-rqlite";
const knex = Knex({
client: RqliteDialect,
connection: typeConfig({
host: "localhost",
port: 4001,
}),
});
Credits
A special thanks goes to the team @redaxle, which implemented the compatibility between knex-rqlite and knex 2.0 (#17)!
Known problems
- This knex dialect doesn't support transactions yet
- Look into TODO.md to find a list of coming features
E2E tests
The tests can be run with ./scripts/test.js
This requires a running rqlite server on port 4001 and will drop&change the table rqliteDialect-e2e
Building
./scripts/build


Use Standard Input to take input and Standard Output to print output.
For C use: scanf for Inputs and printf for Outputs.
For C++ use: cin for Inputs and cout for Outputs.
For Java you can use BufferedReader or Scanner class for Inputs and System class for Output.
GCC compiler is used to compile C and C++ code. Use header files accordingly.
You should return zero (0) from main method in C and C++ language.
Class name for Java should be strictly named as Program.
Do not define your own Package Name in Object Oriented Programming language.
Using third party library or making network calls through your code must be avoided.
Common Mistakes
Do not print anything other than things instructed in the question. Printing user messages like Enter a number:,Enter value of x:, etc. (until specified in the question) will result in wrong answer.
When printing result make sure you don't accidently print extra spaces however trailing newlines will be removed when evaluating.
Submit your code to get your solution considered for scoring.


--- layout: post title: 'Mobile Monday: Location, Location, Location' date: 2007-04-16 00:00:00 categories: business digital-media interfaces-&-interaction mobile personal ---
Mobile Monday: Location, Location, Location
Dan Applequist does an able intro, and demos Zonetag: "Yahoo! are innovating around the blockages that operators have put in place around location". They're keeping a big database of cell IDs, and ask the user if they can't match a cell ID to a location.
Andrew Grill, Seeker WirelessSubtitled "I still haven't found what I'm looking for". Been in telecomms for 20 years.
Seeker Wireless have 3 ex-Cambridge Positioning Systems PhDs with lots of patents. (What have CPS actually done? I've heard of them loads but not seen many products from them - are they perhaps an IP-generating company than don't sell direct themselves?). They have 2 customers.
History: in the 90s carriers had to provide location of handsets in the US. GPS is nearly 30 years old, is improved by assisted GPS. Location is hard: GPS satellites are 20,000km above the earth. Handsets aren't kept anywhere consistent. There's no one perfect solution. GPS is a challenge indoors: it's not great for everywhere. Someone has to pay for a location poll (I thought that avoiding this was one of the principal advantages of GPS, actually). Privacy issues exist with location. Postcodes aren't universally known - you can't just ask for them in all circumstances.
LBS is not TomTom! There are ways of doing it beyond that.
With Cell ID accuracy and cost is an issue. Andrew shows off an example of his "father tracking" application... which wouldn't have the required accuracy for, say, a security app.
The user experience of GPS is poor - if I can make a phone call, why can't I use GPS? (I'd argue that we already have folks used to poor signal reception on mobile through the "available bars" - why not extend this to GPS?).
Andrew shows off the N95 manual for GPS and its appalling usability: open the keypad, hold it at 45 degrees, etc. etc.
Seeker have high accuracy, not as good as GPS, but 50x as accurate as Cell ID. Not being a statistician, I'm not sure how you measure relative accuracies...
A few applications for this: mobile advertising, location based search (e.g. via Google or Yahoo!). The use Java and SIM toolkit + some smart maths between client and server "so it's the handset that's making the decision". By moving intelligence into the client, they avoid round-trip lookups over the network and reduce the cost of doing a polling-based service. They do location-triggered advertising, he demos The Canonical Starbucks Service and I feel slightly ill. I still don't get what this gains Starbucks over putting up a poster.
Seeker have been approached to do failover-from-GPS. Search companies will start demanding location data from operators, but operators don't have the capacity to offer this.
Q: Does this differ from CPS?
A: The original system was based on timing, we're based on signal strength. We don't need handsets to be modified, antennas, or any new equipment on towers. Still needs a small network integration.
Q: Do you not have a scalability issue with loading locations onto a handset?
A: We have IP to allow multiple profiles to be loaded onto and unloaded from the SIM.
Disclosure: Richard is a client of ours.
2.5 months of every year a child is in front of a screen of one form or another.
20% of the NHS budget is going to be spent on battling obesity.
Richard came across a small Bluetooth unit which connects to a mobile phone handset. People like their phones.
Demonstrates screenshots from Fruit Farmer. We're providing an API to allow third parties to create games. Game designers design a game, upload it to the LocoMatrix system, and folks go away and play it.
Demos follow
One that didn't really grab me, apart from the phrase "geofencing shaped zones".
Justin Davies, Buddyping
Wanted to take social networks mobile. Was annoyed when he was out drinking and didn't realise his friends were nearby too. On top of this they've built groups, social media, local photos. Just signed a deal with the guys who do mapping and info with Nokia. They use cell ID and GPS. Buddyping isn't completely accurate - his sales director, in the same room, is listed as being 0.3 miles away. Includes messaging. Very complete control over privacy and location data.
You need to be able to set context too (so says Helen Keegan). Local photo streams. We're not trying to be revolutionary, we're trying to take thousand-year old ideas about socialising and mobilising them.
SportsDo
Been going for about 3 years. About buddy tracking for fun, family tracking for safety, corporate tracking for accountability. They understand how to process and visualise trillions of GPS locations in a commercially useful way.
Have a range of products: mobile, GPS, desktop. Rental partners. Integration with Garmin products to do desktop stuff. Lots of very nice skiing videos too :)
More at www.sportsdo.mobi.


Doctests, the shy giant of testing modules
Do you use python, even to wash your clothes? Do you find unit testing boring, but still have to do it, because you find value in automated testing? Then this article is for you.
The idea
I believe you have used the python console, from time to time. Lets assume you are writing a few inline functions like below, to experiment with stuff:
$ python
Python 3.6.4 |Anaconda custom (64-bit)| (default, Jan 16 2018, 18:10:19)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> def addme(a):
... return a + a
...
>>> addme(2)
4
>>> addme(1.9)
3.8
>>> addme(0)
0
>>>
So, you have written an inline function, and you have made a couple test runs on it, to do some basic verifications. What if python could read the above output and do the reasoning for you, at runtime? That’s the idea behind doctests, my friend.
Seriously?
Totally, python has introduced a lot of intuitive and…heartbreaking features from time to time, which are now mainstream to a few main languages. Why not this one too?
Benefits of doctests
The benefits are quite a few and not limited to: * They are ridiculously easy to write. I mean, you can even outsource it to your younger cousin, who studies about the anatomy of soil atoms, because he owes you, for fixing his computer. * Unless you find copy paste difficult, they are more joyful to write. This time you have to familiar with a terminal environment, though. * There is no need to open another file(even though you can put all doctests of your app to a single file) to read the test code for any function, as they lie right under the signature of each function. * They are executable with the doctest module and readable without knowing a bit of python.
What about unit tests?
Unit tests, still offer great value and advanced capabilities of testing. While doctests are great on validating simple and pure functions, they are not very good, when you have to do complex validation. For example, if a sequence of commands was called during the test.
What about mocking?
Doctests can handle mocking gracefully, with a great library called Minimock. I encourage you, to give it a try and let me know your thoughts.
Even though I like the initiative, I prefer my tests to have separate roles. I don’t want my doctests to be heavily loaded and one-size-fits-them-all. But that’s really a matter of taste, there is nothing wrong if you disagree and I am more than happy to hear your rationale , if so.
A working example
Talk is cheap, so let’s write some code. Below is a working example, using the function of the prompt above.
def addme(a):
"""
This is a docstring, usually to explain the use of a function. Please do not confuse it with doctests. They both mean to provide forms of documentation, but doctests are executable too.
>>> addme(4)
8
>>> addme('a')
'aa'
>>> addme(set())
Traceback (most recent call last):
...
TypeError: unsupported operand type(s) for +: 'set' and 'set'
"""
return a + a
if __name__ == '__main__':
import doctest
doctest.testmod()
print(addme(1))
There are a couple of points, worth noticing here:
* The doctests, need to live inside a docstring. In there, just ‘copy-paste’ the output of your python console quick tests.
* If you need to simulate an exception case, you only need to add the first and the last lines of the exception message. Did you expect to hardcode paths or do any weird logic to get the file’s full path and print it in full? C’mon, python wont do that :)
* You need the doctest library to run the tests. Nose doesn’t need it though.
* You can run the above, as usual, with python mydoctests.py
I need my tests to run as part of CI/CD/CT cycle. What’s in for me?
I am not here to disappoint you, am I ? :)
The nose test runner, supports running all your doctests additionally to your unit tests. Just add the flag --with-doctest
and you are good to go.
Nice stuff, where to go from here?
- Read the python documentation for more twitches and cases.
- Read this fantastic book and especially chapter 4, which covers doctests.
- Check implementations of other languages. For example, the one for NodeJS
- Doctests and nose
Conclusion
Thank you for reading this article, I hope you enjoyed it and that the article triggered your interest in writing more and less painful tests. Please spread the love, with the buttons below, if so. Feel free to add your own thoughts and experiences with doctests too.


Files CCore/inc/List.h CCore/src/List.cpp
There are several kinds of lists in C++. List can be a container (non-intrusive list). List can also be a set of elements, where each element contains links to neighbor elements. List can be single linked or double linked, linear or circular. Linear list controller can contain a pointer to the top of the list or two pointers to the first and the last elements.
CCore provides implementation of algorithms of intrusive lists. Intrusive lists are mandatory for many tasks, including system core tasks, because they don't require a memory allocation, they extremely efficient and can be used in such contexts where memory allocation is impossible or not desirable.
Non-intrusive lists can be built atop on these algorithms. Container lists looks like:
Lists are built using links:
/* struct SLink<T> */ template <class T> struct SLink { T *next; template <SLink<T> T::* LinkMember> struct LinearAlgo; template <SLink<T> T::* LinkMember> struct CircularAlgo; }; /* struct DLink<T> */ template <class T> struct DLink { T *next; T *prev; template <DLink<T> T::* LinkMember> struct LinearAlgo; template <DLink<T> T::* LinkMember> struct CircularAlgo; };
It's a very simple classes, SLink contains the next pointer for a single linked lists, DLink contains two pointers: next and prev, for a double linked lists.
To make a list you define a list node as following:
struct Node { SLink<Node> link; .... };
Then you can use list algorithms:
using Algo = SLink<Node>::LinearAlgo<&Node::link> ;
One node can include several links of different types. It allows include such node in several lists simultaneously. We use the term "element" for the linked list node, and "object" for unlinked list node.
Linear list has a top element and terminated with a null pointer.
template <SLink<T> T::* LinkMember>
struct LinearAlgo
{
static SLink<T> & Link(T *obj) { return obj->*LinkMember; }
// obj -> null
static void Init(T *obj); // obj!=0 unlinked
// place -> obj -> next -> ... -> null
static void InsNext(T *place,T *obj); // place!=0 linked, obj!=0 unlinked
static T * DelNext(T *place); // place!=0 linked, return obj
Link() returns the reference to the link from the node pointer.
Init() makes the single element list from the given object.
InsNext() inserts the given object after the given element in the list.
DelNext() deletes the element after the given place in the list. The pointer to the object is returned (it can be null).
There are three inner types: Cur, Top and FirstLast.
// ptr -> next -> ... -> null
struct Cur
{
T *ptr;
// constructors
explicit Cur(T *ptr_) : ptr(ptr_) {}
// object ptr
T * operator + () const { return ptr; }
bool operator ! () const { return !ptr; }
T & operator * () const { return *ptr; }
T * operator -> () const { return ptr; }
// cursor
void operator ++ () { ptr=Link(ptr).next; }
};
Cur is a list Cursor. Its constructor takes the pointer to the top element of the list. In fact, it may be any element or null pointer.
// top -> next -> ... -> null
struct Top
{
T *top;
// constructors
Top() { init(); }
// methods
void init() { top=0; }
T * operator + () const { return top; }
bool operator ! () const { return !top; }
Cur start() const { return Cur(top); }
// insert object
void ins(T *obj); // obj!=0 unlinked
void ins_after(T *pos,T *obj); // pos!=0, obj!=0 unlinked
void ins_after(Cur cur,T *obj); // +cur, obj!=0 unlinked
// delete object
T * del();
};
Top is a list controller. It contains the pointer to the top element of the list.
init() initialize the list as the empty list.
operator + and operator ! can be used to determine if the list is empty.
start() returns a cursor on the full list.
ins() inserts the given object to the list, as the top element.
ins_after() inserts the given object to the list after the given position.
del() deletes the top element from the list, the pointer to the object is returned (it can be null).
// first -> next -> ... -> last -> null
struct FirstLast
{
T *first;
T *last;
// constructors
FirstLast() { init(); }
// methods
void init();
T * operator + () const { return first; }
bool operator ! () const { return !first; }
Cur start() const { return Cur(first); }
// insert object
void ins_first(T *obj); // obj!=0 unlinked
void ins_last(T *obj); // obj!=0 unlinked
void ins_after(T *pos,T *obj); // pos!=0, obj!=0 unlinked
void ins_after(Cur cur,T *obj); // +cur, obj!=0 unlinked
// delete object
T * del_first();
};
};
FirstLast is another list controller. It contains two pointers: one to the first element of the list, and the second to the last. We call the top element first in this case.
init() initialize the list as the empty list.
operator + and operator ! can be used to determine if the list is empty.
start() returns a cursor on the full list.
ins_first() inserts the given object to the list, as the first element.
ins_last() inserts the given object to the list, as the last element.
ins_after() inserts the given object to the list after the given position.
del_first() deletes the first element from the list, the pointer to the object is returned (it can be null).
Circular list has a top element, the bottom element points to the top. We call the last element bottom in this case.
template <SLink<T> T::* LinkMember>
struct CircularAlgo
{
static SLink<T> & Link(T *obj) { return obj->*LinkMember; }
// obj -> obj
static void Init(T *obj); // obj!=0 unlinked
// place -> obj -> next -> ... -> place
static void InsNext(T *place,T *obj); // place!=0 linked, obj!=0 unlinked
static T * DelNext(T *place); // place!=0 linked
Link() returns the reference to the link from the node pointer.
Init() makes the single element list from the given object.
InsNext() inserts the given object after the given element in the list.
DelNext() deletes the element after the given place in the list. The pointer to the object is returned (it will be null, if the list has only one element).
These methods are logically the same as for linear lists, except they operate on circular ones.
There are two inner types: Cur and Top.
// ptr -> next -> ... -> bottom
struct Cur
{
T *ptr;
T *bottom;
// constructors
explicit Cur(T *bottom);
// object ptr
T * operator + () const { return ptr; }
bool operator ! () const { return !ptr; }
T & operator * () const { return *ptr; }
T * operator -> () const { return ptr; }
// cursor
void operator ++ ();
};
Cur is a list Cursor. Its constructor takes the pointer to the bottom element of the list.
// bottom -> top -> next -> ... -> bottom
struct Top
{
T *bottom;
// constructors
Top() { init(); }
// methods
void init() { bottom=0; }
T * operator + () const { return bottom; }
bool operator ! () const { return !bottom; }
Cur start() const { return Cur(bottom); }
// insert object
void ins(T *obj); // obj!=0 unlinked
void ins_after(T *pos,T *obj); // pos!=0, obj!=0 unlinked
void ins_after(Cur &cur,T *obj); // +cur, obj!=0 unlinked
// delete object
T * del();
// rotate
T * rotate() // return top element moved to bottom
};
};
Top is a list controller. It contains the pointer to the bottom element of the list.
init() initialize the list as the empty list.
operator + and operator ! can be used to determine if the list is empty.
start() returns a cursor on the full list.
ins() inserts the given object to the list, as the top element.
ins_after() inserts the given object to the list after the given position. If the place is given by the cursor, then the cursor is also updated, so you can continue use it.
del() deletes the top element from the list, the pointer to the object is returned (it can be null).
The last method rotate() is specific for circular lists. It rotates the list. The top element moves to bottom. Pointer to this element is returned.
Linear list has a top element and terminated with null pointers. Double link allows to move forward and backward.
template <DLink<T> T::* LinkMember>
struct LinearAlgo
{
static DLink<T> & Link(T *obj) { return obj->*LinkMember; }
// Connect...()
static void Connect(T *a,T *b);
static void Connect_null(T *a,T *b); // a,b may == 0
static void Connect_nulla(T *a,T *b); // a may == 0
static void Connect_nullb(T *a,T *b); // b may == 0
static void Connect_nulla(T *a,T *b,T *c); // a may == 0
static void Connect_nullc(T *a,T *b,T *c); // c may == 0
static void Connect_nullac(T *a,T *b,T *c); // a,c may == 0
// null <- obj -> null
static void Init(T *obj); // obj!=0 unlinked
// place -> obj -> next -> ... -> null
static void InsNext(T *place,T *obj); // place!=0 linked, obj!=0 unlinked
// null <- ... <- prev <- obj <- place
static void InsPrev(T *place,T *obj); // place!=0 linked, obj!=0 unlinked
// null <- ... <- prev <- obj -> next -> ... -> null
static void Del(T *obj); // obj!=0 linked
// place -> obj -> next -> ... -> null
static T * DelNext(T *place); // place!=0 linked
// null <- ... <- prev <- obj <- place
static T * DelPrev(T *place); // place!=0 linked
// null <- top -> next -> ... -> null
static T * /* top */ InsTop(T *top,T *obj); // obj!=0 unlinked
// null <- top -> ... -> obj -> ... -> null
static T * /* top */ DelTop(T *top,T *obj); // obj!=0 linked
// null <- ... <- place -> ... -> null
static void ReplaceNode(T *place,T *obj); // place!=0 linked, obj!=0 unlinked
Connect...() is a family of functions, they connect its arguments in a row. Functions with the suffix null... accept null value for correspondent arguments.
Init() makes the single element list from the given object.
InsNext() inserts the given object after the given element in the list.
InsPrev() inserts the given object before the given element in the list.
Del() deletes the given element from the list.
DelNext() deletes the element after the given place in the list. The pointer to the object is returned (it can be null).
 The pointer to the object is returned (it can be null).
InsTop() inserts the given object as the top element of the list. The new top element is returned.
DelTop() deletes the given element from the list. The new top element is returned. The element may be any element from the list. The name of this function may be misleading, it does not delete the top element.
ReplaceNode() replaces the given list element with the given object. The object becomes a member of the list, the element becomes unlinked.
There are four inner types: Cur, RevCur, Top and FirstLast.
// ptr -> next -> ... -> null
struct Cur
{
T *ptr;
// constructors
explicit Cur(T *ptr_) : ptr(ptr_) {}
// object ptr
T * operator + () const { return ptr; }
bool operator ! () const { return !ptr; }
T & operator * () const { return *ptr; }
T * operator -> () const { return ptr; }
// cursor
void operator ++ () { ptr=Link(ptr).next; }
void operator -- () { ptr=Link(ptr).prev; }
};
Cur is a list forward Cursor. Its constructor takes the pointer to the first element of the list. In fact, it may be any element or null pointer.
// null <- ... <- prev <- ptr
struct RevCur
{
T *ptr;
// constructors
explicit RevCur(T *ptr_) : ptr(ptr_) {}
// object ptr
T * operator + () const { return ptr; }
bool operator ! () const { return !ptr; }
T & operator * () const { return *ptr; }
T * operator -> () const { return ptr; }
// cursor
void operator ++ () { ptr=Link(ptr).prev; }
void operator -- () { ptr=Link(ptr).next; }
};
RevCur is a list backward Cursor. Its constructor takes the pointer to the last element of the list. In fact, it may be any element or null pointer.
// null <- top -> next -> ... -> null
struct Top
{
T *top;
// constructors
Top() { init(); }
// methods
void init() { top=0; }
T * operator + () const { return top; }
bool operator ! () const { return !top; }
Cur start() const { return Cur(top); }
// insert object
void ins(T *obj); // obj!=0 unlinked
void ins_before(T *pos,T *obj); // pos!=0, obj!=0 unlinked
void ins_after(T *pos,T *obj); // pos!=0, obj!=0 unlinked
void replace(T *place,T *obj); // place!=0 linked, obj!=0 unlinked
void ins_before(Cur cur,T *obj); // +cur, obj!=0 unlinked
void ins_after(Cur cur,T *obj); // +cur, obj!=0 unlinked
void replace(Cur &cur,T *obj); // +cur, obj!=0 unlinked
// delete object
void del(T *obj); // obj!=0 from the list
T * del();
T * del_and_move(Cur &cur); // +cur
};
Top is a list controller. It contains the pointer to the top element of the list.
init() initialize the list as the empty list.
operator + and operator ! can be used to determine if the list is empty.
start() returns a forward cursor on the full list.
ins() inserts the given object to the list, as the top element.
ins_before() inserts the given object to the list before the given position.
ins_after() inserts the given object to the list after the given position.
replace() replaces the given list element with the given object. The object becomes a member of the list, the element becomes unlinked.
replace(<cursor>) replaces the list element at the current cursor position with the given object. The object becomes a member of the list, the element becomes unlinked. Cursor is updated properly (it will point to the object).
del(T *obj) deletes the given element from the list.
del() deletes the top element from the list, the pointer to the object is returned (it can be null).
del_and_move() deletes the element from the list at the current cursor position and moves the cursor to the next element. The pointer to the object is returned.
// null <- first -> next -> ... -> last -> null
struct FirstLast
{
T *first;
T *last;
// constructors
FirstLast() { init(); }
// methods
void init();
T * operator + () const { return first; }
bool operator ! () const { return !first; }
Cur start() const { return Cur(first); }
RevCur start_rev() const { return RevCur(last); }
// insert object
void ins_first(T *obj); // obj!=0 unlinked
void ins_last(T *obj); // obj!=0 unlinked
void ins_before(T *pos,T *obj); // pos!=0, obj!=0 unlinked
void ins_after(T *pos,T *obj); // pos!=0, obj!=0 unlinked
void replace(T *place,T *obj); // place!=0 linked, obj!=0 unlinked
void ins_before(Cur cur,T *obj); // +cur, obj!=0 unlinked
void ins_before(RevCur cur,T *obj); // +cur, obj!=0 unlinked
void ins_after(Cur cur,T *obj); // +cur, obj!=0 unlinked
void ins_after(RevCur cur,T *obj); // +cur, obj!=0 unlinked
void replace(Cur &cur,T *obj); // +cur, obj!=0 unlinked
void replace(RevCur &cur,T *obj); // +cur, obj!=0 unlinked
// delete object
void del(T *obj); // obj!=0 from the list
T * del_first();
T * del_last();
T * del_and_move(Cur &cur); // +cur
T * del_and_move(RevCur &cur); // +cur
};
};
FirstLast is another list controller. It contains two pointers: one to the first element of the list, and the second to the last. We call the top element first in this case.
init() initialize the list as the empty list.
operator + and operator ! can be used to determine if the list is empty.
start() returns a forward cursor on the full list.
start_rev() returns a backward cursor on the full list (i.e. it points to the last element).
ins_first() inserts the given object to the list, as the first element.
ins_last() inserts the given object to the list, as the last element.
ins_before() inserts the given object to the list before the given position.
ins_after() inserts the given object to the list after the given position.
replace() replaces the given list element with the given object. The object becomes a member of the list, the element becomes unlinked.
replace(<cursor>) replaces the list element at the current cursor position with the given object. The object becomes a member of the list, the element becomes unlinked. Cursor is updated properly (it will point to the object).
del(T *obj) deletes the given element from the list.
del_first() deletes the first element from the list, the pointer to the object is returned.
del_last() deletes the last element from the list, the pointer to the object is returned.
del_and_move() deletes the element from the list at the current cursor position and moves the cursor. The pointer to the object is returned. If the cursor is forward, it moves to the next element. If the cursor is backward, it moves to the previous element. I.e. each cursor type moves to the next position in respect to the cursor movement direction.
Circular list has a top element, the last element is linked to the top. Double link allows to move forward and backward.
template <DLink<T> T::* LinkMember>
struct CircularAlgo
{
static DLink<T> & Link(T *obj) { return obj->*LinkMember; }
// Connect()
static void Connect(T *a,T *b);
static void Connect(T *a,T *b,T *c);
// obj <- obj -> obj
static void Init(T *obj); // obj!=0 unlinked
// place -> obj -> next -> ... -> place
static void InsNext(T *place,T *obj); // place!=0 linked, obj!=0 unlinked
// place <- ... <- prev <- obj <- place
static void InsPrev(T *place,T *obj); // place!=0 linked, obj!=0 unlinked
// ... <- prev <- obj -> next -> ...
static void Del(T *obj); // obj!=0 linked
// place -> obj -> next -> ... -> place
static T * DelNext(T *place); // place!=0 linked
// place <- ... <- prev <- obj <- place
static T * DelPrev(T *place); // place!=0 linked
// top -> next -> ... -> last -> top
static T * /* top */ InsTopFirst(T *top,T *obj); // obj!=0 unlinked
// top -> next -> ... -> last -> top
static T * /* top */ InsTopLast(T *top,T *obj); // obj!=0 unlinked
// top -> ... -> obj -> ... -> last -> top
static T * /* top */ DelTop(T *top,T *obj); // obj!=0 linked
// top <- ... <- place -> ... -> top
static void ReplaceNode(T *place,T *obj); // place!=0 linked, obj!=0 unlinked
Connect...() is a family of functions, they connect its arguments in a row.
Init() makes the single element list from the given object.
InsNext() inserts the given object after the given element in the list.
InsPrev() inserts the given object before the given element in the list.
Del() deletes the given element from the list.
DelNext() deletes the element after the given place in the list. The pointer to the object is returned (it will be null, if the list has only one element).
 The pointer to the object is returned (it will be null, if the list has only one element).
InsTopFirst() inserts the given object as the first element of the list. The new top element is returned.
InsTopLast() inserts the given object as the last element of the list. The new top element is returned.
DelTop() deletes the given element from the list. The new top element is returned. The element may be any element from the list. The name of this function may be misleading, it does not delete the top element.
ReplaceNode() replaces the given list element with the given object. The object becomes a member of the list, the element becomes unlinked.
There are three inner types: Cur, RevCur, Top.
// ptr -> next -> ... -> last
struct Cur
{
T *ptr;
T *last;
// constructors
explicit Cur(T *ptr);
// object ptr
T * operator + () const { return ptr; }
bool operator ! () const { return !ptr; }
T & operator * () const { return *ptr; }
T * operator -> () const { return ptr; }
// cursor
void operator ++ ();
void operator -- ();
// insert object
void ins_after(T *obj); // +, obj!=0 unlinked
};
Cur is a list forward Cursor. Its constructor takes the pointer to the first element of the list.
There is the additional method ins_after(). This method inserts the given object into the list after the current (non-null) position.
// first <- ... <- prev <- ptr
struct RevCur
{
T *ptr;
T *first;
// constructors
explicit RevCur(T *first);
// object ptr
T * operator + () const { return ptr; }
bool operator ! () const { return !ptr; }
T & operator * () const { return *ptr; }
T * operator -> () const { return ptr; }
// cursor
void operator ++ ();
void operator -- ();
// insert object
void ins_after(T *obj); // +, obj!=0 unlinked
};
RevCur is a list backward Cursor. Its constructor takes the pointer to the first element of the list.
There is the additional method ins_after(). This method inserts the given object into the list after (before with respect to the cursor direction) the current (non-null) position.
// top -> ... -> obj -> ... -> last -> top
struct Top
{
T *top;
// constructors
Top() { init(); }
// methods
void init() { top=0; }
T * operator + () const { return top; }
bool operator ! () const { return !top; }
Cur start() const { return Cur(top); }
RevCur start_rev() const { return RevCur(top); }
// insert object
void ins_first(T *obj); // obj!=0 unlinked
void ins_last(T *obj); // obj!=0 unlinked
void ins_before(T *pos,T *obj); // pos!=0, obj!=0 unlinked
void ins_after(T *pos,T *obj); // pos!=0, obj!=0 unlinked
void replace(T *place,T *obj); // place!=0 linked, obj!=0 unlinked
void ins_before(Cur cur,T *obj); // +cur, obj!=0 unlinked
void ins_after(Cur &cur,T *obj); // +cur, obj!=0 unlinked
void ins_before(RevCur &cur,T *obj); // +cur, obj!=0 unlinked
void ins_after(RevCur cur,T *obj); // +cur, obj!=0 unlinked
void replace(Cur &cur,T *obj); // +cur, obj!=0 unlinked
void replace(RevCur &cur,T *obj); // +cur, obj!=0 unlinked
// delete object
void del(T *obj); // obj!=0 from the list
T * del_first();
T * del_last();
T * del_and_move(Cur &cur); // +cur
T * del_and_move(RevCur &cur); // +cur
// rotate
T * rotate_forward(); // return top element moved to bottom
T * rotate_backward(); // return bottom element moved to top
};
};
Top is a list controller. It contains the pointer to the top element of the list.
init() initialize the list as the empty list.
operator + and operator ! can be used to determine if the list is empty.
start() returns a forward cursor on the full list.
start_rev() returns a backward cursor on the full list (i.e. it points to the last element).
ins_first() inserts the given object to the list, as the first element.
ins_last() inserts the given object to the list, as the last element.
ins_before() inserts the given object to the list before the given position. ins_before(RevCur &cur,T *obj) modifies the cursor to keep one valid.
ins_after() inserts the given object to the list after the given position. ins_after(Cur &cur,T *obj) modifies the cursor to keep one valid.
replace() replaces the given list element with the given object. The object becomes a member of the list, the element becomes unlinked.
replace(<cursor>) replaces the list element at the current cursor position with the given object. The object becomes a member of the list, the element becomes unlinked. Cursor is updated properly (it will point to the object).
del() deletes the given element from the list.
del_first() deletes the first element from the list, the pointer to the object is returned.
del_last() deletes the last element from the list, the pointer to the object is returned.
del_and_move() deletes the element from the list at the current cursor position and moves the cursor. The pointer to the object is returned. If the cursor is forward, it moves to the next element. If the cursor is backward, it moves to the previous element. I.g. each cursor type moves to the next position in respect to the cursor movement direction.
The last two methods rotate...() are specific for circular lists. They rotate the list.
rotate_forward() rotates the list forward. The top element moves to bottom. Pointer to this element is returned.
rotate_backward() rotates the list backward. The bottom element moves to top. Pointer to this element is returned.


By @astronomyblog & @LoveGraphs. Stats last updated 7 February 2016.
It seems there may have been at least 25 shows and 125 listed appearances. With 5 people per show, iPlayer has all appearances listed. The host/captains/regulars have included Sue Perkins (Host × 25).
Total appearances:
Guest appearances i.e. ignoring the host/captains/regulars:
All people:
Guests i.e. ignoring the host/captains/regulars:
Last updated: 2016/02/07


The
@angular/cdk/drag-drop
module provides you with a way to easily and declaratively create
drag-and-drop interfaces, with support for free dragging, sorting within a
list, transferring items between lists, animations, touch devices, custom
drag handles, previews, and placeholders, in addition to horizontal lists
and locking along an axis.
Created: {{ item.createdOn | momentTimeAgo }}
Created: {{ item.createdOn | momentTimeAgo }}
Created: {{ item.createdOn | momentTimeAgo }}


From:Geaccone To:Sap Security Sent:2017-01-11T04:38:18.0000000Z Subject:RE: P00577146 697834 C Rideau (mar)
approved
-----Original Message-----
From: Sap Security
Sent: Wednesday, November 28, 2001 9:59 AM
To: Knepshield, Judy; Bayles, Timothy; Zahn, Gary; Geaccone, Tracy
Subject: P00577146 697834 C Rideau (mar)
Crystal Rideau is requesting access to the following roles:
VIEWER ROLES:
Tim Bayles:
1. Add FN AM View Asset History
2. Add FN PS Viewer
3. Add FN CO Master Data Creator BU
Judy Knepshield:
2. Add FN AP Data Viewer
Gary Zahn:
3. Add FN CO Viewer
5. Add FN GL Viewer
Tracy Geaccone:
6. Add FN IM View Management Information
Crystal currently has access to the following:
Std End-User profile for basis and prntg
HR Contractor ESS CATS - ENTH
Thank you,
Margaret
SAP Security
-----Original Message-----
From<EMAIL_ADDRESS><EMAIL_ADDRESS>Sent: Tuesday, November 27, 2001 4:29 PM
To: Sap Security
Subject: P00577146 - 697834 Crystal Rideau SAP Security Request Form
The following request information was recently submitted...
USER INFORMATION:
SAP ID: P00577146
Employee Name (Last,First,MI): Rideau, Crystal
Business Unit: ETS
Company Code: 0179
Cost Center: 111386
Employee Telephone Number:<PHONE_NUMBER>
Employee Email Address<EMAIL_ADDRESS>Job Title: Contractor
Business Unit for Roles: ETS
SUPERVISOR INFORMATION:
Supervisor SAP ID: p00505106
Supervisor Name (Last, First, MI): Baker, Lee
Supervisor Telephone Number:<PHONE_NUMBER>
Supervisor Email<EMAIL_ADDRESS>Business Reason:
New contractor for our group. Needs access in order
to assist Financial Planners with budgets and cost center
groups for ETS.
VIEWER ROLES:
1. Add FN AM View Asset History
2. Add FN AP Data Viewer
3. Add FN CO Viewer
4. Add FN PS Viewer
5. Add FN GL Viewer
6. Add FN IM View Management Information
FINANCIAL ACCOUNTING ROLES:
1. Add FN CO Master Data Creator BU
PROJECT SYSTEM ROLES:
No roles in this area were selected.
JOINT VENTURE ROLES:
No roles in this area were selected.
MATERIALS MANAGEMENT / PURCHASING ROLES:
No roles in this area were selected.
CENTRALIZED ROLES (LIMITED TO SPECIFIC PERSONNEL):
No roles in this area were selected.
HUMAN RESOURCES (HR PERSONNEL ONLY):
No roles in this area were selected.
HUMAN RESOURCES - TIMEKEEPERS:
No roles in this area were selected.
HUMAN RESOURCES - BENEFITS (BENEFITS PERSONNEL ONLY):
No roles in this area were selected.
HUMAN RESOURCES - PAYROLL (PAYROLL PERSONNEL ONLY):
No roles in this area were selected.
***********
EDRM Enron Email Data Set has been produced in EML, PST and NSF format by ZL Technologies, Inc. This Data Set is licensed under a Creative Commons Attribution 3.0 United States License <http://creativecommons.org/licenses/by/3.0/us/> . To provide attribution, please cite to "ZL Technologies, Inc. (http://www.zlti.com)."
***********
California


Preparation time
less than 30 mins
Cooking time
10 to 30 mins
Serves
Serves 4
A simple, quick and really tasty pasta recipe from Theo Randall.
Trim the ends of the Swiss chard and cut the green leaves off the white stems.
Cut the stems into fine matchsticks and blanch in boiling salted water for 1-2 minutes, or until soft. Drain and set aside.
Blanch the green leaves in boiling salted water for 4-5 minutes, then drain and chop roughly.
Heat the olive oil in a large, heavy-based saucepan, add the onion and garlic and cook gently for 5-6 minutesm, or until soft.
Add the pancetta and sausage meat and cook over a low heat for 20 minutes, then drain off the excess fat.
Add the cream to the sauce and bring to the boil. Stir in the dried chilli and the blanched Swiss chard stalks and their leaves, then cook for 4-5 minutes. Season to taste, with salt and freshly ground black pepper.
Cook the penne in a large pan of boiling water, according to packet instructions, until al dente. Drain, reserving a few spoonfuls of the cooking water.
Add the pasta to the sauce, mix well and add a little of the reserved water if necessary to loosen the sauce.
Cook gently for 2 minutes, then serve with freshly ground black pepper and grated parmesan.


Code Coverage |
|||||||||
Lines |
Functions and Methods |
Classes and Traits |
|||||||
| Total | |
87.56% |
169 / 193 |
|
70.37% |
19 / 27 |
|
20.00% |
1 / 5 |
| Abstracts | |
100.00% |
53 / 53 |
|
100.00% |
6 / 6 |
|
100.00% |
1 / 1 |
| Interfaces | |
100.00% |
0 / 0 |
|
100.00% |
0 / 0 |
|
0 / 0 |
|
| MenuBuilder.php | |
46.15% |
6 / 13 |
|
0.00% |
0 / 2 |
|
0.00% |
0 / 1 |
| MenuFilterer.php | |
97.22% |
35 / 36 |
|
80.00% |
4 / 5 |
|
0.00% |
0 / 1 |
| MenuManager.php | |
86.76% |
59 / 68 |
|
72.73% |
8 / 11 |
|
0.00% |
0 / 1 |
| MenuModifier.php | |
69.57% |
16 / 23 |
|
33.33% |
1 / 3 |
|
0.00% |
0 / 1 |


did2s.Rd
Calculate two-stage difference-in-differences following Gardner (2021)
did2s( data, yname, first_stage, second_stage, treatment, cluster_var, weights = NULL, bootstrap = FALSE, n_bootstraps = 250, verbose = TRUE )
| data | The dataframe containing all the variables |
|---|---|
| yname | Outcome variable |
| first_stage | Fixed effects and other covariates you want to residualize with in first stage, use i() for fixed effects., following fixest::feols. |
| second_stage | Second stage, these should be the treatment indicator(s) (e.g. treatment variable or es leads/lags), use i() for factor variables, following fixest::feols. |
| treatment | A variable that = 1 if treated, = 0 otherwise |
| cluster_var | What variable to cluster standard errors. This can be IDs or a higher aggregate level (state for example) |
| weights | Optional variable to run a weighted first- and second-stage regressions |
| bootstrap | Should standard errors be calculated using bootstrap? Default is FALSE. |
| n_bootstraps | How many bootstraps to run. Default is 250 |
| verbose | Logical. Should information about the two-stage procedure be printed back to the user? Default is TRUE. |
fixest::feols point estimate with adjusted standard errors (either by formula or by bootstrap)
Load example dataset which has two treatment groups and homogeneous treatment effects
# Load Example Dataset data("df_hom")
You can run a static TWFE fixed effect model for a simple treatment indicator
static <- did2s(df_hom, yname = "dep_var", treatment = "treat", cluster_var = "state", first_stage = "i(state) + i(year)", second_stage = "i(treat, ref=FALSE)") #> #> ── Two-stage Difference-in-Differences ───────────────────────────────────────── #> → Running with first stage formula `~ i(state) + i(year)` and second stage formula `~ i(treat, ref=FALSE)` #> → The indicator variable that denotes when treatment is on is `treat` #> → Standard errors will be clustered by `state` fixest::esttable(static) #> static #> Dependent Var.: dep_var #> #> treat = TRUE 1.983*** (0.0750) #> _______________ _________________ #> S.E. type Custom #> Observations 31,000 #> R2 0.22784 #> Adj. R2 0.22784
Or you can use relative-treatment indicators to estimate an event study estimate
es <- did2s(df_hom, yname = "dep_var", treatment = "treat", cluster_var = "state", first_stage = "i(state) + i(year)", second_stage = "i(rel_year, ref=c(-1, Inf))") #> #> ── Two-stage Difference-in-Differences ───────────────────────────────────────── #> → Running with first stage formula `~ i(state) + i(year)` and second stage formula `~ i(rel_year, ref=c(-1, Inf))` #> → The indicator variable that denotes when treatment is on is `treat` #> → Standard errors will be clustered by `state` fixest::esttable(es) #> es #> Dependent Var.: dep_var #> #> rel_year = -20 -0.1469* (0.0632) #> rel_year = -19 0.0135 (0.0751) #> rel_year = -18 -0.1143. (0.0691) #> rel_year = -17 -0.0704 (0.0927) #> rel_year = -16 -0.0222 (0.0675) #> rel_year = -15 -0.1942** (0.0678) #> rel_year = -14 -0.0915 (0.0586) #> rel_year = -13 -0.0333 (0.0668) #> rel_year = -12 -0.0995 (0.0644) #> rel_year = -11 -0.0499 (0.0668) #> rel_year = -10 0.0032 (0.0536) #> rel_year = -9 -0.0770 (0.0540) #> rel_year = -8 -0.0265 (0.0627) #> rel_year = -7 0.0024 (0.0629) #> rel_year = -6 -0.0252 (0.0488) #> rel_year = -5 0.0336 (0.0549) #> rel_year = -4 0.0042 (0.0520) #> rel_year = -3 -0.0587 (0.0553) #> rel_year = -2 0.0216 (0.0637) #> rel_year = 0 1.860*** (0.0952) #> rel_year = 1 2.220*** (0.0910) #> rel_year = 2 1.950*** (0.0938) #> rel_year = 3 1.854*** (0.0988) #> rel_year = 4 1.931*** (0.0977) #> rel_year = 5 2.110*** (0.0926) #> rel_year = 6 1.961*** (0.0848) #> rel_year = 7 1.939*** (0.0835) #> rel_year = 8 2.005*** (0.0689) #> rel_year = 9 1.856*** (0.0729) #> rel_year = 10 1.790*** (0.1210) #> rel_year = 11 2.055*** (0.1335) #> rel_year = 12 2.024*** (0.1623) #> rel_year = 13 1.914*** (0.1399) #> rel_year = 14 2.081*** (0.1376) #> rel_year = 15 2.180*** (0.1257) #> rel_year = 16 2.261*** (0.1347) #> rel_year = 17 2.163*** (0.1122) #> rel_year = 18 2.014*** (0.1264) #> rel_year = 19 1.868*** (0.1402) #> rel_year = 20 1.934*** (0.1769) #> _______________ __________________ #> S.E. type Custom #> Observations 31,000 #> R2 0.22960 #> Adj. R2 0.22863
Here's an example using data from Castle (2013)
# Castle Data castle <- haven::read_dta("https://github.com/scunning1975/mixtape/raw/master/castle.dta") did2s( data = castle, yname = "l_homicide", first_stage = ~ i(sid) + i(year), second_stage = ~ i(post, ref=0), treatment = "post", cluster_var = "state", weights = "popwt" ) #> #> ── Two-stage Difference-in-Differences ───────────────────────────────────────── #> → Running with first stage formula `~ i(sid) + i(year)` and second stage formula `~ i(post, ref = 0)` #> → The indicator variable that denotes when treatment is on is `post` #> → Standard errors will be clustered by `state` #> OLS estimation, Dep. Var.: l_homicide #> Observations: 550 #> Standard-errors: Custom #> Estimate Std. Error t value Pr(>|t|)) #> post::1 0.075142 0.03538 2.1239 0.034127 * #> --- #> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 #> RMSE: 263.4 Adj. R2: 0.052465


|
||||||||||
| PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |
See:
Description
| Class Summary | |
|---|---|
| AbstractProxySubscriber | Common base class for EventService Proxies. |
| AnnotationProcessor | Enhances classes that use EventService Annotations. |
| BaseProxySubscriber | A class is subscribed to an EventService on behalf of another object. |
| ProxyTopicPatternSubscriber | A Proxy Subscriber for Annotations that use topic patterns |
| ProxyTopicSubscriber | A class that subscribes to an EventService on behalf of another object. |
| UseTheClassOfTheAnnotatedMethodsParameter | This is a dummy class to get around a limitation with annotations. |
| Enum Summary | |
|---|---|
| ReferenceStrength | The two kinds of references that are used in the EventBus. |
| Annotation Types Summary | |
|---|---|
| EventSubscriber | An Annotation for subscribing to EventService Events. |
| EventTopicPatternSubscriber | |
| EventTopicSubscriber | An Annotation for subscribing to EventService Topics. |
| RuntimeTopicEventSubscriber | A subscriber to a topic that is determined at runtime. |
| RuntimeTopicPatternEventSubscriber | |
| VetoRuntimeTopicPatternSubscriber | |
| VetoRuntimeTopicSubscriber | A veto subscriber to a topic that is determined at runtime. |
| VetoSubscriber | An Annotation for adding VetoListener subscriptions to EventService Events. |
| VetoTopicPatternSubscriber | An Annotation for adding VetoTopicPatternListener subscriptions to EventService Events. |
| VetoTopicSubscriber | An Annotation for adding VetoTopicListener subscriptions to EventService Events. |
EventBus annotations to make it much simpler to publish and subscribe to events.
Subscription annotations remove the boilerplate inner classes that often used for subscribers, especially when one class subscribes to multiple events.
When using annotations, the AnnotationProcessor must be used to create proxy subscribers.
An annotation example:
class MySubscriber {
@EventSubscriber(eventClass=HelloEvent.class)
public void printOutHelloWorld(HelloEvent event) {
System.out.println("Hello"+helloEvent.getWorld());
}
@EventTopicSubscriber(topic="Hello");
public void printOutHelloWorld(String topic, Object event) {
System.out.println(topic+" "+event);
}
}
class HelloEventBus {
public static void main(String args[]) {
MySubscriber subscriber = new MySubscriber();
AnnotationProcessor.process(subscriber);//makes a proxy subscribers
EventBus.publish(new HelloEvent());
EventBus.publish("Hello", "World");
}
}
|
||||||||||
| PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |


| Search | ||
|---|---|---|
|
|
||
| {{ result.snippet.title }} |
| Title | Plays | |
|---|---|---|
| {{song.title}} Now playing Next playing | {{song.plays}} |
| Search | ||
|---|---|---|
|
|
||
| {{ result.snippet.title }} |
| Title | Plays | |
|---|---|---|
| {{song.title}} Now playing Next playing | {{song.plays}} |


Career Portal
About Day & Zimmermann Accessibility Notice
Day & Zimmermann's Engineering, Construction and Maintenance (ECM) group provides a broad spectrum of integrated, end-to-end solutions to the power, process and industrial markets. Engineering and design services include all disciplines as well as comprehensive EPC (engineering, procurement and construction) solutions. Flexible construction solutions range from general contracting to construction management, as a well as diverse fabrication and machining capabilities. Maintenance services include modifications, major construction, as well as valve, condenser, and radiological services. Day & Zimmermann is ranked by Engineering News-Record as the top maintenance contractor in the power market and a top 10 design firm in chemical plants and industrial process.
Day & Zimmermann is committed to maintaining an inclusive workforce, where employees are hired, retained, compensated and promoted based on their contributions to our Company. Our collective strength is rooted in over 110 years of diverse employees and businesses, commitment to success, and delivery on promises made.
Federal and State Equal Employment Opportunity laws prohibit employment discrimination based on race, color, religion, sex, sexual orientation, age, national origin, citizenship status, veteran status and disability status. Day & Zimmermann is committed to providing an equal opportunity work environment in full compliance with these laws.
If you are an individual with a disability and you require an accommodation in the application process, please send us an email at accommodations@dayzim.com.


--- subject: nyfashionweek20180918 --- View in Browser NEW IN FLASH SALE DRESSES LINEN CLOTH TOPS KNITWEAR OUTERWEAR SET Fanny.Wiz Sheath Solid Midi Skirt $64.00 $60.80 Fantasyou Buttoned Gingham Midi Dress $77.00 $69.30 Fantasyou Polka Dots Midi Dress $65.00 $61.75 Misslook Shoulder Elegant Midi Dress $55.00 $52.25 VIVIDLINEN Batwing Paneled Linen Dress $154.00 $115.50 Misslook Paneled Leaf Midi Dress $56.00 $53.20 Fantasyou Sexy Solid Midi Dress $55.00 $52.25 Misslook Sleeve Animal Midi Dress $97.00 $82.45 NEW IN \ SHOES LINEN CLOTH \ KNITWEAR DRESSES \ BOTTOMS TOPS \ SET BAGS & ACCS \ GET THE APP GET 20% OFF Your First order on APP If you no longer wish to receive this mail,please Unsubscribe If you have any questions regarding your orders or products, please contact us at<EMAIL_ADDRESS>View in Browser
NEW IN
SHOES
LINEN CLOTH
KNITWEAR
DRESSES
BOTTOMS
TOPS
SET
BAGS & ACCS
GET THE APP
GET 20% OFF Your First order on APP


Audio samples from "Towards Natural Cross-Lingual Voice Conversion Based on Neural TTS Models and Phonetic Posteriorgrams"
Authors: Shengkui Zhao, Hao Wang, Trung Hieu Nguyen, Bin Ma
Alibaba Group, MIT Singapore Lab
Note: In our VC experiments, we have used the open TTS corpus JSUT from R. Sonobe, S. Takamichi, and H. Saruwatari, “JSUT corpus: free large-scale japanese speech corpus for end-to-end speech synthesis,” arXiv:1711.00354 [cs.CL], 2017.
The English target speaker's voices from professional records:
Text: I think it could be something to do with the soil and the climate.
Text: We are very concerned that it will not happen and we will be engaged.
Text: They arrive at the door of the food bank from all over the city.
The Mandarin target speaker’s voices from professional records:
Text: 五千年传统文化信手拈来，被涂脂抹粉，戏谑调侃。
Text: 今天，和平广场里盛开着这样的黄玫瑰。
Text: 他说，他会将车收藏一辈子，以后再传给儿女们。
Cross-lingual voice conversion:
Source speaker: Mandarin female; Target speaker: English female
Text: 五千年传统文化信手拈来，被涂脂抹粉，戏谑调侃。
Source Speaker
Target Speaker
FastSpeach-VC
Tacotron2-VC
Transformer-VC
Text: 他们家靠这个药，世代漂洗为生，日子过得艰难。
Source Speaker
Target Speaker
FastSpeach-VC
Tacotron2-VC
Transformer-VC
Text: 众所周知，潍坊因风筝而在全国闻名遐迩。
Source Speaker
Target Speaker
FastSpeach-VC
Tacotron2-VC
Transformer-VC
Source speaker: Mandarin male; Target speaker: English female
Text: 一场关于食品安全的激烈讨论就此展开。
Source Speaker
Target Speaker
FastSpeach-VC
Tacotron2-VC
Transformer-VC
Text: 一年年的春节，回家的故事一串串。
Source Speaker
Target Speaker
FastSpeach-VC
Tacotron2-VC
Transformer-VC
Text: 一打听才知道，她今天是来领神秘大奖的。
Source Speaker
Target Speaker
FastSpeach-VC
Tacotron2-VC
Transformer-VC
Source speaker: Japanese female; Target speaker: English female
Text: ギレスピーは、マッギーを通じて、イネスと知り合った。
Source Speaker
Target Speaker
FastSpeach-VC
Tacotron2-VC
Transformer-VC
Text: 森永のおいしい牛乳は、濃い青色に、牛乳瓶をあしらったデザインの、パック牛乳である。
Source Speaker
Target Speaker
FastSpeach-VC
Tacotron2-VC
Transformer-VC
Text: 同日朝に、大阪難波で、出発セレモニーが開催され、営業運転に、充当された。
Source Speaker
Target Speaker
FastSpeach-VC
Tacotron2-VC
Transformer-VC
Source speaker: English male; Target speaker: English female
Text: I think it could be something to do with the soil and the climate.
Source Speaker
Target Speaker
FastSpeach-VC
Tacotron2-VC
Transformer-VC
Text: But the jury failed to reach a verdict on the other two traders.
Source Speaker
Target Speaker
FastSpeach-VC
Tacotron2-VC
Transformer-VC
Text: I was rushed to hospital a couple of weeks ago with my angina.
Source Speaker
Target Speaker
FastSpeach-VC
Tacotron2-VC
Transformer-VC
Cross-lingual voice conversion:
Source speaker: English female; Target speaker: Mandarin female
Text: Hazel would like to sell the business.
Source Speaker
Target Speaker
FastSpeach-VC
Tacotron2-VC
Transformer-VC
Text: Many people have lost their jobs altogether.
Source Speaker
Target Speaker
FastSpeach-VC
Tacotron2-VC
Transformer-VC
Text: This is a serious accident, and we will do our utmost to identify the cause.
Source Speaker
Target Speaker
FastSpeach-VC
Tacotron2-VC
Transformer-VC
Source speaker: English male; Target speaker: Mandarin female
Text: I think it could be something to do with the soil and the climate.
Source Speaker
Target Speaker
FastSpeach-VC
Tacotron2-VC
Transformer-VC
Text: But the jury failed to reach a verdict on the other two traders.
Source Speaker
Target Speaker
FastSpeach-VC
Tacotron2-VC
Transformer-VC
Text: I was rushed to hospital a couple of weeks ago with my angina.
Source Speaker
Target Speaker
FastSpeach-VC
Tacotron2-VC
Transformer-VC
Source speaker: Japanese female; Target speaker: Mandarin female
Text: ギレスピーは、マッギーを通じて、イネスと知り合った。
Source Speaker
Target Speaker
FastSpeach-VC
Tacotron2-VC
Transformer-VC
Text: 森永のおいしい牛乳は、濃い青色に、牛乳瓶をあしらったデザインの、パック牛乳である。
Source Speaker
Target Speaker
FastSpeach-VC
Tacotron2-VC
Transformer-VC
Text: 同日朝に、大阪難波で、出発セレモニーが開催され、営業運転に、充当された。
Source Speaker
Target Speaker
FastSpeach-VC
Tacotron2-VC
Transformer-VC
Source speaker: Mandarin male; Target speaker: Mandarin female
Text: 一场关于食品安全的激烈讨论就此展开。
Source Speaker
Target Speaker
FastSpeach-VC
Tacotron2-VC
Transformer-VC
Text: 一年年的春节，回家的故事一串串。
Source Speaker
Target Speaker
FastSpeach-VC
Tacotron2-VC
Transformer-VC
Text: 一打听才知道，她今天是来领神秘大奖的。
Source Speaker
Target Speaker
FastSpeach-VC
Tacotron2-VC
Transformer-VC
Controllable voice speed:
Source speaker: English female; Target speaker: Mandarin female
Text: Hazel would like to sell the business.
Source Speaker
Target Speaker
FastSpeach-VC (normal)
FastSpeach-VC (slow)
FastSpeach-VC (fast)
Text: Many people have lost their jobs altogether.
Source Speaker
Target Speaker
FastSpeach-VC (normal)
FastSpeach-VC (slow)
FastSpeach-VC (fast)
Text: This is a serious accident, and we will do our utmost to identify the cause.
Source Speaker
Target Speaker
FastSpeach-VC (normal)
FastSpeach-VC (slow)
FastSpeach-VC (fast)
Adaptation to limited data:
Target speaker: Japanese female (500 utterances)
Text: 伽马射线暴的一种致命来源是超超新星。
Source Speaker
Target Speaker
FastSpeach-VC
Text: 一场关于食品安全的激烈讨论就此展开。

Source Speaker
Target Speaker
FastSpeach-VC
Text: Life is hard enough for them and they need a bit of support.
Source Speaker
Target Speaker
FastSpeach-VC


I am a Computer Engineer. I have completed my Engineering degree from Universal college of Engineering. I am going to be full stack developer. I had done java certification also. I love to play online games for eg:- counter-strike, Modern Combat. And i am also cricket lover.


Choose a sedan for its affordability and excellent fuel economy. Ideal for cruising in the city or on your next road trip.
Take on SUV for its spacious interior, power,and versatility. Perfect for your next family vacation and off-road adventures.
Cruise is the best car brands without the bloated prices. Enjoy the enhanced comfort of a luxury rental and arrive in style.


My Portfolio
Flor A. Garcia
Concept Art - Visual Development - Game Design
A project by Weirdos Studio.


The result is: match:123 4.
match:123 4
First the lazy pattern:\d+? tries to take as little digits as it can, but it has to reach the space, so it takes match:123.
pattern:\d+?
match:123
Then the second \d+? takes only one digit, because that’s enough.
\d+?


Chester Billiards League League 2018-2019
Davies Cup
Results to our e-mail address please.
Or click the button
Davies Cup
Result
Final - to be played on 30th April 2019 at 19:30
400 up off scratch
Player 1
Score
Player 2
Score
Geoff Brassington
400
Colin Jones
66
Geoff had breaks of 74, 52, 103, 43 & 62unf to win comfortably
Congratulations once again to Geoff Brassington
-->
Semi Final - played on 16th April
at Ewloe Social Club
Dress Code
Now that we are at the Semi-Final stage of the competition, please note that the dress code
comes
into operation.
No Jeans, trainers or collarless shirts please.
300 up off scratch
Match
Time
Home
Away
SF1
19:30
Tony Done (110)
Geoff Brassington (300)
SF2
"
Colin Jones (300)
Eddie Duggan (259)
-->
3rd Round - to be played on TBC
200 up off scratch
Match
Place
Date / Time
Home
Away
QF2
Upton RBL
02/04/19 19:30
Tony Done
Alan Norwood
QF4
Upton RBL
N/A
Geoff Brassington
Phil Whiteside
QF3
Upton RBL
TBA
Colin Jones
Darren Robinson
QF1
Eastham Home Guard
02/04/19 19:30
Tony Cooke
Eddie Duggan
2nd Round - to be played on Tuesday 5th
March
200 up off scratch
Match
Place
Time
Home
Away
2R8
Eastham Home Guard
Monday 10/03/19 17:00
Steve Bradshaw
Tony Done
2R6
Ewloe
19:30
Alan Norwood
Malcolm Hughes
2R4
Upton RBL
19:30
Geoff Brassington
Josh Nicholas
2R2
Waverton MI
19:30
Roy Willis
Phil Whiteside
2R1
Waverton MI
19:30
Stuart Nicholas
Colin Jones
2R3
Waverton MI
20:15
Darren Robinson
Mike Bennett
2R7
Eastham Home Guard
Thursday 07/03/19
Tony Cooke
Phil Woolland
2R5
Ewloe
TBA
Ken Massey
Eddie Duggan
1st Round - to be played on TBC
Match
Place
Date / Time
Home
Away
1R1
TBA
22/02/19
Andy Duckers
Steve Bradshaw
1R12
N/A
N/A
Tony Done
BYE
1R5
N/A
N/A
Alan Norwood
BYE
1R13
N/A
N/A
Malcolm Hughes
BYE
1R11
N/A
N/A
Geoff Brassington
BYE
1R4
Waverton
Unknown
Andy Sutton-Thompson
Josh Nicholas
1R2
Waverton
24/02/19
Roy Willis
Barry Evans
1R16
N/A
N/A
Phil Whiteside
BYE
1R10
N/A
N/A
Stuart Nicholas
BYE
1R14
N/A
N/A
Colin Jones
BYE
1R15
N/A
N/A
Darren Robinson
BYE
1R3
Eastham Home Guard
Unknown
Mike Bennett
Glyn Wilcock
1R9
N/A
N/A
Tony Cooke
BYE
1R7
N/A
N/A
Phil Woolland
BYE
1R6
N/A
N/A
Ken Massey
BYE
1R8
N/A
N/A
Eddie Duggan
BYE


We examine interfaces!
- innovate value-added synergies
- synthesize granular deliverables
- benchmark B2B web services
- monetize end-to-end web-readiness
- unleash holistic methodologies
- envisioneer cutting-edge web services
- orchestrate enterprise platforms
- synergize B2B e-services
- transition mission-critical models
- facilitate 24/7 users
- cultivate web-enabled relationships
- syndicate sticky methodologies


FEZ Hydra Firmware
Since the FEZ Hydra is open source, its firmware is available and can be built by end users who wish to customize it. To begin, make sure you have the following installed:
- Visual Studio 2012 Express for Desktop
- The GNU GCC toolchain
Only Visual Studio 2012 is supported due to a requirement in NETMF itself. You may continue to use Visual Studio 2013 or newer for deploying programs to the board. You may use other compilers or toolchains, but they are not covered in this guide and may require a number of changes to the sources to use correctly.
Additionally, compiling the firmware requires the path to the compiler to not have any spaces in it. If you install the above toolchain to the default location in Program Files, you must create a shortcut to it that has no spaces. To do so, assuming the default install path, execute the below command from an elevated command prompt. It will create a shortcut to the install directory in C:\ called gcc.
mklink /D C:\gcc "C:\Program Files (x86)\GNU Tools ARM Embedded\4.9 2015q2"
Getting the Sources
After you have installed the above tools, you need to download the source code for the firmware. It can be found on Bitbucket. If you are familiar with git, you can clone is to a local directory. If not, you can download the latest version from the downloads page. In either case, make sure you extract it to a folder with no spaces in its path just like the compiler. Unfortunately, a shortcut like we created above will not work. For this guide, we will assume you cloned or downloaded and extracted it to C:\netmf-open-firmware.
One important thing to keep in mind is that we do not release the C# sources to our extensions. However, the firmware does include the native interop code. As such, if you wish to use our libraries, you must match the libraries found in an SDK with the firmware version you are compiling. For example, when we released the 2014 R5 SDK, we tagged that commit as SDK-2014-R5 to easily find it later. Pre-releases are not tagged but just have a commit message of the form "Commit for SDK release 2<IP_ADDRESS>". If you try to compile a firmware version that came after the SDK version you got our libraries from, it will likely not work.
Compiling
Once you have all of the tools installed and the firmware source code downloaded, you are ready to compile. Begin by opening a command prompt and navigating to the directory with the firmware source, for example: C:\netmf-open-firmware. Once in that directory, execute the below command. Make sure that the last parameter matches the directory you installed the GCC toolchain to or the shortcut you created.
setenv_gcc 4.9.3 C:\gcc
After that, to build TinyBooter, execute:
msbuild Solutions\FEZ_Hydra\TinyBooter\TinyBooter.proj /t:cleanbuild /p:flavor=release
Once compilation finishes, you will find the final binary at C:\netmf-open-firmware\BuildOutput\ARM\GCC4.9\le\FLASH\release\FEZ_Hydra\bin\TinyBooter.bin. You can then use the loader updater that comes with our SDK to deploy that TinyBooter to your board (make sure to rename it to Loader.bin for the script to find.)
Next, you can compile TinyCLR (the main firmware). Execute the same command as above, except change TinyBooter to TinyCLR:
msbuild Solutions\FEZ_Hydra\TinyCLR\TinyCLR.proj /t:cleanbuild /p:flavor=release
Once that finishes, the final firmware can be found in "C:\netmf-open-firmware\BuildOutput\ARM\GCC4.9\le\FLASH\release\FEZ_Hydra\bin\tinyclr.hex". ER_CONFIG is the same as Config.hex in our SDK and ER_FLASH is the same as Firmware.hex. You can deploy those files using MFDeploy or FEZ Config. You now have your own firmware running on your FEZ Hydra and can deploy to it from Visual Studio.


Landing Page
Special Projects
This story is part of a series of specially designed stories that represents some of the best journalism The Post has to offer. Check out the rest of the special projects here.
TAYLOR JOHNSTON
05.25.17
The stereotype of the “broke college student” has become fairly well-known. A 2014 Buzzfeed article titled “25 Things Only Broke College Students Understand” features pertinent memes about various topics, while a 2016 Money article suggests that college students ought to be saving for retirement already. After all, college means buying textbooks, coffee and Chipotle burritos, sometimes with limited financial help from parents. Here are some tips to keep in mind, both as an incoming freshman and throughout college.
Most major banks have their own mobile applications that allow users to transfer money, deposit checks and, most importantly, check the balance of checking accounts. PNC Bank, Chase Bank and Ohio University Credit Union, among others, all have phone applications.
“You need to know what’s going on with your account, and I’m assuming, as a young person, the mobile app would be the best way,” Eva Bloom, a member development specialist at Ohio University Credit Union, said. “It really depends on the individual.”
While bank apps are great for simple tasks like checking account balances, some of them tend to lack more advanced features. Third-party personal finance apps such as Mint, Prosper Daily and Spending Tracker allow users to further analyze their spending. Analyzing exactly where money is being spent can be a wake-up call. However, those trackers only keep track of what’s already been spent — they won’t keep you from overdrawing your account, Bloom said.
Screenshot via Mint.com
Bloom recommends that everyone, students included, set up account alerts for their checking accounts. There are two types of account alerts. The first notifies users when their balance falls below a certain amount; the second sends an alert every time the account’s debit card is used. The second type of notification prevents fraud — in fact, it recently allowed Bloom to catch someone who used her debit card at a record store in Colorado. Bloom said that could be especially useful for students, whose income might be lower or more sporadic.
“It can be a major headache for (students) to wait to get their money back while they’re working through the process to get it back,” she said.
Over the past several years, it has become a widely established view amongst financial advisers that cash is a smarter way to pay. A 2008 study by the Journal of Experimental Psychology found credit card users tend to spend more money because it can be “treated as play or ‘monopoly money.’ ” However, the study stated that paying with cash is the “most transparent payment mode,” as shoppers quite literally see the money leave their hand.
All Ohio University students living on campus — thus, all freshmen and sophomores — are required to have a meal plan. Meal plans are either flex or traditional, and one of the perks of the more-expensive flex plans is the ability to use extra meal swipes at campus markets. Items at Nelson Market, Boyd Market and the newly remodeled Jefferson Market can all be payed for with swipes. In addition, the value of swipes will be upgraded from $6.25 to $6.50 this fall, according to a previous Post report. The downside is that swipes expire each Saturday night and do not roll over into the following weeks.
One of the most major costs of college is textbooks. Textbook cost has been rising at an incredible rate — according to the American Enterprise Institute, the cost of textbooks between 1978 and 2014 has risen a whopping 945%. For context, the cost of a new home has risen 408% over the same timespan. Renting textbooks instead of buying them is often cheaper and usually a good decision, Rachel Jones, a 2017 OU graduate who works at Little Professor Book Center, said.
“Renting is generally better, unless you think that you’re actually going to use the textbook afterwards, which nine out of 10 times isn’t the case,” Jones said.
Screenshot via American Enterprise Institute
Hard copies of textbooks are not always the best way, either. Various electronic sources, including e-books and free PDFs, can work just as well for a lower price point. Jones said she often uses online PDFs and suggested students check if they really need to buy the newest version of the book.
“They might have older editions, and you definitely want to take advantage of that, because generally, the newer editions, they might change something very minimal that doesn’t actually matter,” Jones said. “And you can be saving so much money.”
It’s no secret that Athens is filled with great restaurants. From chain restaurants such as Chipotle and Jimmy John’s to local staples such as Bagel Street Deli and Union Street Diner, Athens is an often hungry college student’s dream. However, eating out is expensive. An infographic published by The Huffington Post states that college students spend an average of $745 eating off-campus each year. The infographic recommends cooking large meals and eating the leftovers, saying that could save students hundreds of dollars.
Back to The Orientation GuideLanding Page
This story is part of a series of specially designed stories that represents some of the best journalism The Post has to offer. Check out the rest of the special projects here.