| < Day Day Up > |
The COPYTOCOPY UtilityCOPYTOCOPY can be run against any DB2 image copy data set including inline copies made during the execution of REORG or LOAD. Starting with either the local primary or recovery site primary copy, COPYTOCOPY can make up to three copies of one or more of the following types of copies:
Copies created by COPYTOCOPY can be used by the RECOVER utility just like image copies created using the COPY utility. Both table space and index space copies can be made using the COPYTOCOPY utility. Any DB2 utility process that uses image copy data sets can use the image copies created by COPYTOCOPY. This includes MERGECOPY, UNLOAD, and subsequent runs of COPYTOCOPY. However, keep in mind that image copies created with the CONCURRENT option of the COPY utility are not supported by the COPYTOCOPY utility. Just like the COPY utility, the COPYTOCOPY utility records information about the image copies that it creates in the SYSIBM.SYSCOPY system catalog table. The COPYTOCOPY utility will insert the values in the DSNAME, GROUP_MEMBER, JOBNAME, AUTHID, DSVOLSER, and DEVTYPE columns as appropriate depending on the copies that are being created. You cannot run COPYTOCOPY to create additional image copies for certain DB2 Catalog (SYSCOPY in DSNDB06) and DB2 Directory (DSNDB01 and SYSUTILX both in DSNDB01) objects. To execute COPYTOCOPY, the process or user running the utility must have been granted one of the following privileges:
Processes or users having INSTALL SYSOPR authority can run COPYTOCOPY for table spaces in the DB2 Directory (DSNDB01) and DB2 Catalog (DSNDB06). COPYTOCOPY PhasesCOPYTOCOPY creates a new image copy of a table space or an index from an existing image copy. The COPYTOCOPY utility operates in these distinct phases:
COPYTOCOPY Locking and ConcurrencyWhen COPYTOCOPY is running, the object for which the copy applies is placed in utility restricted read/write state (UTRW). Basically, this will prevent anyone from dropping the object while the COPYTOCOPY utility executes. Individual data and index partitions are treated as distinct target objects by the COPYTOCOPY utility. Any other utilities operating on different partitions of the same table space or index space can be run concurrently with COPYTOCOPY. The following utilities cannot be run concurrently on the same object as the COPYTOCOPY utility:
COPYTOCOPY ExecutionTo run the COPYTOCOPY utility, it is not necessary to provide the explicit data set name of the image copy being copied. Instead, the input to the COPYTOCOPY utility is the name of the table space, index space, or index for which the original copy was made, and an indication of which image copy in the catalog is to be copied. There are three options:
Of course, you may choose to specify the data set name for the image copy that is to be copied by the COPYTOCOPY utility. This can be accomplished by using the FROMCOPY clause. When COPYTOCOPY is used in conjunction with a list of objects defined using the LISTDEF statement, the FROMCOPY clause is not valid. If the FROMCOPY keyword is not used, the COPYTOCOPY utility must determine which specific image copy is to be copied. Before COPYTOCOPY can execute it may have to choose between the local site primary copy, local site backup copy, recovery site primary copy, and recovery site backup copy data sets. COPYTOCOPY will search image copies in the following order to determine the input data set to be used:
If the input data set cannot be allocated or opened, the COPYTOCOPY utility will try to use the next image copy data with the same START_RBA value in SYSIBM.SYSCOPY column, in the search order as indicated previously. When the FROMCOPY keyword is used though, only the explicitly specified data set can be used as the input to COPYTOCOPY. An example of JCL used to run the COPYTOCOPY utility is depicted in Listing 32.4. This job is used to make a backup local image copy of table space DSN8S71E in database DSN8D71A. This will be either a full or incremental image copy, whichever was last run for this table space. Listing 32.4. COPYTOCOPY JCL//DB2JOBU JOB (UTILITY),INDEX COPY',CLASS=X,MSGCLASS=X, // NOTIFY=USER //* //**************************************************************** //* //* DB2 COPYTOCOPY UTILITY //* //**************************************************************** //* //COPY EXEC DSNUPROC,SYSTEM=DSN,UID='C2CTS',UTPROC=" //* //DSNUPROC.COPY2 DD DSN=COPY002F.IFDY01,UNIT=SYSDA,VOL=SER=CPY02I, // SPACE=(CYL,(15,1)),DISP=(NEW,CATLG,CATLG) //DSNUPROC.SYSIN DD * COPYTOCOPY TABLESPACE DSN8D71A.DSN8S71E COPYDDN(,COPY2) /* // COPYTOCOPY GuidelinesDeploy the following tips and guidelines as you utilize the COPYTOCOPY utility on your DB2 data. Avoid Terminating COPYTOCOPYIt is not recommended to use the TERM command to terminate a COPYTOCOPY step. A current restart should be done instead. If a job step containing more than one COPYTOCOPY statement abends, do not use TERM UTILITY. Instead, you should restart the job from the last commit point using RESTART. If you terminate COPYTOCOPY in this situation you might cause inconsistencies between the ICF catalog and DB2 catalogs when generation data sets (GDGs) are used. You cannot use RESTART(PHASE) for a COPYTOCOPY job. It is fine to use RESTART(CURRENT) if you do not use the -TERM UTILITY command to terminate a COPYTOCOPY execution. When you use RESTART(CURRENT), COPYTOCOPY will restart from the last commit point with the same image copy data set, so be sure to specify the data set disposition to DISP=(MOD,CATLG,CATLG) on the JCL DD statements. Inline Copy ExceptionWhen using COPYTOCOPY to copy an inline image copy that was made by the REORG utility with the part range option, you will need to specify individual DSNUM for the partitions to be copied. The COPYTOCOPY utility does not support part range. COPYTOCOPY will copy only the specified partition data from the input inline image copy data set into the output image copy data set. |
| < Day Day Up > |


Iran says new oil find adds only 22 billion barrels to reserves
TEHRAN: Iran's oil minister said on Monday (Nov 11) that an oil field whose discovery President Hassan Rouhani announced at the weekend adds only 22.2 billion barrels to the country's estimated crude reserves.
Out of the amount at the site, only a tenth - 2.2 billion barrels - can be extracted due to technological limitations, the minister, Bijan Namdar Zanganeh, told reporters in Tehran.
Rouhani on Sunday announced the discovery of a field containing 53 billion barrels of oil in the southwestern province of Khuzestan, saying it was a "small gift by the government to the people of Iran".
The oil minister said the discovery added 22.2 billion barrels to the country's oil reserves.
"Considering that there was already 31 billion barrels of oil (in the region), the in situ amount added is 22.2 billion barrels," he said.
Due to the area's "dense and stone material", the amount that can be extracted is only "2.2 billion barrels, considering the current technology we have," he added.
The discovery spans 2,400 square kilometres, according to a map Zanganeh showed journalists.
It could potentially be expanded towards to southwest and east through further exploration.
The oil layer is about 3.1 kilometres deep, with an average thickness of 80 metres (yards).
Iran is a founding member of the Organization of the Petroleum Exporting Countries (OPEC).
It sits on the world's fourth-biggest oil reserves, estimated by energy giant BP at 155.6 billion barrels of crude, and also has the second-largest gas reserves.
Yet the Islamic republic has struggled to sell its oil since US President Donald Trump withdrew from a landmark 2015 nuclear deal and reimposed unilateral sanctions on Iran.
The remaining parties to the accord - Britain, China, France, Germany and Russia - have worked to save it by finding ways to bypass US sanctions, but their efforts have so far borne little fruit.


Bob the Builder
| Facts about me |
|
| Sex |
Male |
| Pet ID |
A123456 |
| Age |
5 years |
| Description |
A very energetic cat |
| Spayed/Neutered |
Yes |
| Shelter ID |
Toronto Shelter |
| Outcome |
Entered into TCR |
| FIV Tested |
Yes |
| FLV Tested |
Yes |
| FVRCP Vaccination Date |
Yes |
| Rabies Vaccination Date |
10/10/2017 |
| Medical Notes |
Clean bill of health |
| Behaviour Notes |
Sleeps all the time |
| Foster Date |
10/15/2016 |
| Intake Date |
10/11/2016 |
| Primary Breed |
Tabby |
| Secondary Breed |
N/A |
| Size |
Medium |
| Primary Colour |
Brown |
| Secondary Colour |
N/A |
| Colour Pattern |
Spotted |
| Microchip Number |
123456 |
| Intake Type |
Stray |
| Jurisdiction |
Born in Care |
| Transfer Reason |
To get shots |
| Foster Location |
123 abd street |
| Status |
|
Sign Out of Your Account


Undergrad at Univeridad de los andes (2018-p)
Undergrad at Universidad de los Andes (2016-p)
Started learning Java in 2016, I've seen many courses on this language.
Learned R about two years I go, with the purpose of making deep statistical analysis and modeling.
Attended two different courses on the topic, have a lot of practice on different projects and different types of optimization (Linear, non-linear, stochastic, multi-objective)
One of my favourite areas of software engineering


To see how things are styled (made to look just how they do) on a webpage it can be helpful to consider that everything on a web page consists of boxes. Each element on a web page has it’s own rectangle (or sometimes square) that surrounds it. Any elements that are inside another element are referred to as a child element, while elements that encompass other elements are referred to as parent elements.
We cannot necessarily see these boxes but if we were to add a border
to each element these rectangles would become visible. Instead we can visualise these boxes in our head (or physically draw them) to help understand the positioning of elements.
The position
property is used to position elements using CSS (Cascading Style Script) code however the position property has six different values that can be used. As a rule the default position value for new elements is static (which just means the elements will flow into the page as normal).
Simply setting the position: relative
value to an element will do nothing. You must supply a positioning element (top, left, bottom or right). The element will then position relative to where it would normally be.
e.g. top:10px
will position the element 10px (pixels) down from where it would normally be. Think of it as adding a 10 pixel gap in place of where the element would be, pushing the element down.
Position Relative also introduces the ability to use z-index
(stack order) on that element. The easy way to visualise stack order is to think of sheets of paper. They may not all be the same size or shape, but when you stack them on top of each other some parts may be covered by other pieces of paper, while some pieces of paper might be completely covered and not visible at all.
The top of the pile (the element with the highest z-index) will always be completely visible. It’s worth knowing that z-index only works on positioned elements (absolute, relative, fixed, sticky), so this element will now appear on top of any static elements.
You’ve probably seen examples of this on webpages particularly with navigation bars that seem to ‘float’ at the top of the page while you scroll. When you scroll down the webpage the element remains in a fixed position despite you scrolling (everything that is not fixed will move with the scrolling). Fixed positioning can be useful when used correctly but you can run into problems with fixed items overlapping/covering other content and making it inaccessible.
Absolute positioning also uses the position elements top, right, bottom and left to set the location of an element.
These values will be relative to the next parent element with relative (or absolute) positioning. That means if you are positioning an element inside a div
then that element will be positioned relative to the div
(it’s parent).
(i.e. the top left corner of the paragraph).
If there is no such parent element it will be placed relative to the page itself i.e. The top left corner of the webpage (That's because everything is a child element to the html
- the web page itself).
More advanced than fixed positioning, sticky positioning will allow you to access the benefits of fixed positioning but (hopefully) overcome some of the problems that fixed positioning can have.
When you step on a piece of gum it will stick to your shoe and follow you, but with sticky positioning we can control when the gum becomes ‘unsticky’ and falls off.
Note: IE/Edge 15 and earlier versions do not support sticky positioning.


public class ReadWriteRunnableStandard extends java.lang.Object implements ReadWriteRunnable
Note that this implementation is specific to Modern Robotics, as it has knowledge of the Modern Robotics datagram formats, etc.
ReadWriteRunnable.BlockingState, ReadWriteRunnable.Callback, ReadWriteRunnable.EmptyCallback
| Modifier and Type | Field and Description |
|---|---|
protected boolean |
acceptingWrites |
protected java.lang.Object |
acceptingWritesLock |
protected byte[] |
activeBuffer |
protected TimeWindow |
activeBufferTimeWindow |
protected ReadWriteRunnable.Callback |
callback |
protected android.content.Context |
context |
protected static boolean |
DEBUG_SEGMENTS |
protected boolean |
debugLogging |
protected boolean |
fullWriteNeeded |
protected int |
ibActiveFirst |
protected byte[] |
localDeviceReadCache |
protected byte[] |
localDeviceWriteCache |
protected int |
monitorLength |
protected RobotUsbModule |
owner |
protected boolean |
pruneBufferAfterRead |
protected java.lang.Object |
readSupressionLock |
protected RobotUsbDevice |
robotUsbDevice |
protected boolean |
running |
protected java.util.concurrent.CountDownLatch |
runningInterlock |
protected java.util.concurrent.ConcurrentLinkedQueue<java.lang.Integer> |
segmentReadQueue |
protected java.util.Map<java.lang.Integer,ReadWriteRunnableSegment> |
segments |
protected java.util.concurrent.ConcurrentLinkedQueue<java.lang.Integer> |
segmentWriteQueue |
protected SerialNumber |
serialNumber |
protected boolean |
shutdownComplete |
protected ShutdownReason |
shutdownReason |
protected int |
startAddress |
protected boolean |
suppressReads |
static java.lang.String |
TAG |
protected ModernRoboticsReaderWriter |
usbHandler |
MAX_BUFFER_SIZE
| Constructor and Description |
|---|
ReadWriteRunnableStandard(android.content.Context context,
SerialNumber serialNumber,
RobotUsbDevice device,
int monitorLength,
int startAddress,
boolean debug)
Constructor
|
| Modifier and Type | Method and Description |
|---|---|
protected void |
awaitRunning() |
void |
close()
Close this read-write-runnable
|
ReadWriteRunnableSegment |
createSegment(int key,
int address,
int size) |
void |
destroySegment(int key) |
protected void |
doReadCycle() |
protected void |
doWriteCycle() |
void |
drainPendingWrites() |
protected void |
dumpBuffers(java.lang.String name,
byte[] byteArray) |
void |
executeUsing(java.util.concurrent.ExecutorService service) |
boolean |
getAcceptingWrites() |
RobotUsbModule |
getOwner() |
ReadWriteRunnableSegment |
getSegment(int key) |
ShutdownReason |
getShutdownReason() |
protected boolean |
isFullActive() |
protected void |
queueIfNotAlreadyQueued(int key,
java.util.concurrent.ConcurrentLinkedQueue<java.lang.Integer> queue) |
void |
queueSegmentRead(int key) |
void |
queueSegmentWrite(int key) |
byte[] |
read(int address,
int size)
Read from device
|
byte[] |
readFromWriteCache(int address,
int size)
Read from the device write cache
|
void |
resetWriteNeeded() |
void |
run()
Main read / write loop
|
void |
setAcceptingWrites(boolean acceptingWrites) |
void |
setCallback(ReadWriteRunnable.Callback callback) |
protected void |
setFullActive() |
void |
setOwner(RobotUsbModule owner) |
protected void |
setSuffixActive() |
void |
suppressReads(boolean suppress) |
void |
write(int address,
byte[] data)
Write to device
|
boolean |
writeNeeded() |
public static final java.lang.String TAG
protected final byte[] localDeviceReadCache
protected final byte[] localDeviceWriteCache
protected java.util.Map<java.lang.Integer,ReadWriteRunnableSegment> segments
protected java.util.concurrent.ConcurrentLinkedQueue<java.lang.Integer> segmentReadQueue
protected java.util.concurrent.ConcurrentLinkedQueue<java.lang.Integer> segmentWriteQueue
protected final android.content.Context context
protected final SerialNumber serialNumber
protected RobotUsbDevice robotUsbDevice
protected ModernRoboticsReaderWriter usbHandler
protected int startAddress
protected int monitorLength
protected boolean pruneBufferAfterRead
protected volatile boolean fullWriteNeeded
protected int ibActiveFirst
protected byte[] activeBuffer
protected TimeWindow activeBufferTimeWindow
protected java.util.concurrent.CountDownLatch runningInterlock
protected volatile boolean running
protected volatile ShutdownReason shutdownReason
protected volatile boolean shutdownComplete
protected final java.lang.Object acceptingWritesLock
protected volatile boolean acceptingWrites
protected volatile boolean suppressReads
protected final java.lang.Object readSupressionLock
protected ReadWriteRunnable.Callback callback
protected RobotUsbModule owner
protected final boolean debugLogging
protected static boolean DEBUG_SEGMENTS
public ReadWriteRunnableStandard(android.content.Context context, SerialNumber serialNumber, RobotUsbDevice device, int monitorLength, int startAddress, boolean debug)
serialNumber
- USB serial numberdevice
- FTDI devicemonitorLength
- length of memory map to continually monitorstartAddress
- starting address of changing buffer values.public void setCallback(ReadWriteRunnable.Callback callback)
setCallback
in interface ReadWriteRunnable
public void setOwner(RobotUsbModule owner)
public RobotUsbModule getOwner()
public boolean writeNeeded()
writeNeeded
in interface ReadWriteRunnable
public void resetWriteNeeded()
resetWriteNeeded
in interface ReadWriteRunnable
public void write(int address, byte[] data)
write
in interface ReadWriteRunnable
address
- address to writedata
- data to writepublic void suppressReads(boolean suppress)
suppressReads
in interface ReadWriteRunnable
public byte[] readFromWriteCache(int address, int size)
readFromWriteCache
in interface ReadWriteRunnable
address
- address of byte to readsize
- number of bytes to readpublic byte[] read(int address, int size)
read
in interface ReadWriteRunnable
address
- address to readsize
- number of bytes to readpublic void executeUsing(java.util.concurrent.ExecutorService service)
executeUsing
in interface ReadWriteRunnable
public void close()
close
in interface ReadWriteRunnable
public ReadWriteRunnableSegment createSegment(int key, int address, int size)
createSegment
in interface ReadWriteRunnable
public void destroySegment(int key)
destroySegment
in interface ReadWriteRunnable
public ReadWriteRunnableSegment getSegment(int key)
getSegment
in interface ReadWriteRunnable
public void queueSegmentRead(int key)
queueSegmentRead
in interface ReadWriteRunnable
public void queueSegmentWrite(int key)
queueSegmentWrite
in interface ReadWriteRunnable
protected void awaitRunning()
protected void setFullActive()
protected boolean isFullActive()
protected void setSuffixActive()
public void run()
run
in interface ReadWriteRunnable
run
in interface java.lang.Runnable
protected void doReadCycle() throws java.lang.InterruptedException, RobotUsbException
java.lang.InterruptedException
RobotUsbException
protected void doWriteCycle() throws java.lang.InterruptedException, RobotUsbException
java.lang.InterruptedException
RobotUsbException
public ShutdownReason getShutdownReason()
public void drainPendingWrites()
drainPendingWrites
in interface ReadWriteRunnable
public void setAcceptingWrites(boolean acceptingWrites)
setAcceptingWrites
in interface ReadWriteRunnable
public boolean getAcceptingWrites()
getAcceptingWrites
in interface ReadWriteRunnable
protected void dumpBuffers(java.lang.String name, byte[] byteArray)
protected void queueIfNotAlreadyQueued(int key, java.util.concurrent.ConcurrentLinkedQueue<java.lang.Integer> queue)


--- title: "COVID-19 and R Part IV" author: "Drew Tyre" date: "2020-03-16" output: word_document: default html_document: code_folding: hide draft: no slug: COVID-19_and_R_IV tags_include: - R - OPD - COVID19 categories: Research og_image: /post/covid-19_in_r_iv_files/figure-html/featured_image-1.png ---
Sunday’s number of known cases in the USA are inside the prediction interval, but are below expectations. Good news! I’ve started adding more countries for comparison, to see whether USA is looking more like South Korea or more like Italy.
DISCLAIMER: These unofficial results are not peer reviewed, and should be treated as such. My goal is to learn about forecasting in real time, how simple models compare with more complex models, and even how to compare different models.
Much as yesterday, Sunday’s new cases are inside the prediction intervals but below expectations for the exponential model1. This is good news, maybe. One of the issues with using “reported cases” is that it is affected by the frequency of testing for COVID-19. This is starting to ramp up in the USA, so we might see the number of new cases per day go up as that happens.
If there is a “weekend effect” reducing reporting (see yesterday’s post for the full hypothesis), it would look like the two points for March 14 and 15 – dropping down below the expected values. Once there is more data I might be able to add a “weekend correction”, but not yet. It also probably doesn’t matter for decision making at this point.
One of my FaceBook friends asked, “Does anyone know anyone that actually has coronavirus?” This is an interesting question, because we humans tend to take things that happen to our circle of people more seriously. Unfortunately, in the USA you’re unlikely to know anyone at this stage – ~3500 cases out of 327 million. There are certainly more people with the disease than that, but they’re the lucky ones who get a mild case. The problem with exponential growth is that everything looks fine until it suddenly isn’t. People in Lombardy or Wuhan are much, much more likely to know someone who is ill. The goal of cancelling events and social distancing is to make sure you don’t know someone personally.
Bottom line – the pandemic still spreading in USA consistent with exponential growth. There are possible signs of improvement because the observations are all below the expected values, although that could still just be good luck. The next 5-10 days will be critical to seeing what sort of trajectory the USA is on.
Warning, not for the faint of heart. I’m basically typing while thinking, so if you’re looking for a nice coherent story beyond here, stop reading now.
This article by Tomas Pueyo has some good points about the difference between reported cases (what I’m using) and true cases (what I wish we had). The CDC does have a table of cases by date of infection, but it’s a small fraction of the total cases reported. Nonetheless, I thought it might be instructive to run the exponential model on that data. Annnd, it’s buried inside a JSON file used by a javascript widget that makes the figure and displays the table. No HTML table to scrape, so –
# if running this for the first time, uncomment (once!) all the lines from
# <HERE> to
# library("RJSONIO")
# library("RCurl")
#
# # grab the data
# raw_data <- getURL("https://www.cdc.gov/coronavirus/2019-ncov/us-cases-epi-chart.json")
# # Then covert from JSON into a list in R
# data <- fromJSON(raw_data)$data$columns # the list item named "data" has what we want, in an item named columns
# # now put in a tibble, need to do some manual things to remove the name from the start of the data
# cdc_epi <- tibble(
# Date = mdy(data[[1]][-1]), # grab first item in list, remove first element (the name)
# incident_cases = as.numeric(data[[2]][-1]) # grab second item in list, remove first element
# )
# # archive it, so that I use the same data for these figures always!
# also means I don't hit the server with data requests every time I save the post.
# save(cdc_epi, file = "data/cdc_epi_2020-03-15.Rda")
# <HERE>
load(file = "data/cdc_epi_2020-03-15.Rda")
# plot it, just to see what it looks like
ggplot(data = cdc_epi,
mapping = aes(x = Date, y = incident_cases)) +
geom_point() +
geom_vline(xintercept = ymd("2020-03-05"), linetype = 2)
The vertical dashed line marks the point at which the CDC thinks not all cases are yet reported, so we shouldn’t model things after March 5th, yet. I want to fit the same model as before, but the difficulty with that model is that it doesn’t handle zeros well (because \(log_{10}(0) = -\infty\)). In my current predictions I’m dodging this issue by only using data after the number of incident cases is always positive. But I’ve been wondering how a glm with log link would do. Also need to choose an error distribution; I’ll try a Poisson distribution because it has only positive and discrete values.
cdc_epi_trimmed <- filter(cdc_epi, Date < "2020-03-05") %>%
mutate(days = as.numeric(Date - ymd("2020-02-27"))) # use day relative to Feb 27, same as other model
cdc_epi_glm <- glm(incident_cases ~ days, data = cdc_epi_trimmed, family = poisson)
summary(cdc_epi_glm)
##
## Call:
## glm(formula = incident_cases ~ days, family = poisson, data = cdc_epi_trimmed)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -3.3802 -1.0380 -0.3911 0.7188 3.4028
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.306554 0.045628 72.47 <2e-16 ***
## days 0.142165 0.006575 21.62 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 1096.97 on 52 degrees of freedom
## Residual deviance: 108.51 on 51 degrees of freedom
## AIC: 237.87
##
## Number of Fisher Scoring iterations: 5
Wow. Daily growth rate is 0.14 day-1, almost exactly the same estimate as I get for the model based on reported cases. That is a coincidence because the base of the logarithms is different. This is easy to see by running the transformation based model on the cases by infection date data.
cdc_epi_trimmed %>%
filter(Date > ymd("2020-02-17")) %>%
mutate(log_cases = log10(incident_cases)) %>%
lm(log_cases ~ days, data = .) %>%
summary()
##
## Call:
## lm(formula = log_cases ~ days, data = .)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.161794 -0.088745 -0.001402 0.091514 0.284924
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.440548 0.033381 43.155 2.71e-16 ***
## days 0.064664 0.006886 9.391 2.02e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.127 on 14 degrees of freedom
## Multiple R-squared: 0.863, Adjusted R-squared: 0.8532
## F-statistic: 88.19 on 1 and 14 DF, p-value: 2.023e-07
So reported cases are growing faster than the number of cases with known infection dates. Trouble is, the number of cases with known infection dates is compromised by a lack of reporting (or the numbers would match the reported cases).
The Poisson model is mildly overdispersed (ratio of residual deviance to degrees of freedom is 2.1), so how does a Negative Binomial model compare?
library("mgcv") # switch to mgcv::gam to estimate overdispersion parameter
cdc_epi_glm2 <- gam(incident_cases ~ days, data = cdc_epi_trimmed, family = nb)
summary(cdc_epi_glm2)
##
## Family: Negative Binomial(8.649)
## Link function: log
##
## Formula:
## incident_cases ~ days
##
## Parametric coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.234943 0.100297 32.25 <2e-16 ***
## days 0.134150 0.009143 14.67 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## R-sq.(adj) = 0.925 Deviance explained = 85.4%
## -REML = 119.64 Scale est. = 1 n = 53
The AIC for the Negative binomial is 235 so slightly moderately better than the Poisson model.
I’d like to get predictions for more countries so we can compare how the USA is doing with, say, Italy or South Korea. I’m going back to reported case data from JHU for this, and I’m going to use the Negative Binomial model because then I don’t have to worry about the odd zero close to the start of the time series. I’ll process the other countries separately because of the funky county/state business in the USA, then stick them together afterwards.
countries <- c("Canada", "Australia", "Korea, South", "Italy", "Iran")
other_confirmed_total <- jhu_wide %>%
rename(province = "Province/State",
country_region = "Country/Region") %>%
pivot_longer(-c(province, country_region, Lat, Long),
names_to = "Date", values_to = "cumulative_cases") %>%
filter(country_region %in% countries,
# have to trap the rows with missing province (most other countries)
# otherwise str_detect(province ...) is missing and dropped by filter()
is.na(province) | str_detect(province, "Princess", negate = TRUE)) %>%
mutate(Date = mdy(Date)) %>%
# filter out state rows prior to march 9, and county rows after that.
group_by(country_region, Date) %>% # then group by country and Date and sum
summarize(cumulative_cases = sum(cumulative_cases)) %>%
group_by(country_region) %>%
mutate(incident_cases = c(0, diff(cumulative_cases))) %>%
ungroup()
us_confirmed_total <- mutate(us_confirmed_total, country_region = "USA")
all_confirmed_total <- bind_rows(other_confirmed_total, us_confirmed_total)
pall <- ggplot(data = all_confirmed_total,
mapping = aes(x = Date)) + # don't add y = here, so we can change variables later for ribbons etc
geom_point(mapping = aes(y = incident_cases)) +
facet_wrap(~country_region, scales = "free_y")
pall
Phew. That took far too long to sort out, because I tried to filter()
all the countries including the
USA, and that was just not working. Treating the USA separately was easy because I already
had that dataframe built above. The y axis scales are wildly different on those, but just eyeballing
the shape it’s clear that South Korea is doing something radically different. However, the exponential
growth in South Korea started earlier too, so that trajectory might not be impossible.
There are also a couple
weird outliers in Australia and Italy where incident cases dropped to zero suddenly for one day. Canada
also has a strange 2 day oscillation going on. I think these are likely reporting artifacts.
Now fit the models and see what that looks like. The early period of the time series for all these countries is mostly driven by travel related cases, so as before I’ll trim off the data prior to Feb 15. I picked that date by eyeballing the data and looking for a date prior to where case loads started accelerating for all countries. It would be better to have that set uniquely for each country, and I’ve got some thoughts on how to do that, but I’ll leave that for tomorrow.
all_results <- all_confirmed_total %>%
mutate(day = as.numeric(Date - ymd("2020-02-27"))) %>% # get day relative to Feb 27
filter(Date > "2020-02-15", Date <= "2020-03-11") %>% # trim data to the dates we want
group_by(country_region) %>%
# nest() puts the data for each country into a "list column" called "data"
# so that I can do the next step
nest() %>%
# fit the models to each dataframe in the list column
mutate(models = map(data, ~gam(incident_cases ~ day, data = ., family = nb)),
data = map2(models, data, ~bind_cols(.y, tibble(.fitted = fitted.values(.x))))) ## adds regression output to data
all_fitted <- all_results %>%
select(-models) %>% # remove the models column before the next step
unnest(cols = data) # pulls the "data" column back out to make a single data frame
pall +
geom_line(data = all_fitted,
mapping = aes(y = .fitted))
That’s a first cut, because broom
functions don’t work on mgcv::gam
objects. So I
need to write a custom function to get what I want. But it certainly looks like all
countries are showing less growth in cases than expected from a simple exponential
growth model. That’s good news.
augment_gam <- function(x, newdata = NULL, se.fit = FALSE){
if (is.null(newdata)){
result <- predict(x, se.fit = se.fit)
original_data <- x$model
} else {
result <- predict(x, newdata = newdata, se.fit = se.fit)
original_data <- newdata
}
if (se.fit){
result <- bind_cols(original_data,
tibble(.fitted = result$fit,
.se.fit = result$se.fit))
} else {
result <- bind_cols(original_data,
tibble(.fitted = result))
}
return(result)
}
all_results <- all_confirmed_total %>%
mutate(day = as.numeric(Date - ymd("2020-02-27"))) %>% # get day relative to Feb 27
filter(Date > "2020-02-15", Date <= "2020-03-11") %>% # trim data to the dates we want
group_by(country_region) %>%
# nest() puts the data for each country into a "list column" called "data"
# so that I can do the next step
nest() %>%
# fit the models to each dataframe in the list column
mutate(models = map(data, ~gam(incident_cases ~ day, data = ., family = nb)),
data = map(models, augment_gam, se.fit = TRUE), ## adds regression output to data
theta = map(models, ~.x$family$getTheta(TRUE)),
df = map_dbl(models, "df.residual"))
all_fitted <- all_results %>%
select(-models) %>% # remove the models column before the next step
unnest(cols = data) %>% # pulls the "data" column back out to make a single data frame
mutate(Date = ymd("2020-02-27")+days(day), # recreate the Date column
fitted_cases = exp(.fitted), # .fitted on log scale
lcl_cases = exp(.fitted - qt(0.975, df)*.se.fit),
ucl_cases = exp(.fitted + qt(0.975, df)*.se.fit))
predict_data <- tibble(day = 14:20)
predicted <- all_results %>%
mutate(predictions = map(models, augment_gam, se.fit = TRUE, newdata = predict_data),
theta = map(models, ~.x$family$getTheta(TRUE)),
df = map_dbl(models, "df.residual")) %>%
select(-models, -data) %>%
unnest(cols = c("predictions", "theta")) %>%
mutate(Date = ymd("2020-02-27")+days(day), # recreate the Date column
expected_cases = exp(.fitted),
lpl = qnbinom(0.025, mu = expected_cases, size = theta),
upl = qnbinom(0.975, mu = expected_cases, size = theta))
pall2 <- ggplot(data = filter(all_confirmed_total, Date >= ymd("2020-02-15")),
mapping = aes(x = Date)) + # don't add y = here, so we can change variables later for ribbons etc
geom_point(mapping = aes(y = incident_cases)) +
facet_wrap(~country_region, scales = "free_y")
pall2 +
geom_line(data = all_fitted,
mapping = aes(y = fitted_cases),
col = "blue", size = 1.5) +
geom_ribbon(data = all_fitted,
mapping = aes(ymin = lcl_cases, ymax = ucl_cases),
alpha = 0.25) +
geom_line(data = predicted,
mapping = aes(y = expected_cases),
linetype = 2) +
geom_ribbon(data = predicted,
mapping = aes(ymin = lpl, ymax = upl),
alpha = 0.25) +
scale_y_log10()
Clearly I need to figure out country specific ranges to fit the model. South Korea is clearly not growing anymore, so the terrible model fit is not unexpected. Iran is either doing great, or lying about the number of new cases, opinion out there seems divided on this point.
One excellent point raised by Brian McGill in the open discussion on Dyanmic Ecology is that the extreme response of South Korea and other countries which works in the short term, might not be the best strategy in the long term. The “squash it” strategy works for a disease like SARS or MERS which are less contagious, and can therefore really be put to bed for good. But seems like COVID-19 has exceeded global capacity to squash it everywhere. Which means we need to figure out how to live with it long term. With an estimated R0 = 2.5 COVID-19 will continue to be an issue until ~ 60% of the population are immune. I think the real goal of the “stretch it out” strategy by social distancing etc. is to buy us enough time to get a vaccine and build herd immunity artificially.
I want to add some more models to the mix, I’m thinking maybe a logistic curve for the cumulative number of cases as suggested by my friend Scott Bradshaw (an MD), and then maybe a proper epidemiological model.


Plymouth Argyle game against Grimsby Town 'in jeopardy' due to roof damage
Club officials and safety experts are carrying out checks at Home Park
by Chris ErringtonPlymouth Argyle's League Two game against Grimsby Town at Home Park this afternoon is 'in jeopardy' due to damage to the roof in parts of Home Park.
Club officials and safety experts are carrying out an assessment to see if repairs can be made in time.
A club statement released at 11.30am read: "The overnight severe winds in Plymouth have caused significant damage to the roof in parts of Home Park.
The health and safety of supporters is, of paramount importance and we are currently assessing the situation, along with safety experts, to see if we can make good the damage.
However, with continuing bad weather forecast, this might not be possible, regrettably placing this afternoon’s Sky Bet League Two game against Grimsby Town in jeopardy. We will keep supporters updated."
The Grimsby squad made the 350-mile trip from Humberside yesterday.


|
UTF-8 Simple Library for Internationalization
|
#include <string>
#include <vector>
#include <fstream>
#include <utf8/winutf8.h>
#include <utf8/ini.h>
Go to the source code of this file.
Data Structures | |
| class | utf8::ifstream |
| Input stream class using UTF-8 filename. More... | |
| class | utf8::ofstream |
| Output stream class using UTF-8 filename. More... | |
| class | utf8::fstream |
| Bidirectional stream class using UTF-8 filename. More... | |
Functions | |
| std::string | utf8::narrow (const wchar_t *s, size_t nch) |
| Conversion from wide character to UTF-8. More... | |
| std::string | utf8::narrow (const std::wstring &s) |
| Conversion from wide character to UTF-8. More... | |
| std::string | utf8::narrow (const std::u32string &s) |
| Conversion from UTF32 to UTF8. More... | |
| std::wstring | utf8::widen (const char *s, size_t nch) |
| Conversion from UTF-8 to wide character. More... | |
| std::wstring | utf8::widen (const std::string &s) |
| Conversion from UTF-8 to wide character. More... | |
| std::u32string | utf8::runes (const std::string &s) |
| Conversion from UTF-8 to UTF-32. More... | |
| size_t | utf8::length (const std::string &s) |
| Counts number of characters in an UTF8 encoded string. More... | |
| bool | utf8::next (const std::string &s, std::string::const_iterator &p) |
| Advances a string iterator to next UTF-8 character. More... | |
| bool | utf8::next (char *&p) |
| Advances a character pointer to next UTF-8 character. More... | |
| bool | utf8::next (const char *&p) |
| Advances a pointer to next valid UTF-8 character. | |
| char32_t | utf8::rune (const std::string::const_iterator &p) |
| Return current Unicode code point. More... | |
| char32_t | utf8::rune (const char *p) |
| Return current Unicode code point. More... | |
| bool | utf8::valid (const std::string &s) |
| Verifies if string is a valid UTF-8 string. More... | |
| bool | utf8::valid (const char *s) |
| Verifies if string is a valid UTF-8 string. More... | |
| std::vector< std::string > | utf8::get_argv () |
| Converts wide byte command arguments to UTF-8 to a vector of UTF-8 strings. More... | |
| char ** | utf8::get_argv (int *argc) |
| Converts wide byte command arguments to an array of pointers to UTF-8 strings. More... | |
| void | utf8::free_argv (int argc, char **argv) |
| Frees the memory allocated by get_argv() More... | |
| bool | utf8::mkdir (const char *dirname) |
| Creates a new directory. More... | |
| bool | utf8::mkdir (const std::string &dirname) |
| Creates a new directory. More... | |
| bool | utf8::rmdir (const char *dirname) |
| Deletes a directory. More... | |
| bool | utf8::rmdir (const std::string &dirname) |
| Deletes a directory. More... | |
| bool | utf8::chdir (const char *dirname) |
| Changes the current working directory. More... | |
| bool | utf8::chdir (const std::string &dirname) |
| Changes the current working directory. More... | |
| bool | utf8::chmod (const char *filename, int mode) |
| Changes the file access permissions. More... | |
| bool | utf8::chmod (const std::string &filename, int mode) |
| Changes the file access permissions. More... | |
| std::string | utf8::getcwd () |
| Gets the current working directory. More... | |
| bool | utf8::access (const char *filename, int mode) |
| Determines if a file has the requested access permissions. More... | |
| bool | utf8::access (const std::string &filename, int mode) |
| Determines if a file has the requested access permissions. More... | |
| bool | utf8::remove (const char *filename) |
| Delete a file. More... | |
| bool | utf8::remove (const std::string &filename) |
| Delete a file. More... | |
| void | utf8::splitpath (const std::string &path, char *drive, char *dir, char *fname, char *ext) |
| Breaks a path name into components. More... | |
| void | utf8::splitpath (const std::string &path, std::string &drive, std::string &dir, std::string &fname, std::string &ext) |
| Breaks a path name into components. More... | |
| bool | utf8::makepath (std::string &path, const std::string &drive, const std::string &dir, const std::string &fname, const std::string &ext) |
| Creates a path from UTF-8 encoded components. More... | |
| std::string | utf8::getenv (const std::string &var) |
| Retrieves the value of an environment variable. More... | |
| bool | utf8::putenv (const std::string &str) |
| Creates, modifies, or removes environment variables. More... | |
| bool | utf8::putenv (const std::string &var, const std::string &val) |
| Creates, modifies, or removes environment variables. More... | |
| void | utf8::tolower (std::string &str) |
| In place version converts a UTF-8 encoded string to lowercase. | |
| void | utf8::toupper (std::string &str) |
| In place version converts a UTF-8 encoded string to lowercase. | |
| std::string | utf8::tolower (const std::string &str) |
| Convert UTF-8 string to lower case using case folding table published by Unicode Consortium. More... | |
| std::string | utf8::toupper (const std::string &str) |
| Convert UTF-8 string to upper case using case folding table published by Unicode Consortium. More... | |
| bool | utf8::isblank (const char *p) |
| Return true if character is blank(-ish) More... | |
| bool | utf8::isblank (std::string::const_iterator p) |
| Return true if character is blank(-ish) More... | |
| bool | utf8::isdigit (const char *p) |
| Return true if character is a decimal digit (0-9) More... | |
| bool | utf8::isdigit (std::string::const_iterator p) |
| Return true if character is a decimal digit (0-9) More... | |
| bool | utf8::isalnum (const char *p) |
| Return true if character is an alphanumeric character (0-9 or A-Z or a-z) More... | |
| bool | utf8::isalnum (std::string::const_iterator p) |
| Return true if character is an alphanumeric character (0-9 or A-Z or a-z) More... | |
| bool | utf8::isalpha (const char *p) |
| Return true if character is an alphabetic character (A-Z or a-z) More... | |
| bool | utf8::isalpha (std::string::const_iterator p) |
| Return true if character is an alphabetic character (A-Z or a-z) More... | |
| bool | utf8::isxdigit (const char *p) |
| Return true if character is a hexadecimal digit (0-9 or A-F or a-f) More... | |
| bool | utf8::isxdigit (std::string::const_iterator p) |
| Return true if character is a hexadecimal digit (0-9 or A-F or a-f) More... | |
| bool | utf8::rename (const char *oldname, const char *newname) |
| Rename a file or directory. More... | |
| bool | utf8::rename (const std::string &oldname, const std::string &newname) |
| Rename a file or directory. More... | |
| FILE * | utf8::fopen (const char *filename, const char *mode) |
| Open a file. More... | |
| FILE * | utf8::fopen (const std::string &filename, const std::string &mode) |
| Open a file. More... | |
| bool | utf8::rename (const char *oldname, const char *newname) |
| Rename a file or directory. More... | |
| bool | utf8::rename (const std::string &oldname, const std::string &newname) |
| Rename a file or directory. More... | |
| FILE * | utf8::fopen (const char *filename, const char *mode) |
| Open a file. More... | |
| FILE * | utf8::fopen (const std::string &filename, const std::string &mode) |
| Open a file. More... | |
| bool | utf8::rename (const char *oldname, const char *newname) |
| Rename a file or directory. More... | |
| bool | utf8::rename (const std::string &oldname, const std::string &newname) |
| Rename a file or directory. More... | |
| FILE * | utf8::fopen (const char *filename, const char *mode) |
| Open a file. More... | |
| FILE * | utf8::fopen (const std::string &filename, const std::string &mode) |
| Open a file. More... | |
UTF-8 Conversion functions (c) Mircea Neacsu 2014-2020
| bool utf8::access | ( | const char * | filename, |
| int | mode | ||
| ) |
Determines if a file has the requested access permissions.
| filename | UTF-8 file path of new working directory |
| mode | required access:
|
| bool utf8::access | ( | const std::string & | filename, |
| int | mode | ||
| ) |
Determines if a file has the requested access permissions.
| filename | UTF-8 file path of new working directory |
| mode | required access:
|
| bool utf8::chdir | ( | const char * | dirname | ) |
Changes the current working directory.
| dirname | UTF-8 path of new working directory |
| bool utf8::chdir | ( | const std::string & | dirname | ) |
Changes the current working directory.
| dirname | UTF-8 path of new working directory |
| bool utf8::chmod | ( | const char * | filename, |
| int | mode | ||
| ) |
Changes the file access permissions.
| filename | UTF-8 name of file |
| mode | access permissions. Or'ed combination of:
|
| bool utf8::chmod | ( | const std::string & | filename, |
| int | mode | ||
| ) |
Changes the file access permissions.
| filename | UTF-8 name of file |
| mode | access permissions. Or'ed combination of:
|
| FILE * utf8::fopen | ( | const char * | filename, |
| const char * | mode | ||
| ) |
Open a file.
| filename | UTF-8 encoded file name |
| mode | access mode |
| FILE * utf8::fopen | ( | const std::string & | filename, |
| const std::string & | mode | ||
| ) |
Open a file.
| filename | UTF-8 encoded file name |
| mode | access mode |
| void utf8::free_argv | ( | int | argc, |
| char ** | argv | ||
| ) |
Frees the memory allocated by get_argv()
| argc | number of arguments |
| argv | array of pointers to arguments |
| std::vector< std::string > utf8::get_argv | ( | ) |
Converts wide byte command arguments to UTF-8 to a vector of UTF-8 strings.
| char ** utf8::get_argv | ( | int * | argc | ) |
Converts wide byte command arguments to an array of pointers to UTF-8 strings.
| argc | Pointer to an integer that contains number of parameters |
The space allocated for strings and array of pointers should be freed by calling free_utf8argv()
| std::string utf8::getcwd | ( | ) |
Gets the current working directory.
| std::string utf8::getenv | ( | const std::string & | var | ) |
Retrieves the value of an environment variable.
| var | name of environment variable |
|
inline |
Return true if character is an alphanumeric character (0-9 or A-Z or a-z)
| p | pointer to character to check |
|
inline |
Return true if character is an alphabetic character (A-Z or a-z)
| p | pointer to character to check |
|
inline |
Return true if character is blank(-ish)
| p | pointer to character to check |
|
inline |
Return true if character is a decimal digit (0-9)
| p | pointer to character to check |
|
inline |
Return true if character is a hexadecimal digit (0-9 or A-F or a-f)
| p | pointer to character to check |
| size_t utf8::length | ( | const std::string & | s | ) |
Counts number of characters in an UTF8 encoded string.
| s | UTF8-encoded string |
| bool utf8::makepath | ( | std::string & | path, |
| const std::string & | drive, | ||
| const std::string & | dir, | ||
| const std::string & | fname, | ||
| const std::string & | ext | ||
| ) |
Creates a path from UTF-8 encoded components.
| path | Resulting path (UTF-8 encoded) |
| drive | drive letter |
| dir | directory path |
| fname | filename |
| ext | extension |
If any required syntactic element (colon after drive letter, '\' at end of directory path, colon before extension) is missing, it is automatically added.
| bool utf8::mkdir | ( | const char * | dirname | ) |
Creates a new directory.
| dirname | UTF-8 path for new directory |
| bool utf8::mkdir | ( | const std::string & | dirname | ) |
Creates a new directory.
| dirname | UTF-8 path for new directory |
| std::string utf8::narrow | ( | const std::u32string & | s | ) |
Conversion from UTF32 to UTF8.
| s | UTF-32 encoded string |
Each character in the input string should be a valid UTF-32 code point ( <0x10FFFF)
| std::string utf8::narrow | ( | const std::wstring & | s | ) |
Conversion from wide character to UTF-8.
| s | input string |
| std::string utf8::narrow | ( | const wchar_t * | s, |
| size_t | nch | ||
| ) |
Conversion from wide character to UTF-8.
| s | input string |
| nch | number of character to convert or 0 if string is null-terminated |
| bool utf8::next | ( | char *& | p | ) |
Advances a character pointer to next UTF-8 character.
| p | Reference to character pointer to be advanced |
| bool utf8::next | ( | const std::string & | s, |
| std::string::const_iterator & | p | ||
| ) |
Advances a string iterator to next UTF-8 character.
| s | UTF-8 string |
| p | Iterator on s string to be advanced |
| bool utf8::putenv | ( | const std::string & | str | ) |
Creates, modifies, or removes environment variables.
This is a wrapper for _wputenv function
| str | environment string to modify |
| bool utf8::putenv | ( | const std::string & | var, |
| const std::string & | val | ||
| ) |
Creates, modifies, or removes environment variables.
This is a wrapper for [_wputenv_s function] https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/putenv-s-wputenv-s
| var | name of environment variable |
| val | new value of environment variable. If empty, the environment variable is removed |
| bool utf8::remove | ( | const char * | filename | ) |
Delete a file.
| filename | UTF-8 name of file to be deleted |
| bool utf8::remove | ( | const std::string & | filename | ) |
Delete a file.
| filename | UTF-8 name of file to be deleted |
| bool utf8::rename | ( | const char * | oldname, |
| const char * | newname | ||
| ) |
Rename a file or directory.
| oldname | current UTF-8 encoded name of file or directory |
| newname | new UTF-8 name |
| bool utf8::rename | ( | const std::string & | oldname, |
| const std::string & | newname | ||
| ) |
Rename a file or directory.
| oldname | current UTF-8 encoded name of file or directory |
| newname | new UTF-8 name |
| bool utf8::rmdir | ( | const char * | dirname | ) |
Deletes a directory.
| dirname | UTF-8 path of directory to be removed |
| bool utf8::rmdir | ( | const std::string & | dirname | ) |
Deletes a directory.
| dirname | UTF-8 path of directory to be removed |
| char32_t utf8::rune | ( | const char * | p | ) |
Return current Unicode code point.
| p | pointer to character |
| char32_t utf8::rune | ( | const std::string::const_iterator & | p | ) |
Return current Unicode code point.
| p | pointer to character |
| std::u32string utf8::runes | ( | const std::string & | s | ) |
Conversion from UTF-8 to UTF-32.
| s | UTF-8 encoded string |
| void utf8::splitpath | ( | const std::string & | path, |
| char * | drive, | ||
| char * | dir, | ||
| char * | fname, | ||
| char * | ext | ||
| ) |
Breaks a path name into components.
| path | UTF-8 encoded full path |
| drive | drive letter followed by colon (or NULL if not needed) |
| dir | directory path (or NULL if not needed) |
| fname | base filename (or NULL if not needed) |
| ext | file extension including the leading period (.) (or NULL if not needed) |
Returned strings are converted to UTF-8.
| void utf8::splitpath | ( | const std::string & | path, |
| std::string & | drive, | ||
| std::string & | dir, | ||
| std::string & | fname, | ||
| std::string & | ext | ||
| ) |
Breaks a path name into components.
| path | UTF-8 encoded full path |
| drive | drive letter followed by colon |
| dir | directory path |
| fname | base filename |
| ext | file extension including the leading period (.) |
Returned strings are converted to UTF-8.
| std::string utf8::tolower | ( | const std::string & | str | ) |
Convert UTF-8 string to lower case using case folding table published by Unicode Consortium.
(http://www.unicode.org/Public/12.1.0/ucd/CaseFolding.txt)
| str | UTF-8 string to convert to lowercase. |
| std::string utf8::toupper | ( | const std::string & | str | ) |
Convert UTF-8 string to upper case using case folding table published by Unicode Consortium.
(http://www.unicode.org/Public/12.1.0/ucd/CaseFolding.txt)
| str | UTF-8 string to convert to uppercase. |
| bool utf8::valid | ( | const char * | s | ) |
Verifies if string is a valid UTF-8 string.
| s | pointer to character string to verify |
|
inline |
Verifies if string is a valid UTF-8 string.
| s | character string to verify |
| std::wstring utf8::widen | ( | const char * | s, |
| size_t | nch | ||
| ) |
Conversion from UTF-8 to wide character.
| s | input string |
| nch | number of characters to convert or 0 if string is null-terminated |
| std::wstring utf8::widen | ( | const std::string & | s | ) |
Conversion from UTF-8 to wide character.
| s | input string |


{% load static %}
{% csrf_token %}
Daily Bytes
Write your hearts out byte by byte
Sign in with
or
{{form.errors}}
Sign in
Forgot password?
Don't have an account?
Sign up


Loading...
sContactInfo
SDH::cDSA
sControllerInfo
SDH::cDSA
sMatrixInfo
SDH::cDSA
sRecordedData
sResponse
SDH::cDSA
sSDHBinaryRequest
SDH
sSDHBinaryResponse
SDH
sSensitivityInfo
SDH::cDSA
sSensorInfo
SDH::cDSA
sTactileSensorFrame
SDH::cDSA
Searching...
No Matches


Battleship
SHIPS:
Submarine
Patrol Boat
Destroyer
Battle Ship
Aircraft Carrier
PLAYERS:
Player 1
Player 2


Recent Dev Bootcamp graduate. A Philadelphia transplant to Chicago. Eternal optimist, morning person, reader of books.
Emily Bosakowski
Web Developer
Recent Dev Bootcamp graduate. A Philadelphia transplant to Chicago. Eternal optimist, morning person, reader of books.


Enumerations
The following enumerations are available globally.
-
Describes navigation event.
- completion->Void: Observes navigation completion.
- viewController: Observes view controller events.
Declaration
Swift
public enum NavigationEvent<ToViewController: UIViewController, DataType>
-
Tracks keyboard and affects app window.
- rise: Rises window above keyboard without changing its size.
- shrink: Shrinks window above keyboard.
default
: Default behaviour.
Declaration
Swift
public enum KeyboardTrackingMode
-
Defines embedding behaviour.
- navigationController: Embeds destination view controller in navigation controller.
- embeddingProtocol: Embeds destination view controller with behaviour defined in
EmbeddingProtocol
type.
Declaration
Swift
public enum EmbeddingType
-
Defines state restoration behaviour.
- allow: State restoration will be processed.
- reject: State restoration will not be processed.
- protect: State restoration should be protected with an object conforming ProtectionSpace. Unprotection block from this object must be called on same thread to support state restoration because state restoration engine needs view controller immediately to be able to restore it.
If you want to handle a case asynchronously, you can use onUnprotect handler in StateRestorationContext where you will be provided with view controller instance. Use it as you wish.
See moreDeclaration
Swift
public enum StateRestorationBehavior
-
Navigation error enum.
- unknown: Unknown error.
destinationNotFound: Destination is not found. Navigation error enum.
unknown: Unknown error.
notFound: Destination is not found.
Declaration
Swift
public enum NavigationError: Error


The records fetched between {{startdate}} and {{enddate}} are:
| MONITORING ID | PC NAME | GRAPH | COMPARE GRAPHS | DATE | CLIENT IP | SERVER IP | UPLOADED PACKETS | DOWNLOADED PACKETS | TOTAL PACKETS | AVERAGE UPLOADED PACKETS | UPLOAD BANDWIDTH | AVERAGE DOWNLOADED PACKETS | DOWNLOAD BANDWIDTH |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{row.2}} | {{row.3}} | GRAPH | COMPARE GRAPHS | {{row.4}} | {{row.5}} | {{row.6}} | {{row.7}} | {{row.8}} | {{row.9}} | {{row.11}} | {{row.12}} | {{row.14}} | {{row.15}} | {% endfor %}


One of the great things about pairing with others was is much you learn and discover when are working together. It's great getting to know everyone in the process and great knowing how much people are willing to help when challenges are overwhelming. It was particularly rewarding to have guidance from everyone and I'm glad there have been times I could contribute even when I'm so new to this. Everybody I've paired with have all been exceptional people.
One of the most difficult and yet frustrating parts of pairing is doing it online. Even though we’re face to face over media, I can’t help but think how impersonal it can feel. I’m so excited to meet everyone face to face and get to know everyone.
Feedback has been beneficial but at the same time, difficult to hear. Constructive criticism isn’t the easiest for everyone. While I know deep down that the purpose of the exercise is to increase our performance standards, it can become dishearenting when one notices a recurrence that they're trying to overcome.
There are times when I read my feedback and feel that I have both contributed and accomplished something within a challenge and in these several weeks. I felt like I brought something good to a pairing session and learned a lot doing so. However, more times than not, I felt I could have done something better. I really wish I could contribute just as much as my pairing partners.
When I reviewed my feedback, I recognized one of the recurrences I had is that I should express myself more. Usually when a topic is confusing, I’m very hesitant to ask questions and focus more on listening.  I know I have my moments of strength, but I would desperately love to overcome my weaknesses.
Weaknesses are not easy to overcome. I know it’s not something I can fix in a session. The only thing I can do is continue doing my best, keep in mind to try and express myself more often and push through the tough challenges.


Road and bridge projects are expected to make up one of the biggest chunks of the jobs created in the stimulus package. Below, you’ll find a chart of more than 5,800 projects that have been approved by the U.S. Department of Transportation. Once given the green light, states can put the projects out to bid, contract them and begin construction work. So far, about 2,300 projects are under way.
Help us find out how much progress has been made on these projects by participating in our Stimulus Spot Check.
For more on the stimulus, check out our blog and resource page.
| State | Urban Area | Project Description | Improvement Type | ARRA Funds Obligated |
|---|---|---|---|---|
| ALABAMA | HUNTSVILLE | SR-1 (MEMORIAL PKY) FR CR-85 (OAKWOOD AV) TO CR-22 (SPARKMAN DR) INCLUDING AN OVERPASS AT CR-22 (PRIORITY #9-2008) | Pavement Improvement | $25,534,292 |
| ALABAMA | DOTHAN | RETROFIT BRIDGE RAILS ON SR-1 (US-231) AT BIN 006900 AND 006901 @ BIG CREEK | Pavement Improvement | $154,446 |
| ALABAMA | DOTHAN | RESURFACE SR-1 (US-231) FROM FLORIDA STATE LINE TO END OF PAVED SHOULDERS NORTH OF CR-93 | Pavement Improvement | $2,850,120 |
| ALABAMA | RESURFACE SR-1 (US-431) FROM HEADLAND SOUTH CITY LIMIT TO NORTH OF SR-173 | Pavement Improvement | $2,209,099 | |
| ALABAMA | COLUMBUS (GA) | RESURFACE SR-1 (US-431) FROM CR-137 (OLD SEALE HWY) TO 0.6 MILE SOUTH SR-38 (US-280), FY 2009 PHASE 2, | Pavement Improvement | $5,821,097 |
| ALABAMA | WIDENING & RESURFACING SR-1 (US-431) FROM NORTH END OF THE TENN. RIVER BRIDGE TO CR-5 (CATHEDRAL CAVERNS HWY) | Pavement Improvement | $3,761,469 | |
| ALABAMA | FLORENCE | RESURFACE & 2 FT. PAVEMENT WIDENING SR-2 (US-72) FROM 0.6 MILE WEST CANE CREEK TO 0.449 MILE EAST OF DRY | Pavement Improvement | $1,659,388 |
| ALABAMA | RESURFACING AND PAVEMENT WIDENING SR-3 (US-31) FROM JUST SOUTH OF CACTUS STREET TO I-65 NEAR CITY OF ATHENS | Pavement Improvement | $1,220,429 | |
| ALABAMA | RESURFACING SR-3 (US-31) FROM 0.24 MILE NORTH OF SR-59 INTERSECTION IN STAPLETON TO BAY MINETTE SOUTH CITY LIMITS | Pavement Improvement | $2,886,968 | |
| ALABAMA | RESURFACE & 2' WIDENING ON SR-3 (US-31) FROM CONECUH COUNTY LINE TO 0.8 MILE NORTH PERSIMMON CREEK (FY2009 PHASE2) | Pavement Improvement | $2,335,367 | |
| ALABAMA | RESURFACE & 2' WIDENING ON SR-3 (US-31) FROM JUNCTION OF SR-185 TO MONTGOMERY COUNTY LINE (FY2009 PHASE2) | Pavement Improvement | $4,383,448 | |
| ALABAMA | RESURFACING SR-3 (US-31) FROM SR-12 (US-84) TO BUTLER COUNTY LINE. FY 2009 PHASE 2 | Pavement Improvement | $2,453,411 | |
| ALABAMA | PLANING RESURFACE AND TRAFFIC STRIPE SR-5 FROM SR-13(US-43) TO WILCOX COUNTY LINE 2009 PHASE 1 | Pavement Improvement | $1,619,174 | |
| ALABAMA | MONTGOMERY | RESURFACE & 2' WIDENING ON SR-6 (US-82) FROM JUST WEST OF CR-40 TO SR-206 | Pavement Improvement | $4,938,746 |
| ALABAMA | TUSCALOOSA | RESURFACE SR-7 (US-11) FROM GREENE COUNTY LINE TO JUST SOUTH OF WARRIOR RIVER BRIDGE AT FOSTERS AND HOLLY SPRINGS ROAD FROM SR-7 (US-11) TO JUST SOUTH OF THE I-20/59 INTERCHANGE | Pavement Improvement | $4,415,517 |
| ALABAMA | PLANING, PAVEMENT WIDENING AND RESURFACING SR-7 (US-11) FROM NORTH OF CR-208 (GREENETRACK RD.) TO TUSCALOOSA COUNTY LINE. FY2009 PHASE 2 | Pavement Improvement | $3,357,073 | |
| ALABAMA | RESURFACE & 2' WIDENING ON SR-8 (US-80) FROM NEAR JUNCTION OF SR-186 TO LEE COUNTY LINE (FY2010 PHASE1) | Pavement Improvement | $3,198,619 | |
| ALABAMA | RESURFACING AND TRAFFIC STRIPE ON SR-10 FROM SR-28 TO SR-41, FY2009 PHASE 2; | Pavement Improvement | $720,697 | |
| ALABAMA | RESURFACING AND PAVEMENT WIDENING ON SR-10 FROM BUTLER COUNTY LINE TO SR-9 (US-331). FY2010 PHASE 1 | Pavement Improvement | $2,981,219 | |
| ALABAMA | RESURFACE ON SR-15 (US-29) FROM SR-197 TO SR-6 (US-82) (FY2009 PHASE II) | Pavement Improvement | $512,187 | |
| ALABAMA | AUBURN-OPELIKA | RESURFACING SR-15 (US-29) FROM MACON COUNTY TO SOUTH CR-010 (SAND HILL RD), FY2009 PHASE 2 | Pavement Improvement | $908,101 |
| ALABAMA | WIDENING, RESURFACING & TRAFFIC STRIPE SR-17 FROM 1.3 MILES SOUTH CR-18 TO 0.7 MILES NORTH OF CR-28 | Pavement Improvement | $1,321,334 | |
| ALABAMA | RESURFACING & TRAFFIC STRIPE ON SR-17 FROM 0.7 MI NORTH OF CR-28 TO NORTH OF SOUTH BUTLER CITY LIMITS | Pavement Improvement | $1,257,489 | |
| ALABAMA | PLANE/RESURFACE SR-17 FROM 0.7 MILE NORTH CR-29 TO CR-30 IN SULLIGENT, FY2009 PHASE 2 | Pavement Improvement | $6,084,240 | |
| ALABAMA | RESURFACING AND STRIPING SR-17 FROM LAMAR COUNTY LINE TO SR-4 | Pavement Improvement | $1,770,060 | |
| ALABAMA | FY 2010 PHASE 1, PLANING AND RESURFACING ON SR-17 FROM SR-28 TO CR-24 | Pavement Improvement | $2,709,873 | |
| ALABAMA | FY 2010 PHASE 1, PLANING AND RESURFACING ON SR-17 FROM 1.7 MILES SOUTH OF CR-20 TO SR 56, IN CHATOM | Pavement Improvement | $3,517,300 | |
| ALABAMA | RESURFACE SR17 FROM SOUTH CITY LMITIES OF CARROLTON TO 0.6 MILE NORTH CARROLLTON NORTH CITY LIMITS IN PICKENS CO | Pavement Improvement | $1,944,144 | |
| ALABAMA | RESURFACE SR-20 FROM THE TENNESSEE STATE LINE TO SOUTH OF CR-22 AT THE NATCHEZ TRACE PARKWAY; PHASE II RESURFACING BUDGET | Pavement Improvement | $2,195,023 | |
| ALABAMA | RESURFACING AND TRAFFIC STRIPE ON SR-21 FROM NORTH END OF LITTLE RIVER BRIDGE @ COUNTY LINE TO NORTH OF CR-8, FY2009 PHASE 2; | Pavement Improvement | $2,344,547 | |
| ALABAMA | RESURFACE AND TRAFFIC STRIPE ON SR-21 FROM NORTH OF CR-8 TO SOUTH OF CR-10, FY2009 PHASE 2; | Pavement Improvement | $2,264,245 | |
| ALABAMA | RESURFACING SR-21 FROM THE FLORIDA STATE LINE TO MP 0.968, FY 2009 PHASE 2 | Pavement Improvement | $368,368 | |
| ALABAMA | RESURFACE SR-21 FROM CR-947 (MAXWELLBORN RD) TO NEAR FOOTHILLS DR, FY 2009 PHASE 2 | Pavement Improvement | $1,898,929 | |
| ALABAMA | RESURFACE & 2' WIDENING ON SR-22 FROM SR-5 TO SR-219 (FY2010 PHASE1) | Pavement Improvement | $5,225,138 | |
| ALABAMA | RESURFACE SR-24 FROM CR-460 TO NEAR CR-320. FY 2009 PHASE II RESURFACING BUDGET | Pavement Improvement | $3,792,260 | |
| ALABAMA | PLANING, PAVEMENT WIDENING AND RESURFACING SR-25 FROM CR-29 TO BIBB COUNTY LINE, FY2009 PHASE 2 | Pavement Improvement | $1,905,541 | |
| ALABAMA | RESURFACING AND PAVEMENT WIDENING ON SR-27 FROM INDEGO PL TO DALE COUNTY LINE (FY2009 PHASE 2) | Pavement Improvement | $1,718,249 | |
| ALABAMA | RESURFACE SR-33 FROM SR-74 TO NORTH END OF SIPSEY RIVER BRIDGE | Pavement Improvement | $2,021,675 | |
| ALABAMA | 2' PAVEMENT WIDENING & RESURFACING SR-35 FROM SR-79 INTERSECTION WESTERLY THROUGH WOODVILLE TO THE JUNCTION OF SR-2 (US-72) | Pavement Improvement | $1,376,799 | |
| ALABAMA | DECATUR | 2' PAVEMENT WIDENING AND RESURFACING SR-36 FROM INTERSECTION WITH US-31 (SR-3) IN HARTSELLE AT MP 21.15 TO I-65 INTERCHANGE AT MP 23.55. FY 2010 PHASE 1 RESURFACING PROGRAM | Pavement Improvement | $974,234 |
| ALABAMA | BIRMINGHAM | RESURFACE SR-38 (US-280) FROM CR-353 (HUGH DANIEL DR) TO CR-280 (OLD US 280) | Pavement Improvement | $6,551,704 |
| ALABAMA | RESURFACE SR-49 FROM TALLAPOOSA COUNTY LINE TO SR-77, FY 2009 PHASE 2 | Pavement Improvement | $2,355,118 | |
| ALABAMA | RESURFACING AND PAVEMENT WIDENING ON SR-51 FROM JUST SOUTH OF SR-239 TO THE BULLOCK COUNTY LINE (FY2009 PHASE 2) | Pavement Improvement | $2,852,842 | |
| ALABAMA | RETROFIT BRIDGE RAILS ON SR-53 (US-231) AT BIN 005532, 005533 (LITTLE CLAYBANK CREEK) & 005571, 009388 (BEAR CREEK) | Bridge Improvement | $102,730 | |
| ALABAMA | RESURFACE SR-53 (US-231) FROM 0.2 MILE SOUTH OF SR-27 TO 0.06 MILE NORTH OF CR-2 | Pavement Improvement | $2,768,226 | |
| ALABAMA | RESURFACING SR-53 (US-231) FROM NORTH OF I-20 TO 2.7 MILES NORTH OF WATTSVILLE | Pavement Improvement | $1,824,034 | |
| ALABAMA | RESURFACE SR-55 FROM SR-12 (US-84) TO NORTH CITY LIMITS OF RED LEVEL (FY 2009 PHASE 2) | Pavement Improvement | $2,290,656 | |
| ALABAMA | RESURFACE SR-55 FROM CONECUH COUNTY LINE TO SR-3 (US-31) (FY2009 PHASE2) | Pavement Improvement | $579,840 | |
| ALABAMA | WIDEN SR-69 FROM SR-13 (US-43) TO HALE COUNTY LINE | Pavement Improvement | $1,012,013 | |
| ALABAMA | RESURFACING SR-69 FROM I-65 IN GOOD HOPE TO SR-3 (US-31) IN CULLMAN | Pavement Improvement | $1,614,641 | |
| ALABAMA | 2 FT. SAFETY WIDENING, RESURFACE, AND CULVERT EXTENSION ON SR-69 FROM MARENGO/HALE COUNTY LINE TO SR-8 (US-80), FY2009 PHASE 2 | Pavement Improvement | $570,127 | |
| ALABAMA | RESURFACE & TRAFFIC STRIPE SR-69 FROM SR-13 (US-43) TO HALE COUNTY LINE | Pavement Improvement | $3,424,090 | |
| ALABAMA | RESURFACE, STRIPING SR-75 FROM CR-363 (BROOKS LANE) IN ALLGOOD TO CR-58 (2ND ST) IN ONEONTA | Pavement Improvement | $1,783,600 | |
| ALABAMA | BIRMINGHAM | PLANING, RESURFACING SR-79 FROM WINEWOOD ROAD TO SR-151 | Pavement Improvement | $2,606,952 |
| ALABAMA | RESURFACE SR-93 FROM SR-53 (US-231) TO THE NORTH CITY LIMITS OF BRUNDIDGE (FY 2009 PHASE 2) (CSX RR) | Pavement Improvement | $772,677 | |
| ALABAMA | MONTGOMERY | RESURFACE & 2' WIDENING ON SR-97 FROM CRENSHAW COUNTY LINE TO NORTH OF JUNCTION OF SR-3 (US-31) (FY2009 PHASE2) | Pavement Improvement | $729,364 |
| ALABAMA | RESURFACING AND PAVEMENT WIDENING ON SR-103 FROM THE FLORIDA STATE LINE TO SR-52 IN SLOCOMB (FY 2009 PHASE 2) | Pavement Improvement | $2,606,280 | |
| ALABAMA | RESURFACE SR-115 FROM SR-9 TO SR-38 (US-280), FY 2009 PHASE 2 | Pavement Improvement | $1,299,848 | |
| ALABAMA | RESURFACE SR-118 FROM 4TH STREET IN CARBON HILL TO CR-298 (RIPLEY LOOP ROAD) | Pavement Improvement | $1,478,787 | |
| ALABAMA | RESURFACE SR-129 FROM SR-171 (US-43) TO CR-49 IN HUBBERTVILLE, 2009 PHASE II | Pavement Improvement | $1,577,067 | |
| ALABAMA | RESURFACE SR-139 FROM SIX MILE CREEK TO 0.100 MILE NORTH OF SHELBY COUNTY LINE, FY2010 PHASE I | Pavement Improvement | $2,791,631 | |
| ALABAMA | RESURFACING, SR 148, 2'WIDENING AND STRIPING FROM SR 21 TO EAST CITY LIMITS OF SYLACAUGA | Pavement Improvement | $709,237 | |
| ALABAMA | PLANING, PAVEMENT WIDENING AND RESURFACING SR-155 FROM NEAR CR-33 TO SHELBY COUNTY LINE . FY2009 PHASE 2 | Pavement Improvement | $2,007,167 | |
| ALABAMA | FLORENCE | RESURFACING, STRIPING, AND BRIDGE RAIL RETROFIT SR 157 FROM LAWRENCE COUNTY LINE TO SR 20. FY 2009 ECONOMIC STIMULUS PROJECT. | Pavement Improvement | $4,097,292 |
| ALABAMA | PLANING, PAVEMENT WIDENING AND RESURFACING SR-175 FROM SR-14 NEAR HEIBERGER TO SR-5, FY2009 PHASE 2 | Pavement Improvement | $2,142,465 | |
| ALABAMA | ANNISTON | ANNISTON E. BYPASS FROM 1500' SOUTH OF LAKE YAHOU TO SR-1 (US-431) ; GRADE DRAIN BRIDGE PARTIAL BASE AND PAVE | New Construction | $46,770,227 |
| ALABAMA | MOBILE | PAVEMENT WIDENING & RESURFACING ON SR-213 FROM SR-158 TO SR-13 (US-43) | Pavement Improvement | $691,974 |
| ALABAMA | RESURFACE & 2' WIDENING ON SR223 FROM BULLOCK CO HIGH SCHOOL TO JUNCTION OF SR 6 (US82) FY2009 PHASE 2 | Pavement Improvement | $486,931 | |
| ALABAMA | RESURFACING AND STRIPING SR 241 FROM JUST SOUTH OF THE MARION COUNTY LINE TO SR 237 | Pavement Improvement | $319,306 | |
| ALABAMA | WIDENING & RESURFACING SR-273 FROM SR-68 IN LEESBURG TO AL-35 NEAR BLANCHE. FY 2009 PHASE 2 RESURFACING PROGRAM | Pavement Improvement | $5,743,428 | |
| ALABAMA | FULL DEPTH RECLAMATION CR-267 FROM CR-222 IN FREDONIA TO SR-1 (US-431) SOUTH OF STROUD - CCP 09-09-01 | Pavement Improvement | $265,000 | |
| ALABAMA | FLORENCE | RESURFACING CR-57 FROM CR-61 TO SR-20 CCP 17-200-08 | Pavement Improvement | $382,520 |
| ALABAMA | RESURFACE CR-709 FROM SR-167 TO SR-134 CCP 16-05-07 | Pavement Improvement | $265,000 | |
| ALABAMA | WIDEN & RESURFACE CR-99 FROM CR-41 TO CR-107 HCP 34-93-07 | Pavement Improvement | $265,000 | |
| ALABAMA | BIN 003313 - BR ON CR-438 (E COOK RD.) @ CEDAR CREEK APPROX. 0.5 MILES NORTH OF ED TOLAR RD. (AASHTO) HCP 35-119-99 | Bridge Replacement | $265,000 | |
| ALABAMA | DECATUR | RESURFACE SOUTH SENECA DRIVE FROM TRINITY TOWN LIMITS TO DEANNA BRIDGE HIGHWAY (STATE SUPPORT SERVICES) | Other | $3,827 |
| ALABAMA | RESURFACING CR-2276 FROM CRENSHAW CO. LINE TO CR-2290 AND CR-2290 FROM CR-2276 TO CR-2262 IN HENDERSON PCP 55-98-07 | Pavement Improvement | $265,000 | |
| ALABAMA | WIDEN & RESURFACE CR-82 FROM THE MEADOWS BRIDGE (LITTLE TALLAPOOSA RIVER) TO CR-87 - RCP 56-219-07 | Pavement Improvement | $265,000 | |
| ALABAMA | BIRMINGHAM | CR-97 (SHADES CREST RD) INTERSECTION IMPROVEMENT @ CR-42 (WEST OXMOOR RD) & TYLER RD, PH VII PROJECT SPONSOR CITY OF HOOVER | Pavement Improvement | $2,201,171 |
| ALABAMA | ANNISTON | RESURFACE CR187 (FRIENDSHIP RD) FROM CR193 (BOILING SPRING RD) TO SR21 | Other | $67,600 |
| ALABAMA | MOBILE | RESURFACE CR656 (SPRINGHILL AVE) FROM MCGREGOR AVE TO I65) | Pavement Improvement | $287,500 |
| ALABAMA | MOBILE | RESURFACE CR656 (SPRINGHILL AVE) FROM I65 TO SR42 (US98 MOFFETT RD) | Pavement Improvement | $165,499 |
| ALABAMA | MOBILE | RESURFACE WEST MAIN ST FROM PRICHARD AVE TO BRANCH AVE | Other | $75,887 |
| ALABAMA | MOBILE | WIDEN & OVERLAY EXISTING LANES ON VIADUCT RD FROM EAST ON MIKE BOX BR TO WARRIOR GULF & FROM MIKE BOX BR TO SOUTHERN IONIX | Other | $42,800 |
| ALABAMA | MOBILE | RESURFACE BAKER RD FROM I65 TO SR13 (US43) | Other | $19,422 |
| ALABAMA | MOBILE | WIDEN, RESURFACE, & CULVERT IMPROVEMENTS ON CR-24 (HALF-MILE RD.) FROM CR-225 (BEVERLY RD.) TO 0.17 MILE WEST OF CR-23 SOUTH (PADGETT SWITCH RD. SOUTH) MCP 49-66-07 | Pavement Improvement | $265,000 |
| ALABAMA | COLUMBUS (GA) | RESURFACING AND STRIPING CR-427 (PIERCE ROAD) FROM SR-1 (US-431/280) IN RUSSELL TO CR-248 (SUMMERVILLE RD) IN LEE COUNTY, LCP 41-105-09 | Other | $37,500 |
| ALABAMA | DECATUR | RESURFACE AUSTIINVILLE RD FROM CARRIDALE ST TO 14TH ST SW TO CENTERAL PW IN THE CITY OF DECATUR | Other | $6,943 |
| ALABAMA | DOTHAN | RESURFACE WESTGATE PARKWAY FROM SR12 (US84) TO SR53 (US231) | Other | $78,000 |
| ALABAMA | DOTHAN | RESURFACING HONEYSUCKLE RD FROM SR12 (US84) TO CR15 (PARK AVE) | Other | $95,000 |
| ALABAMA | DIVISION WIDE SPOT REPAIRS PLANING AND RESURFACING | Pavement Improvement | $760,611 | |
| ALABAMA | MONTGOMERY | RESURFACE SR-14 FROM SR-212 TO SR-9 AND RESURFACE SR-212 FROM SR-14 TO SR-111 | Pavement Improvement | $1,541,477 |
| ALABAMA | GADSDEN | I-59 CONCRETE PAVEMENT REHABILITATION WITH UNBONDED OVERLAY FROM 0.6 MILES SOUTH OF ATTALLA NORTH CITY LIMITS AT NB STATION 123+33.20 (MP. 183.811) TO THE END OF BRIDGE OVER CR-276 (STEPHEN GAP ROAD) | Pavement Improvement | $47,525,424 |
| ALABAMA | FLORENCE | SHEFFIELD, IMPROVEMENTS TO SECOND AND FIRST STREETS FROM SR-2 (US-72, N JACKSON HWY) WEST TO MONTGOMERY AVE, RESURFACE S MONTGOMERY AVE FROM RR, SOUTH TO TUSCUMBIA CITY LIMITS, RESURFACE NE JACKSON HW | Other | $34,768 |
| ALABAMA | MOBILE | ADJUST SIGNAL TIMING @ VARIOUS EXISTING TRAFFIC SIGNALS IN THE CITY OF MOBILE | Other | $149,500 |
| ALABAMA | FLORENCE | MUSCLE SHOALS, RESURFACE GUSMUS AVE FROM SR-184 (2ND ST) TO AVALON AVE, S BROADWAY AVE FROM CR-24 (W 6TH ST) TO AVALON AVE & CR-24 (W 6TH ST) FROM GEORGE WALLACE BLVD TO SR-2 (US-72,WOODWARD AVE) | Other | $33,359 |
| ALABAMA | HUNTSVILLE | RESURFACING VARIOUS ELIGIBLE STREETS IN THE CITY OF HUNTSVILLE, PHASE 2 (STATE SUPPORT SERVICES) | Other | $64,974 |
| ALABAMA | HUNTSVILLE | RESURFACING VARIOUS ELIGIBLE STREETS IN THE CITY OF HUNTSVILE, PHASE 1 (STATE SUPPORT SERVICES) | Other | $150,726 |
| ALASKA | KOTZEBUE - SHORE AVENUE, PE | Pavement Improvement | $6,500,000 | |
| ALASKA | GUSTAVUS CAUSEWAY, PE. 03/20/2007 - Scope Revision | Bridge Improvement | $7,700,000 | |
| ALASKA | Repave the bike path along the Richardson Highway from Egan Drive to Robe River Subdivision (7miles). The project will also rehabilitate and pave the access road to the Blueberry Lake Campground. | Pavement Improvement | $1,243,248 | |
| ALASKA | Repave the bike path along the Richardson Highway from Egan Drive to Robe River Subdivision (7miles). The project will also rehabilitate and pave the access road to the Blueberry Lake Campground. | Pavement Improvement | $701,463 | |
| ALASKA | Sterling Highway Resurfacing: Soldotna to N. Coho Loop (ES) | Pavement Improvement | $7,584,100 | |
| ALASKA | Kodiak: Rezanof Drive - Coast Guard Access Road to Marine Way. 6.4 Miles | Pavement Improvement | $7,138,763 | |
| ALASKA | ANCHORAGE | Resurface stripe Jewel Lake Road from its intersection with Dimond Blvd to its intersection at 63rd Ave. | Other | $100,000 |
| ALASKA | Revised scope to add with enhancements, name change: Denali HWY MP 7 Wayside | Transportation Enhancements | $498,856 | |
| ALASKA | Juneau Glacier Highway - Amalga Harbor to Eagle Beach Kayak Launch (4/28/08 Provide for bicycles and peds) | Pavement Improvement | $12,074,972 | |
| ALASKA | Pavement rehabilitation on Egan Drive from Mendenhall Loop Road to Brotherhood Bridge. Juneau, AK | Pavement Improvement | $4,000,000 | |
| ALASKA | Haines Highway from the intersections of Front Street to Union Street | Pavement Improvement | $2,719,460 | |
| ALASKA | New weighing system facility to faclitate simultaneous axle group and gross weight indications for truck weight enforcement. | New Construction | $3,750,000 | |
| ALASKA | Rehabilitate portions of the Glenn Highway to remove rutted section of highway. Includes guardrail repair or replacement and terminal end upgrades. | Pavement Improvement | $2,037,579 | |
| ALASKA | ANCHORAGE | Glenn Highway, Hiland Interchange to Eklutna RR Overcrossing, 15.2 Miles Resurfacing | Pavement Improvement | $13,742,683 |
| ALASKA | Rehabilitate pavement, widen shoulders, build passing lanes and construct safety improvements as needed. Provide for public wayside. | Pavement Improvement | $25,175,000 | |
| ARIZONA | YUMA (CA) | Chain Link Fence | Other | $784,200 |
| ARIZONA | PHOENIX, AZ | Widen Roadway | Pavement Widening | $34,915,219 |
| ARIZONA | Widen Roadway | Pavement Improvement | $28,615,868 | |
| ARIZONA | TI Reconstruction | Pavement Widening | $16,949,440 | |
| ARIZONA | Pavement Preservation | Pavement Improvement | $5,204,598 | |
| ARIZONA | Replace Barb Wire Fence | Other | $478,236 | |
| ARIZONA | Pavement Preservation | Pavement Improvement | $7,033,993 | |
| ARIZONA | Pavement Preservation | Pavement Improvement | $2,232,218 | |
| ARIZONA | Widen Roadway | Pavement Widening | $19,173,808 | |
| ARIZONA | Replace Barb Wire Fence | Other | $183,636 | |
| ARIZONA | Replace Barb Wire Fence | Other | $427,181 | |
| ARIZONA | Replace Barb Wire Fence | Other | $414,305 | |
| ARIZONA | Chain Link Fence | Other | $487,651 | |
| ARIZONA | Replace Barb Wire Fence | Other | $786,039 | |
| ARIZONA | Micro Seal | Pavement Improvement | $536,841 | |
| ARIZONA | Reconstruct Roadway | Pavement Improvement | $11,614,305 | |
| ARIZONA | Scour Retrofit | Bridge Improvement | $247,576 | |
| ARIZONA | Bridge Rehabilitation | Bridge Improvement | $438,000 | |
| ARIZONA | Micro Seal | Pavement Improvement | $397,616 | |
| ARIZONA | PHOENIX, AZ | Widen Roadway | Pavement Widening | $10,579,699 |
| ARIZONA | PHOENIX, AZ | Gateway graphics | Transportation Enhancements | $825,998 |
| ARIZONA | PHOENIX, AZ | Gateway graphics | Transportation Enhancements | $813,000 |
| ARIZONA | Pavement Preservation | Pavement Improvement | $10,530,238 | |
| ARIZONA | Pavement Preservation | Pavement Improvement | $3,541,615 | |
| ARIZONA | Pavement Preservation | Pavement Improvement | $2,500,489 | |
| ARIZONA | Intersection Improvement | Pavement Improvement | $196,896 | |
| ARIZONA | Replace Barb Wire Fence | Other | $835,226 | |
| ARIZONA | Pavement Preservation | Pavement Improvement | $1,063,943 | |
| ARIZONA | Replace Barb Wire Fence | Other | $807,612 | |
| ARIZONA | Pavement Preservation | Pavement Improvement | $2,596,246 | |
| ARIZONA | PHOENIX, AZ | Widen Roadway | Pavement Widening | $18,249,678 |
| ARIZONA | Widen Roadway | Pavement Improvement | $3,266,598 | |
| ARIZONA | TUCSON | Pavement Preservation | Pavement Improvement | $3,396,008 |
| ARIZONA | TUCSON | Bridge Deck Rehab | Bridge Improvement | $191,204 |
| ARIZONA | Widen Roadway | Pavement Improvement | $2,613,583 | |
| ARIZONA | Widen Roadway | Pavement Improvement | $4,467,293 | |
| ARIZONA | Replace Barb Wire Fence | Other | $890,664 | |
| ARIZONA | FLAGSTAFF | Pavement Preservation | Pavement Improvement | $4,677,804 |
| ARIZONA | Cst Parallel Road | New Construction | $12,302,956 | |
| ARIZONA | YUMA (CA) | Widen Roadway | Pavement Widening | $11,500,000 |
| ARIZONA | Pavement Preservation | Pavement Improvement | $13,464,426 | |
| ARIZONA | Chip Seal | Pavement Improvement | $633,688 | |
| ARIZONA | Construct Passing Lanes | Pavement Improvement | $1,979,660 | |
| ARIZONA | TUCSON | Various locations in Oro Valley, AZ; PE for Installation of Fog Seals, Micro Surfaces, Mill & Inlays. | Other | $10,000 |
| ARIZONA | PHOENIX, AZ | TI Improvement | New Bridge Construction | $8,239,577 |
| ARIZONA | Pavement Preservation | Pavement Improvement | $3,536,716 | |
| ARIZONA | Pavement Preservation | Pavement Widening | $6,721,707 | |
| ARIZONA | Pavement Preservation | Pavement Improvement | $3,692,604 | |
| ARIZONA | Replace Barb Wire Fence | Other | $1,003,925 | |
| ARIZONA | PHOENIX, AZ | Widen Roadway | Pavement Improvement | $523,515 |
| ARIZONA | Intersection Improvement | Pavement Improvement | $1,014,403 | |
| ARIZONA | Pavement Preservation | Pavement Improvement | $3,014,598 | |
| ARIZONA | Pedestian lighting and plantings | Pavement Improvement | $367,919 | |
| ARIZONA | Slurry Seal | Pavement Improvement | $446,670 | |
| ARIZONA | Micro Seal | Pavement Improvement | $1,264,046 | |
| ARIZONA | Chip Seal | Pavement Improvement | $832,049 | |
| ARIZONA | Chip Seal | Pavement Improvement | $712,488 | |
| ARIZONA | Pavement Preservation | Other | $20,000 | |
| ARIZONA | Design and Reconstruction of Pavement | Other | $20,000 | |
| ARIZONA | PHOENIX, AZ | Preliminary engineering, design and construction for Mill & Replace | Other | $20,352 |
| ARIZONA | PHOENIX, AZ | Preliminary engineering, design and construction for Mill & Replace | Other | $3,594 |
| ARIZONA | PHOENIX, AZ | Pre-engineer/Design and Pavement Rehabiliation and Preservation | Other | $16,219 |
| ARIZONA | Mill and fill existing deteriorating asphalt pavement | Other | $20,000 | |
| ARIZONA | Pavement Preservation | Other | $30,000 | |
| ARIZONA | FLAGSTAFF | Pavement Preservation | Other | $40,000 |
| ARIZONA | PHOENIX, AZ | Pre-engineer/Design and construct Pedestrian crossing | Other | $3,500 |
| ARIZONA | PHOENIX, AZ | Pre-engineer/Design and construct, repair and restoration of Cave Creek Road | Other | $55,334 |
| ARIZONA | PHOENIX, AZ | Intersection and Capacity Improvement | Other | $43,645 |
| ARIZONA | PHOENIX, AZ | Design and reconstruction of pavement | Other | $91,842 |
| ARIZONA | Intersection Traffic Signals | Other | $20,000 | |
| ARIZONA | Pavement Preservation | Other | $50,000 | |
| ARIZONA | PHOENIX, AZ | Pre-Engineer/Design and Mill and Replace Existing Road. | Other | $9,528 |
| ARIZONA | FLAGSTAFF | Pathway and landscaping | Transportation Enhancements | $613,298 |
| ARIZONA | PHOENIX, AZ | ALONG SHEA BLVD FROM PALISADES BLVD TO FOUNTAIN HILLS BLVD IN THE TOWN OF FOUNTAIN HILLS, AZ---ARRA | Other | $45,087 |
| ARIZONA | PHOENIX, AZ | Design and Construct Pedestrian and Landscape Improvements | Other | $10,185 |
| ARIZONA | PHOENIX, AZ | Design and Construct Signage Improvements | Other | $1,650 |
| ARIZONA | PHOENIX, AZ | Pre-Engineer/Design and construct mill, patch and replace | Other | $15,648 |
| ARIZONA | Bridge Rehabilitation | Other | $20,000 | |
| ARIZONA | PHOENIX, AZ | Pre-Engineer/Design and Construct Nova Chip Overlays- arterial roadways | Other | $187,250 |
| ARIZONA | PHOENIX, AZ | Pre-Engineer/Design and construct pavement overlay | Other | $11,700 |
| ARIZONA | PHOENIX, AZ | Pre-Engineer/Design and construct pavement surface treatment | Other | $10,200 |
| ARIZONA | PHOENIX, AZ | Install thermoplastic pavement markings | Other | $7,168 |
| ARIZONA | PHOENIX, AZ | Install wireless communication with traffic signals | Other | $6,900 |
| ARIZONA | PHOENIX, AZ | Install wireless communication with traffic signals | Other | $6,000 |
| ARIZONA | PHOENIX, AZ | CCTV Camera Installations | Other | $2,700 |
| ARIZONA | PHOENIX, AZ | Modernize traffic signals | Other | $11,000 |
| ARIZONA | PHOENIX, AZ | New traffic signal cabinets and controllers | Other | $11,000 |
| ARIZONA | PHOENIX, AZ | Pre-Engineer/Design and Construct Pavement Rehab projects | Other | $11,227 |
| ARIZONA | TUCSON | SAN XAVIER ROAD BETWEEN MISSION AND LOS REALES ROADS ON TOHONO O'ODHAM NATION | Other | $10,000 |
| ARIZONA | FLAGSTAFF | Mill and repave intersection | Other | $2,000 |
| ARIZONA | Street overlay / pavement preservation | Other | $10,000 | |
| ARIZONA | 2" Overlay | Other | $6,000 | |
| ARIZONA | PHOENIX, AZ | Pre-Engineer/Design and mill and replace pavement resurfacing/ reconstruction | Other | $12,279 |
| ARIZONA | Intersection signalization | Other | $20,000 | |
| ARIZONA | ALONG MOHAVE CHANNEL BETWEEN GORDON DRIVE AND BANK STREET IN THE CITY OF KINGMAN, ARIZONA | Transportation Enhancements | $698,368 | |
| ARIZONA | ALONG MOHAVE CHANNEL BETWEEN BANK STREET AND NORTHERN AVENUE IN THE CITY OF KINGMAN, AZ; SHARED USE PATHWAY---ARRA | Transportation Enhancements | $440,000 | |
| ARIZONA | MILL & REPLACE; NORTHERN AVE; STOCKTON HILL RD TO BANK STREET IN KINGMAN, AZ | Other | $20,000 | |
| ARIZONA | Pave existing shoulders and add bike lane | New Construction | $750,000 | |
| ARIZONA | PHOENIX, AZ | Pre-Engineer/Design and construct AR Overlay | Other | $59,508 |
| ARIZONA | TUCSON | Pavement Preservation | Other | $10,000 |
| ARIZONA | Pavement Preservation | Other | $40,000 | |
| ARIZONA | PHOENIX, AZ | Beardley Road; Lake Pleasant road to 83rd Ave in Peoria; Preliminary Engineering; | Other | $11,301 |
| ARIZONA | PHOENIX, AZ | BEARDSLEY ROAD CONNECTION; Loop 101 to Beardsley Road at 83rd ave.Lake Pleasant Pkwy in Peoria. Preliminary Engineering | Other | $28,504 |
| ARIZONA | PHOENIX, AZ | Design & Construction of Intersection Improvements | Other | $27,693 |
| ARIZONA | PHOENIX, AZ | Design & Construction of Removal/Replacement of Existing ADA Ramps or Construction of New ADA Ramps | Other | $82,550 |
| ARIZONA | PHOENIX, AZ | Design & Construction of Removal/Replacement of Existing ADA Ramps or Construction of New ADA Ramps | Other | $82,550 |
| ARIZONA | PHOENIX, AZ | Design & Costruct Bridge Deck Rehabilitations | Other | $187,106 |
| ARIZONA | PHOENIX, AZ | Design & Costruct Bridge Joint Rehabilitations | Other | $184,883 |
| ARIZONA | PHOENIX, AZ | Design &Procure/Install CCTV | Other | $141,205 |
| ARIZONA | PHOENIX, AZ | Design & Procure/Install Fiber Optic Backbone System | Other | $91,334 |
| ARIZONA | PHOENIX, AZ | Design &Procure/Install Wireless Communications | Other | $106,654 |
| ARIZONA | PHOENIX, AZ | Inventory / Programming & Procure / Install Traffic Control Signs | Other | $226,668 |
| ARIZONA | PHOENIX, AZ | Design & Construction of Pavement Preservation | Other | $91,786 |
| ARIZONA | PHOENIX, AZ | Design & Construction of Pavement Preservation | Other | $91,786 |
| ARIZONA | PHOENIX, AZ | Design & Construction of Pavement Preservation | Other | $91,786 |
| ARIZONA | TUCSON | Paved shoulders, shared use driveway improvements, access ramps | New Construction | $575,000 |
| ARIZONA | TUCSON | Pavement Preservation | Other | $74,690 |
| ARIZONA | TUCSON | Structural deck repairs performed from above & between parapet walls. | Other | $60,000 |
| ARIZONA | FLAGSTAFF | Overlay/ 3" AC | Other | $20,000 |
| ARIZONA | La Villita in Rancho Sahuarita, and Duval Mine Road from La Canada to west town limits in SAHUARITA- Pavement Pres. and Pathway. | Other | $10,000 | |
| ARIZONA | Pavement Preservation | Other | $40,000 | |
| ARIZONA | TUCSON | Pavement Preservation | Other | $10,000 |
| ARIZONA | Pavement Preservation | Other | $20,000 | |
| ARIZONA | PHOENIX, AZ | Pre-Engineer/Design and construct pavement Reconstruction and ITS Conduit Installation | Other | $29,334 |
| ARIZONA | Multi use path, landscaping, and irrigation | Other | $650,000 | |
| ARIZONA | Widening, signal upgrades, drainage, improvements, curb, sidewalk, MUP on S side. | Other | $20,000 | |
| ARIZONA | 2" AC Overlay | Other | $20,000 | |
| ARIZONA | TUCSON | Pavement Preservation | Other | $71,700 |
| ARIZONA | PHOENIX, AZ | Design and Complete Pavement Mill and Replace | Other | $12,883 |
| ARIZONA | San Luis II Port of Entry, Avenue E and County 25th Street Preliminary Engineering | New Construction | $20,127 | |
| ARIZONA | PHOENIX, AZ | Pre-Engineer/Design and construct mill and replace - pavement resurfacing | Other | $12,918 |
| ARIZONA | YUMA (CA) | Construction of an interpretative plaza, complete with retaining walls | New Construction | $750,000 |
| ARIZONA | Cold in place recycle; reconstruction | Other | $20,000 | |
| ARKANSAS | PROVIDE GRADING AND STRUCTURES FOR 9.89 MILES OF A 4-LANE DIVIDED FACILITY ON NEW LOCATION | New Construction | $21,094,279 | |
| ARKANSAS | CONTINUE MODIFICATION OF EXISTING INTERCHANGE | Bridge Improvement | $15,991,380 | |
| ARKANSAS | ACHM REHABILITATION OF 4.30 MILES | Pavement Improvement | $1,663,847 | |
| ARKANSAS | ACHM REHABILITATION OF 1.36 MILES | Pavement Improvement | $438,262 |
Source: FDIC


{% extends "base.html" %} {% block title %}Get DevAssistant{% endblock %} {% block content %}
We recommend running Fedora (the Linux OS; you can get it here). With Fedora running, you can install DevAssistant simply by executing
# yum install devassistant
in the command line or installing devassistant through Yum-Extender or Gnome-PackageKit by searching for devassistant.
DevAssistant is available for download via pip, the Python package installer. If your operating system has a package manager, you can install pip with it (precise method depends on your OS). The package is usually named pip or python-pip. If your system doesn't have a package manager, you can download pip.
$ pip install devassistant
Bear in mind, though, that you don't get automatic updates with pip as opposed to the option above.
To check out the DevAssistant repository (read only), make sure you have git installed and run
git clone https://github.com/devassistant/devassistant.git
If you prefer to download a tarball, you can get it here: (latest commit; for tagged releases and/or downloading the source from a different branch, you can browse the repository)
{% endblock %}


Try out the links below to see different features of the breadcrumb component in action.
Here's a breadcrumb component with default configuration:
<ob-breadcrumb></ob-breadcrumb>
Here's a breadcrumb component with a max-width configuration:
<ob-breadcrumb maxWidth="8ch"></ob-breadcrumb>
Here's a breadcrumb component with url beautifing disabled (only applies to routes with no label and parameter values):
<ob-breadcrumb [beautifyUrls]="false"></ob-breadcrumb>
Here's a breadcrumb component with a custom separator (only applies to routes with no label and more than one part in the path):
<ob-breadcrumb parameterSeparator=" | "></ob-breadcrumb>
Route with path/param, no label
Route with path/param and transalted label
Route with param/path, label using the parameter placeholder
Child of route with param/path and parameter label (used to test a link with parameter values)
Param-only route


{% extends "base_generic.html" %} {% block content %}
There are no doctechnicalreports in the system.


Tianhong seeks to boost investment by deploying cutting-edge technologies, such as big data and artificial intelligence, improve information acquisition by using the Internet to reach out and dive into the industry’s big data system more directly and deeply with a wider range of data sources, and reduce investment risks and help subscribers get better long-term returns by its strengths in data management and algorithm model.
In 2014, Tianhong created the first big data center capable of processing more than ten billion pieces of data in the industry. This big data center, through scientific and complex data models, can depict realistic profiles and behavior/habits of the subscribers.
The big data center is mainly to execute data mining, analysis and application pertaining to the user’s transaction behavior, such as the big data analysis of the Yu’ebao subscribers’ liquidity management and the e-commerce transaction patterns based on the Rongyibao series, so as to provide data reference for business operation.
Currently, Tianhong’s big data center can process 36 billion pieces of data in 356 seconds, an average of one billion pieces of information per second.
Cloud Direct Service-- the industry’s first large-scale Cloud Computing billing system independent from the conventional IOE (IBM, Oracle, EMC).
With advanced Alipay cloud computing platform, Tianhong employs Internet technology and ideas to ensure the safe flow of financial data and create a simple online tool bearing no trace of background technological complexity, greatly improving the operational efficiency and data capacity. Tianhong’s cloud-direct system is capable of supporting one hundred million subscribers and hundreds of millions of transactions a day, and can handle thousands of concurrent transactions per second, boasting a clearing time less than an hour.
Employing vertical search engines and web crawlers to capture news and announcements about listed companies, the pigeon system provides investors with timely and accurate stock information for making informed decisions. Compared with those provided by the Internet and third party, the data aggregated by this approach is more recent, reliable and accurate.
With machine learning technologies including intelligent words segmentation and emotional learning, the hawk-eye system is capable of monitoring real-time industry news and information about bond issuers, listed companies, deposit risk, bond promotion rate, bond rating as well as the public opinion expressed on the Internet associated with any change of corporate operations. The system can also simulate human brain in news-reading and perform accurate analysis of syntax and sentiment in the articles garnered by automatic crawling.
Established on Nov. 08, 2004, Tianhong Asset Management is one of the nationwide publicly offered fund management companies authorized by China Securities Regulatory Commissionwith registered capital of RMB 514.3 million Yuan. In 2013, Tianhong Asset Management promoted the first Internet fund – Yu’ebao, jointly with AliPay. As the fund manager of Yu’ebao, Tianhong Asset Management breaks a new ground for the Internet finance.


Delaunator guide
Delaunator is a fast library for Delaunay triangulation. It takes as input a set of points:
and produces as output a triangulation:
The triangulation is represented as compact arrays of integers. It’s less convenient than other representations but is the reason the library is fast.
Delaunay triangles
After constructing a delaunay = Delaunator.from(points)
object, it will have a triangles
array and a halfedges
array, both indexed by half-edge id. What’s a half-edge?
A triangle edge may be shared with another triangle. Instead of thinking about each edge A↔B, we will use two half-edges A→B and B→A. Having two half-edges is the key to everything this library provides.
Half-edges e are the indices into both of delaunator’s outputs:
delaunay.triangles[e]
returns the point id where the half-edge startsdelaunay.halfedges[e]
returns the opposite half-edge in the adjacent triangle, or -1 if there is no adjacent triangle
Triangle ids and half-edge ids are related.
- The half-edges of triangle t are
3*t
,3*t + 1
, and3*t + 2
. - The triangle of half-edge id e is
floor(e/3)
.
Let’s use some helper functions for these:
It will also be useful to have some helper functions to go from one half-edge to the next and previous half-edges in the same triangle:
Note: the sample code on this page is written for readability, not performance.
Delaunay edges
We can draw all the triangle edges without constructing the triangles themselves. Each edge is two half-edges. A half-edge e starts at points[delaunay.triangles[e]]
. Its opposite delaunay.halfedges[e]
starts at the other end, so that tells us the two endpoints of the edge. However, the half-edges along the convex hull won’t have an opposite, so delaunay.halfedges[e]
will be -1, and points[delaunay.halfedges[e]]
will fail. To reliably find the other end of the edge, we need to instead use points[nextHalfedge(e)]
. We can loop through the half-edges and pick half of them to draw:
Constructing triangles
A triangle is formed from three consecutive half-edges, 3*t
, 3*t + 1
, 3*t + 2
. Each half-edge e starts at points[e]
, so we can connect those three points into a triangle.
Adjacent triangles
We can also use the half-edges of a triangle to find the adjacent triangles. Each half-edge's opposite will be in an adjacent triangle, and the edgeIdToTriangleId
helper function will tell us which triangle a half-edge is in:
Voronoi cells
A Voronoi diagram is built by connecting the Delaunay triangle circumcenters together using the dual of the Delaunay graph.
- Calculate the circumcenters of each triangle
- Construct the Voronoi edges from two circumcenters
- Connect the edges into Voronoi cells
Triangle circumcenters
The formula for circumcenters can be found on Wikipedia. The circumcenter is often but not always inside the triangle.
This convenience function will go from triangle id to circumcenter:
Voronoi edges
With the circumcenters we can draw the Voronoi edges without constructing the polygons. Each Delaunay triangle half-edge corresponds to one Voronoi polygon half-edge. The Delaunay half-edge connects two points, delaunay.triangles[e]
and delaunay.triangles[nextHalfedge(e)]
. The Voronoi half-edge connects the circumcenters of two triangles, triangleOfEdge(e)
and triangleOfEdge(delaunay.halfedges[e])
. We can iterate over the half-edges and construct the line segments:
Constructing Voronoi cells
To build the polygons, we need to find the triangles touching a point. The half-edge structures can give us what we need. Let’s assume we have a starting half-edge that leads into the point. We can alternate two steps to loop around:
- Use
nextHalfedge(e)
to go to the next outgoing half-edge in the current triangle - Use
halfedges[e]
to go to the incoming half-edge in the adjacent triangle
Note that this requires any incoming half-edge that leads to the point. If you need a quick way to find such a half-edge given a point, it can be useful to build an index of these half-edges. For an example, see the modified version of forEachVoronoiCell
at the end of the page.
Drawing Voronoi cells
To draw the Voronoi cells, we can turn a point’s incoming half-edges into triangles, and then find their circumcenters. We can iterate over half-edges, but since many half-edges lead to a point, we need to keep track of which points have already been visited.
Convex hull
There’s a problem with the edgesAroundPoint
loop above. Points on the convex hull won’t be completely surrounded by triangles, and the loop will stop partway through, when it hits -1. There are three approaches to this:
- Ignore it. Make sure never to circulate around points on the convex hull.
- Change the code.
- Check for -1 in all code that looks at
halfedges
. - Change the
edgesAroundPoint
loop to start at the “leftmost” half-edge so that by the time it reaches -1, it has gone through all the triangles.
- Check for -1 in all code that looks at
- Change the data. Remove the convex hull by wrapping the mesh around the “back”. There will no longer be any -1
halfedges
.- Add “ghost” half-edges that pair up with the ones that point to -1.
- Add a single ghost point at “infinity” that represents the “back side” of the triangulation.
- Add ghost triangles to connect these ghost half-edges to the ghost point.
Here’s an example of how to find the “leftmost” half-edge:
However, even with these changes, constructing the Voronoi cell along the convex hull requires projecting the edges outwards and clipping them. The Delaunator library doesn’t provide this functionality; consider using d3-delaunay if you need it.
Summary
The Delaunator library uses half-edges to represent the relationships between points and triangles. On this page are sample functions showing how to move between types of objects:
- edge → edges:
nextHalfedge
,prevHalfedge
,halfedges[]
- edge → points:
triangles[]
- edge → triangle:
triangleOfEdge
- triangle → edges:
edgesOfTriangle
- triangle → points:
pointsOfTriangle
- triangle → triangles:
trianglesAdjacentToTriangle
- point → incoming edges:
edgesAroundPoint
- point → outgoing edges:
edgesAroundPoint
+halfedge[]
- point → points:
edgesAroundPoint
+triangles[]
- point → triangles:
edgesAroundPoint
+triangleOfEdge


This is part of my base template
{% block my_content %}{% endblock %}
This is part of my base template