EPICS V4 Working Group face-to-face Meeting, Day 1, 17-Oct-2012
Agenda, Day 1.
Wed AM - Review and Demo of key EPICS V4 functionality achieved
===============================================================
* Minutes
* Agenda Review.
* Status review:
Go through the line item charter exit demos per list [1] *Greg*
I predict this will take the whole morning. We really aim to demo every piece of
infrastructure sw we've created, so it should take a long time!
Wed PM - Services
=================
1:30pm Relational Database service - demo. Dovetails into Db meeing. *Greg*
2:00pm Archive Service - *David*
2:30pm Model Service - *Guobao*
3:00 break
3:30pm Directory service demo, and it's applications for management and in CSS *Ralph*, *Kunal*
4:00pm Masar service and python applications *Guobao*
4:30pm Unit conversion service *Guobao*
5:00pm PXDB - beamline database user management demo Rick Buono
*********
NEW TOPIC: AGENDA REVIEW
********
AGENDA EPICS V4 OCTOBER 2012 MEETING
====================================
Wed AM - Review and Demo of key EPICS V4 functionality achieved
===============================================================
* Agenda Review.
* Status review:
Go through the line item charter exit demos per list [1] *Greg*
I predict this will take the whole morning. We really aim to demo every piece of
infrastructure sw we've created, so it should take a long time!
Wed PM - Services
=================
* Relational Database service - demo. Dovetails into Db meeing. *Greg*
* Archive Service - *David*
* Model Service - *Guobao*.
* Directory service demo, and it's applications for management and in CSS *Ralph*
* Elog Service and it's applications for management and viewing *WHO*
* Masar service and python applications *Guobao*
* Unit conversion service *Guobao*
Thurs AM - Requirements and Planning for beam line controls
===========================================================
9:00am Application of V4 architecture in High Level Applications Bob Dalesio
9:30am interoperaboility V3 V4 Marty Kraimer
10:00 break
10:30 am Beam line requirements for scanning, data acquisition, and analysis, Daron Chabot.
11:00 am synApps, record types and data. Tim Mooney.
11:30 am Use of areaDetector and synApps for biological data analysis. John Skinner.
12:00 noon Requirements for experiments at SNS. Kay Kaswemir
12:30-1:30 lunch
1:30-3:00 pm Version 4 IOC planning to support beamline controls. Discussion. Bob Dalesio.
3:30 – 4;00 break
4:00 – 4:30pm Normative Types review. *Greg*
* EPICS URI. Review of use of the EPICS URL. *Greg*
4:30pm – 5:00 Proposal for "editing down" and implementation of N-types *Michael*
Friday AM - Next 12 months.
==========================
* Python physics applications that the BNL physics group has developed,
What they like and what they want. *Lingjun*
* Next charter deliverables and roadmap for the next 12 months.
+ Review requirements generated since Wednesday.
+ Charter items proposal. *Greg*
+ Charter discussion.
======NEW TOPIC=================
=
= Status Review
=
================================
Scribe: GS
MD: is there way to call ca://
BD: what is the min requirement?
GW: pvname is moved into part of URI
GW: V3 is easy. ca:///channelname
V4 is complicated...
BD: should be status report. Details should be later
BD: for "organization structure", is it for people, or software?
GW: Software
BD: Does everyone agree with recommandation?
RL: Hardly yes
MS: Yes
DH: Yes
BD: Hold items to Friday
GW: review of the list of nominal tests for V4.
relation of pvget/put and eget.
MS: eget is oriented towards piping to different applications etc.
pvget is a caget-equivalent for pvAccess
GW: is there a eput
MS: no.
TK: pvget takes a long time of exit, reason?
MS: I will take a look at that
Defaults for processing with puts
MK: default for puts is now to process. It can be specified if processing should not take place
Documentation for request strings and their semantics is in pvAccess documentation. Should be in pvData.
Discussion about error messages in database initialization. Related to non-matching record types
===
AI: MK to revise the example database in the V3 channel example
===
MK: use of -r request string in eget automatically implies using structure mode in the reply
(issue: client then needs to parse the return string to get the value of the specified field)
Getting the values of all V3 standard fields
GW: even if I specify a different field, why does eget return the val field?
MK: possibly a bug. Will take a look at it
===
AI: MK to look at the behaviour of what the eget returns
===
MS: the bug of returning all fields even if one was specified has been fixed
GS: is there a utility similar to cainfo available
MS: not yet, but it is planned to have one
MS: pvput to arrays has the same syntax as caput
GS: in caput with arrays you have to explicitly to state that you are doing an array put. How does pvput know that this should
be an array put without the argument
DH: is the different sytax needed. create put knows about the channel type and should be able to figure out that the arguments
are array values
GS: how does pvput know that the first value stating the number of values is that, and not the first value
GW: keep the syntax for pvput. For eput, just use the values (without specifying the number of elements. Determine programmatically
the number of elements) eput can be used in scripts etc. to pipe
RL: how would eput know where to separate the values for different channels (when putting to two channels)
GW: in that case use pvput (syntax will be kept)
pvput can do puts to different fields but not to two pv's
DH: will this work with string arrays
GW: yes, it should work
DH: when do we need quotes
GW: when using eput on the command line (as opposed to piping files)
GW: eget with arrays adds a blank to the end. This will break pipes
MS:
GS: how about getting a defined number of elements with eget
GW: it is not possible yet. Is this useful?
GS: yes.
RL: propose to use the syntax in 3.15. (first element, last element, step) Will send a proposal to Matej
MK: this implies changing ChannelArray
GW: is it useful to do data selection on the server side
(many): yes it is
is the dynamic array sizing supported in V4
MK: yes it is, however not with V3 pv's
eget doubleArray01 doubleArray02
1 6
3 7
7 8
eget -t doubleArray01 doubleArray02
1 3 7
6 7 8
KK: can I ask a service what arguments does it support
GW: it has to be supported by the service writer, but yes it is possible (details still subject to discussion)
eget -a columns=3 -a rows=5 -s testNTMatrix
0.434822 0.0547287 0.824523
1.75967 1.8181 1.73792
2.17249 2.00028 2.71234
3.34916 3.27615 3.28958
4.01409 4.73464 4.08091
eget -a columns=3 -a rows=5 -s testNTMatrix -t
0.435558 1.87279 2.59468 3.21029 4.12483
0.419281 1.89822 2.81356 3.32535 4.98442
0.851423 1.32008 2.56621 3.11472 4.10631
eget -a columns=3 -s testNTTable
column0 column1 column2
0.435738 1.1459 2.22137
0.44465 1.0613 2.60045
0.230346 1.23703 2.74881
0.421738 1.77958 2.17418
0.151863 1.33592 2.42832
0.356142 1.88846 2.81326
0.676708 1.36269 2.54078
0.427452 1.77496 2.95499
0.190023 1.67901 2.56949
0.708225 1.13174 2.44391
eget -a columns=3 -s testNTTable -t
column0 0.435746 0.576188 0.985951 0.880388 0.68463 0.575101 0.723752 0.106317 0.869319 0.642918
column1 1.5294 1.58071 1.068 1.81415 1.38939 1.41816 1.03384 1.78265 1.06243 1.19859
column2 2.63886 2.28722 2.33778 2.10462 2.27449 2.34019 2.63275 2.60891 2.98549 2.1451
===
AI: on GW: define examples of cases where one needs terse output, or/and transposed output
===
Wed PM - Services
===============================================================
Archive Service - *David*
==================
DH: Problems with getting the specific client to work with the new server model (no pvIOC), so the example can only use eget and misses the extensive formatting options of the specific client.
The specific client allows more versatile timestamp specification (on input) and e.g. more types of output formatting (e.g. time stamps as time-string, or as double for plotting).
BD: What functioniality do the physics apps expect?
Needed: Weekly reports on things. ~dozens of fixed query plots generated.
GW: SLAC uses Matlab tools for data mining, finding devices or physics entities that are drifting etc.
========
Diamond is looking forward to the NT Image Server - that should be made a deliverable.
-> Thursday - beamline session
========
KK: Non-streaming service might run into trouble, as archive queries might call for large amounts of data, which is a resource issue when the service has to create the complete answer structure befoe sending it.
GW: Don't waste time working on the solution for 1% of teh queries.
MD, RL: There have been recent issues with channelarchiver clients not being able to retrieve sets of waveform data.
GW: shows LCLS web pages that do reports (last hr - last yr) on important machine parameters ("how did we do last week?").
RL: Directory service demo
V4 service is a (separate) layer on top of the Glassfish implementation. Takes the request structure, converts it to the API of the directory service. Results are again converted to pvData structures and put on the wire.
KK: Could the directory service go directly to the database?
RL: it *could* but the implementation has a lot of businesslogic implemented in the database, it isolates the implementation from the database system below and provides a more robust system.
===
AI: on RL to implement sorting the results by multiple items, and show columns in the specified order
===
Discussion about handling the results in CSS. With the (current) V4 results CSS cannot know that the
returned data is in fact channel names. The problem would be solved by a NT type that specifies that
a string array contains channel names.
GW: it is planned (NTMultiChannelArray) but not yet implemented nor fully specified
*********
NEW TOPIC: Channel Viewer
*********
Kunal
Kunal showed a CSS widget library for creating "channel finder driven" CSS displays.
And example bump display was shown.
*******
NEW TOPIC: MASAR Service and Experiance at NSLS II
*******
Guobao Shen
GS:
MASAR is a save and restore service.
Masar is now a V4 service. It doesn't presently use NTURI but it is using NTNameValue pair for arguments, and NTTable for returned data.
Masar uses SQLlite database for configs.
pvclient -> MASAR -> V3 iocs
MASAR can take a snapshot of any kind of V3 data, including waveform
The MASAR service only save and serves "snaphots", it doesn't itself restore snapshots. That is, it
doesn't write to setpoints of the machine. Physicists use the sanpshots and write their own
software to implement those snapshots.
Lessons Leant
Design your configurations carefully.
Tell physicists to be careful not to compare the values in two snapshots without
also being conscious of the times at which the channels were processed (which is also recorded in the event snapshot).
BD: Is there a way to search all the snaphsots for a given PV?
GS: No, short of greping the SQLLite database file
RL: Saving readbacks with the setpoints adds valuable information (e.g. setpoints from a ps that was switched off might be dangerous to restore).
Some restore operations need pre and post operations, e.g. to switch a device to "manual" before restoring setpoints, and back to "automatic" after.


The COVID-19 pandemic has already disrupted the education of 98% of American students.
COVID-19 cases are still going up in 1 out of 3 states. The problem isn't going away.
Is the right to education impeded by remote learning?
COVID-19 Learning Loss
Summer learning loss, also called the summer slide, is a well-documented problem in K-12 education in which students lose academic progress over the summer months, which are usually the longest break from in-person education. Summer learning loss particularly affects students in under-resourced communities. COVID-19 school closures, most of which began in early March, have led to what is effectively an unusually long summer. Many students do not have the adequate space, internet, or computer access necessary in order to maintain an in-person standard of education. This is the covid-19 learning loss.
Negative Effects of Remote Learning
New research from NWEA, a nonprofit research organization, predicts major academic impacts from COVID-19 school closures for the average student, who will begin the next school year having lost as much as a third of the expected progress from the previous year in reading and half of the expected progress in math. To put it shortly, remote learning has the potential to severely disrupt the futures of all K-12 students affected.
Disproportionate Demographic Impacts
Even so, remote learning affects some students more than others. For example, when researchers from Brown and Harvard tracked performance since late April (after mass school closures) in an online math program, they found that student progress in math decreased by about half in classrooms located in low-income ZIP codes, by a third in classrooms in middle-income ZIP codes and not at all in classrooms in high-income ZIP codes. Survey data reveal why such discrepancies across income might exist. About a third of teachers in high-poverty schools described access issues (eg. access to computers) as a major limitation, and principals reported home internet access as the top issue limiting distance instruction.
Our Mission
Using federal open-source data (see About), we present interactive data visualizations to expose some of the many hidden barriers to remote education. We hope to reveal the location and severity of barriers such as lack of access to computers and quiet spaces. Our user-oriented and interpretable data visualizations are designed to help policymakers, administrators, and researchers understand institutional social failures are disrupting equal access to K-12 remote education. Questions our data probes:
- What obstacles to remote learning do students in the United States face?
- Which students are most affected by which barriers?
- How do multiple barriers, such as access to computers, access to internet, and access to study space, interact with each other?
- How might communities tackling COVID-19 take on obstacles to remote learning?


|
| struct | ConstraintMatPair |
| | Constraint matrix pair (Ax = b or Ax <= b). A is assumed to be sparse while b to be as dense matrix. More...
|
| |
| struct | FixPin |
| | Equality constraint. More...
|
| |
| struct | LoosePin |
| | Inequality constraint. More...
|
| |
| class | OptimTrajGen |
| | The trajectory is represented as the linear interpolation of discrete points. More...
|
| |
| struct | Pin |
| | Pin object represent the constraints to be imposed on trajectory. More...
|
| |
| struct | PolyParam |
| | PolyParameters to define the behavior of polynomial. More...
|
| |
| struct | PolyState |
| | State of the polynomial segment (number of imposed continuity, added fixed pin). More...
|
| |
| class | PolyTrajGen |
| | Piecewise polynomial trajectory. In this method, we define the primitive of trajectory as polynomial. More...
|
| |
| struct | QpBlock |
| | The basic qp block (p'Qp + Hp). Note that 1/2 is not multiplied! More...
|
| |
| struct | QpForm |
| | Dimensional collection of qp Blocks. More...
|
| |
| class | TrajGen |
| | TrajGen is abstract class as a base for polyTrajGen and optimTrajGen. More...
|
| |
|
| typedef unsigned int | uint |
| |
| template<typename T , size_t Size> |
| using | Vector = Eigen::Matrix< T, Size, 1 > |
| |
| template<typename T > |
| using | VectorX = Eigen::Matrix< T, -1, 1 > |
| |
| typedef uint | d_order |
| |
| typedef uint | p_order |
| |
| template<typename T > |
| using | time_knots = vector< T > |
| |
| template<typename T > |
| using | spMatrixRow = SparseMatrix< T, RowMajor > |
| |
| template<typename T > |
| using | PolyCoeff = Eigen::Matrix< T, -1, 1 > |
| |
| template<typename T > |
| using | MatrixRow = Matrix< T,-1,-1, RowMajor > |
| |
|
| template<typename T > |
| void | sparseBlockCopy (SparseMatrix< T, RowMajor > *targetMat, SparseMatrix< T, RowMajor > inMat, long startRow, long startCol) |
| | Insert inMat to targetMat.block(startRow,startCol,rowSize,colSize). More...
|
| |
| template<typename T > |
| void | sparseBlockCopy (SparseMatrix< T, RowMajor > *targetMat, SparseMatrix< T, ColMajor > inMat, long startRow, long startCol) |
| | Insert inMat to targetMat.block(startRow,startCol,rowSize,colSize). As the block insertion for sparse matrix is not implemented in Eigen3, I wrote. More...
|
| |
| template<typename T > |
| void | sparseBlockCopy (SparseMatrix< T, RowMajor > *targetMat, Matrix< T,-1,-1, RowMajor > inMat, long startRow, long startCol) |
| | Insert inMat to targetMat.block(startRow,startCol,rowSize,colSize). As the block insertion for sparse matrix is not implemented in Eigen3, I wrote. More...
|
| |
| template<typename T > |
| vector< T > | setDiff (const set< T > &setA, const set< T > &setB) |
| | extract the diff element (setA - setB). More...
|
| |
| template<typename T > |
| T | interpolate (const VectorX< T > &xData, const VectorX< T > &yData, const T &x, bool extrapolate) |
| | Perform interpolation for the data pair (xData,yData) given a query value x. More...
|
| |
Trajectory generation modules
template<typename T >
| void trajgen::sparseBlockCopy |
( |
SparseMatrix< T, RowMajor > * |
targetMat, |
|
|
SparseMatrix< T, RowMajor > |
inMat, |
|
|
long |
startRow, |
|
|
long |
startCol |
|
) |
| |
Insert inMat to targetMat.block(startRow,startCol,rowSize,colSize).
As the block insertion for sparse matrix is not implemented in Eigen3, I wrote.
- Parameters
-
| targetMat | Insertion target (big) |
| inMat | Inserted matrix (small) |
| startRow | |
| startCol | |
Definition at line 59 of file TrajGen.hpp.


Hawaii auto sales continue to slump as economy slows | Honolulu Star-Advertiser
Hawaii auto sales fell for the fifth straight quarter and are headed for their second down year in a row amid slowing growth in the state economy. Read more
Mahalo for reading the Honolulu Star-Advertiser!
You're reading a premium story. Read the full story with our Print & Digital Subscription.
Already a subscriber? Log in now to continue reading this story.
Print subscriber but without online access? Activate your Digital Account now.


Welcome to nginx website
This is created using Packer, Ansible and Terraform. Code created by Zibusiso Edwin Ndlovu


A compiler and framework for creating Atari 2600 games with C#.
A CHIP-8 emulator that outputs to the console.
A 3D engine in the style of Minecraft. Uses Direct3D 11 and related API via SharpDX.
Project for a computer graphics course. Links a physics engine with a vertex shader.
Unfinished tower defense game using the Unreal Development Kit.
A Pong game for the Atari 2600.


Setting up networking on OpenBSD hosted VMs
Quick tutorial on networking OpenBSD VMs
Posted on Sat, 14 Nov 2015 12:00:00 MST by Aaron Bieber
With OpenBSD getting a native hypervisor, I figured I would quickly describe my setup for allowing the VMs to access network resources!
This setup is using NAT and IP forwarding.
First thing, enable forwarding:
doas echo "net.inet.ip.forwarding=1" >> /etc/sysctl.conf
# Only run the above if you want this all to start at boot
sysctl net.inet.ip.forwarding=1
Next we need to configure a tap interface at tap0
.
cat /etc/hostname.tap0
:
inet <IP_ADDRESS> <IP_ADDRESS>
up
Now tell pf
what to do with the packets coming from the tap0
interface:
match out on $ext_if inet from tap0:network nat-to ($ext_if)
At this point, you could just manually assign ips to your VMs when booting / installing.
For a bit more automation, we can run dhcpd
on the tap0
interface:
cat /etc/dhcpd.conf
option domain-name "vm.bolddaemon";
option domain-name-servers <IP_ADDRESS>, <IP_ADDRESS>;
subnet <IP_ADDRESS> netmask <IP_ADDRESS> {
option routers <IP_ADDRESS>;
range <IP_ADDRESS> <IP_ADDRESS>;
}
Pretty nifty, and all of it is in base (on amd64 and i386)!!


Coronavirus Unemployment
Which states have been most impacted by unemployment due to the 2020 Coronavirus pandemic? To investigate this, I use the Bureau of Labor Statistics API and some special R ggplot extensions to visualize this relationship with sparklines and small multiples.
Load Packages
if (!require("pacman")) install.packages("pacman")
## Loading required package: pacman
pacman::p_load(blscrapeR, geofacet, tidyverse, scales, here)
# For Windows computers, load font devices here:
# extrafont::loadfonts(device = "win", quiet = TRUE)
Now, scrape the 2020 monthly unemployment data with the Bureau of Labor Statistics API. This isn’t pretty, particularly because each of the “LASST” links is somewhat randomly named and does not import the state name.
bls <-
bls_api("LASST010000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Alabama") %>%
bind_rows(bls_api("LASST020000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Alaska")) %>%
bind_rows(bls_api("LASST040000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Arizona")) %>%
bind_rows(bls_api("LASST050000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Arkansas")) %>%
bind_rows(bls_api("LASST060000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "California")) %>%
bind_rows(bls_api("LASST080000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Colorado")) %>%
bind_rows(bls_api("LASST090000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Connecticut")) %>%
bind_rows(bls_api("LASST100000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Delaware")) %>%
bind_rows(bls_api("LASST110000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "District of Columbia")) %>%
bind_rows(bls_api("LASST120000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Florida")) %>%
bind_rows(bls_api("LASST130000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Georgia")) %>%
bind_rows(bls_api("LASST150000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Hawaii")) %>%
bind_rows(bls_api("LASST160000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Idaho")) %>%
bind_rows(bls_api("LASST170000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Illinois")) %>%
bind_rows(bls_api("LASST180000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Indiana")) %>%
bind_rows(bls_api("LASST190000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Iowa")) %>%
bind_rows(bls_api("LASST200000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Kansas")) %>%
bind_rows(bls_api("LASST210000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Kentucky")) %>%
bind_rows(bls_api("LASST220000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Louisiana")) %>%
bind_rows(bls_api("LASST230000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Maine")) %>%
bind_rows(bls_api("LASST240000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Maryland")) %>%
bind_rows(bls_api("LASST250000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Massachusetts")) %>%
bind_rows(bls_api("LASST260000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Michigan")) %>%
bind_rows(bls_api("LASST270000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Minnesota")) %>%
bind_rows(bls_api("LASST280000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Mississippi")) %>%
bind_rows(bls_api("LASST290000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Missouri")) %>%
bind_rows(bls_api("LASST300000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Montana")) %>%
bind_rows(bls_api("LASST310000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Nebraska")) %>%
bind_rows(bls_api("LASST320000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Nevada")) %>%
bind_rows(bls_api("LASST330000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "New_Hampshire")) %>%
bind_rows(bls_api("LASST340000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "New_Jersey")) %>%
bind_rows(bls_api("LASST350000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "New_Mexico")) %>%
bind_rows(bls_api("LASST360000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "New_York")) %>%
bind_rows(bls_api("LASST370000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "North_Carolina")) %>%
bind_rows(bls_api("LASST380000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "North_Dakota")) %>%
bind_rows(bls_api("LASST390000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Ohio")) %>%
bind_rows(bls_api("LASST400000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Oklahoma")) %>%
bind_rows(bls_api("LASST410000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Oregon")) %>%
bind_rows(bls_api("LASST420000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Pennsylvania")) %>%
bind_rows(bls_api("LASST440000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Rhode_Island")) %>%
bind_rows(bls_api("LASST450000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "South_Carolina")) %>%
bind_rows(bls_api("LASST460000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "South_Dakota")) %>%
bind_rows(bls_api("LASST470000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Tennessee")) %>%
bind_rows(bls_api("LASST480000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Texas")) %>%
bind_rows(bls_api("LASST490000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Utah")) %>%
bind_rows(bls_api("LASST500000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Vermont")) %>%
bind_rows(bls_api("LASST510000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Virginia")) %>%
bind_rows(bls_api("LASST530000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Washington")) %>%
bind_rows(bls_api("LASST540000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "West_Virginia")) %>%
bind_rows(bls_api("LASST550000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Wisconsin")) %>%
bind_rows(bls_api("LASST560000000000003", startyear = 2020, endyear = 2020) %>% mutate(state = "Wyoming")) %>%
dplyr::select(-c(year,period, latest, footnotes,seriesID))
write_csv(bls, path = "bls_July.csv") # save the data, as you have limited daily queries!
Alternatively, I already have this data saved, so I’ll import it here instead:
bls <- read_csv("bls_July.csv")
## Parsed with column specification:
## cols(
## periodName = col_character(),
## value = col_double(),
## state = col_character()
## )
bls <- bls %>%
pivot_wider(id_cols = "state",
names_from = periodName,
values_from = value) %>% # change from long for to wide form
rowwise() %>%
mutate(row_max = max(January:June), # calculate maximum unemployment by state
row_min = min(January:June), # calculate minimum unemployment by state
diff = (row_max - row_min)/100) %>% # calculate the difference between max and min for color plotting
pivot_longer(cols = -c(state, diff, row_max, row_min),
names_to = "month",
values_to = "value") %>% # switch back to long form for plotting
mutate(month = fct_relevel(as.factor(month),
c("January", "February", "March", "April", "May", "June")),
# turn the month into a factor and reorder it
state = str_replace(state, "_", " "), # replace the "_" in the state names with spaces
value = value / 100) # to probably render the percents
And now, plot! Not the faceting over approximate state locations with the geofacet
package.
unempl_plot <- ggplot(bls, aes(x=month, y = value, group = state)) +
geom_line(aes(color = diff), size = 2) +
scale_color_gradient(name = "Max Rise in\nUnemployment",
low = "#fffeea", high = "#c03728",
label = label_percent(accuracy = 1,
trim = FALSE)) +
theme_minimal(base_family = "Roboto Condensed", base_size = 14) +
theme(axis.text = element_blank(),
axis.title = element_text(family = "Roboto Condensed Light"),
panel.grid = element_blank(),
panel.border = element_blank(),
legend.position = c(.9,.3),
legend.title = element_text(size = 8, family = "Roboto Condensed Light"),
strip.text = element_text(size = 12, "Roboto Condensed Light"),
legend.text = element_text(size = 10)) +
facet_geo(~ state, grid = "us_state_grid2", label = "code") +
labs(title = "Which states have the sharpest increase in unemployment due to COVID-19?",
caption = "Source: Bureau of Labor Statistics\ngithub.com/kelseygonzalez",
x = "Month of 2020 (January - June)",
y = "Unemployment Rate")
ggsave("bls_unemployment.png", plot = unempl_plot, width = 10, height = 6)


Listener. More...
Public Member Functions | |
| (id) | - init |
| Default constructor for a new Listener object. | |
| (id) | - initWithProtocol:andLoadBalancerPort:andInstancePort: |
| Constructs a new Listener object. | |
| (NSString *) | - description |
| Returns a string representation of this object; useful for testing and debugging. | |
Properties | |
| NSString * | protocol |
| Specifies the LoadBalancer transport protocol to use for routing - TCP or HTTP. | |
| NSNumber * | loadBalancerPort |
| Specifies the LoadBalancer transport protocol to use for routing - TCP or HTTP. | |
| NSNumber * | instancePort |
| Specifies the TCP port on which the instance server is listening. | |
| NSString * | sSLCertificateId |
| The ID of the SSL certificate chain to use. |
Listener.
| - (NSString * ElasticLoadBalancingListener.)description |
Returns a string representation of this object; useful for testing and debugging.
| - (id ElasticLoadBalancingListener.)init |
Default constructor for a new Listener object.
Callers should use the property methods to initialize this object after creating it.
| - (id ElasticLoadBalancingListener.)initWithProtocol: | (NSString *) | theProtocol | ||
| andLoadBalancerPort: | (NSNumber *) | theLoadBalancerPort | ||
| andInstancePort: | (NSNumber *) | theInstancePort | ||
Constructs a new Listener object.
Callers should use properties to initialize any additional object members.
| theProtocol | Specifies the LoadBalancer transport protocol to use for routing - TCP or HTTP. This property cannot be modified for the life of the LoadBalancer. | |
| theLoadBalancerPort | Specifies the LoadBalancer transport protocol to use for routing - TCP or HTTP. This property cannot be modified for the life of the LoadBalancer. | |
| theInstancePort | Specifies the TCP port on which the instance server is listening. This property cannot be modified for the life of the LoadBalancer. |
- (NSNumber *) instancePort [read, write, retain] |
Specifies the TCP port on which the instance server is listening.
This property cannot be modified for the life of the LoadBalancer.
Constraints:
Range: 1 - 65535
- (NSNumber *) loadBalancerPort [read, write, retain] |
Specifies the LoadBalancer transport protocol to use for routing - TCP or HTTP.
This property cannot be modified for the life of the LoadBalancer.
- (NSString *) protocol [read, write, retain] |
Specifies the LoadBalancer transport protocol to use for routing - TCP or HTTP.
This property cannot be modified for the life of the LoadBalancer.
- (NSString *) sSLCertificateId [read, write, retain] |
The ID of the SSL certificate chain to use.
For more information on SSL certificates, see <a ervices.com/IAM/latest/UserGuide/index.html?ManagingCredentials.html"> Managing Keys and Certificates in the AWS Identity and Access Management documentation.


Dashboard Tourpedia
Dashboard to visualize data from TourPedia API.
Dashboard Aspects
Dashboard for aspect and sentiment analysis in restaurant context.
Dashboard FTT
Dashboard for tweets with a financial context.
Footballmood
Dashboard for sentiment analysis in sport events.


This exercise should be handed in as a jupyter-notebook at D2L. Remember to write your name(s).
Last week we:
This week we will:
This material will then serve as background for the numerical part of homework 3. The first part is a simple warm-up, with hints and suggestions you can use for the code to write below.
# As usual, here are some useful packages we will be using. Feel free to use more and experiment as you wish.
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d
%matplotlib inline
In class (the falling baseball example) we used an analytical expression for the height of a falling ball. In the first homework we used instead the position from experiment (Usain Bolt's 100m record run) and stored this information with one-dimensional arrays in Python.
Let us get some practice with this. The cell below creates two arrays, one containing the times to be analyzed and the other containing the \( x \) and \( y \) components of the position vector at each point in time. This is a two-dimensional object. The second array is initially empty. Then we define the initial position to be \( x=2 \) and \( y=1 \). Take a look at the code and comments to get an understanding of what is happening. Feel free to play around with it.
tf = 4 #length of value to be analyzed
dt = .001 # step sizes
t = np.arange(0.0,tf,dt) # Creates an evenly spaced time array going from 0 to 3.999, with step sizes .001
p = np.zeros((len(t), 2)) # Creates an empty array of [x,y] arrays (our vectors). Array size is same as the one for time.
p[0] = [2.0,1.0] # This sets the inital position to be x = 2 and y = 1
Below we are printing specific values of our array to see what is being stored where. The first number in the array \( r[] \) represents which array iteration we are looking at, while the number after the represents which listed number in the array iteration we are getting back.
print(p[0]) # Prints the first array
print(p[0,:]) # Same as above, these commands are interchangeable
print(p[3999]) # Prints the 4000th array
print(p[0,0]) # Prints the first value of the first array
print(p[0,1]) # Prints the second value of first array
print(p[:,0]) # Prints the first value of all the arrays
Then try running this cell. Notice how it gives an error since we did not implement a third dimension into our arrays
print(p[:,2])
In the cell below we want to manipulate the arrays. In this example we make each vector's \( x \) component valued the same as their respective vector's position in the iteration and the \( y \) value will be twice that value, except for the first vector, which we have already set. That is we have \( p[0] = [2,1], p[1] = [1,2], p[2] = [2,4], p[3] = [3,6], ... \)
Here we set up an array for \( x \) and \( y \) values.
for i in range(1,3999):
p[i] = [i,2*i]
# Checker cell to make sure your code is performing correctly
c = 0
for i in range(0,3999):
if i == 0:
if p[i,0] != 2.0:
c += 1
if p[i,1] != 1.0:
c += 1
else:
if p[i,0] != 1.0*i:
c += 1
if p[i,1] != 2.0*i:
c += 1
if c == 0:
print("Success!")
else:
print("There is an error in your code")
You could also think of an alternative way of storing the above information. Feel free to explore how to store multidimensional objects.
Assume we have a soccer ball moving in three dimensions with the following trajectory:
Now let us create a three-dimensional (3D) plot using these equations. In the cell below we write the equations into their respective labels. We fix a final time in the code below.
Important Concept: Numpy comes with many mathematical packages, some of them being the trigonometric functions sine, cosine, tangent. We are going to utilize these this week. Additionally, these functions work with radians, so we will also be using a function from Numpy that converts degrees to radians.
tf = 2.04 # The final time to be evaluated
dt = 0.1 # The time step size
t = np.arange(0,tf,dt) # The time array
theta_deg = 45 # Degrees
theta_rad = np.radians(theta_deg) # Converts degrees to their radian counterparts
x = 10*t*np.cos(theta_rad) # Equation for our x component, utilizing np.cos() and our calculated radians
y = 10*t*np.sin(theta_rad) # Put the y equation here
z = 10*t-9.81/2*t**2# Put the z equation here
Then we plot it
## Once you have entered the proper equations in the cell above, run this cell to plot in 3D
fig = plt.axes(projection='3d')
fig.set_xlabel('x')
fig.set_ylabel('y')
fig.set_zlabel('z')
fig.scatter(x,y,z)
In the cell below we will put the equations into a single vector \( \boldsymbol{r} \).
Then run the code and plot using the array \( r \)
r = np.array((10*t*np.cos(theta_rad), 10*t*np.sin(theta_rad), 10*t - 9.81/2*t**2))
## Run this code to plot using our r array
fig = plt.axes(projection='3d')
fig.set_xlabel('x')
fig.set_ylabel('y')
fig.set_zlabel('z')
fig.scatter(r[0],r[1],r[2])
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d
%matplotlib inline
tf = 4 #length of value to be analyzed
dt = .001 # step sizes
t = np.arange(0.0,tf,dt) # Creates an evenly spaced time array going from 0 to 3.999, with step sizes .001
p = np.zeros((len(t), 2)) # Creates an empty array of [x,y] arrays (our vectors). Array size is same as the one for time.
p[0] = [2.0,1.0] # This sets the inital position to be x = 2 and y = 1
for i in range(1,3999):
p[i] = [i,2*i]
# Checker cell to make sure your code is performing correctly
c = 0
for i in range(0,3999):
if i == 0:
if p[i,0] != 2.0:
c += 1
if p[i,1] != 1.0:
c += 1
else:
if p[i,0] != 1.0*i:
c += 1
if p[i,1] != 2.0*i:
c += 1
if c == 0:
print("Success!")
else:
print("There is an error in your code")
This can be both from a computational and physics stand point. Computationally, it makes it slower to access a given time slot, because two accesses are necessary instead of one. It also takes up more space, requiring four pointers to arrays instead of merely three.
Physically, position is a vector, so it makes sense. Perhaps a slightly more physics-related solution, which could also be useful computationally, is instead of having an array of x, y, and z, having an array where the t'th element s \( (x[t],y[t],z[t]) \). This would be one memory lookup instead of three in order to get a position.
def golfball(vi, theta):
theta_rad = np.radians(theta)
tf = vi*np.sin(theta_rad)/4.9
dt = 0.1
t = np.arange(0,tf,dt)
x = t*vi*np.cos(theta_rad)
y = 0*t
z = t*vi*np.sin(theta_rad)-9.81/2*t**2
r = [x,y,z]
fig = plt.axes(projection='3d')
fig.set_xlabel('x')
fig.set_ylabel('y')
fig.set_zlabel('z')
fig.scatter(r[0],r[1],r[2])
print("Maximum x:", tf*vi*np.cos(theta_rad))
print("Maximum y:", 0)
print("Maximum z:", (tf/2.0)*vi*np.sin(theta_rad)-9.81/2*(tf/2.0)**2)
print("6d:")
golfball(90, 30)
print("6e:")
golfball(45, 45)


A Swift Tour
Tradition suggests that the first program in a new language should print the words “Hello, world!” on the screen. In Swift, this can be done in a single line:
print("Hello, world!")
If you have written code in C or Objective-C, this syntax looks familiar to you—in Swift, this line of code is a complete program. You don’t need to import a separate library for functionality like input/output or string handling. Code written at global scope is used as the entry point for the program, so you don’t need a main()
function. You also don’t need to write semicolons at the end of every statement.
This tour gives you enough information to start writing code in Swift by showing you how to accomplish a variety of programming tasks. Don’t worry if you don’t understand something—everything introduced in this tour is explained in detail in the rest of this book.
Simple Values
Use let
to make a constant and var
to make a variable. The value of a constant doesn’t need to be known at compile time, but you must assign it a value exactly once. This means you can use constants to name a value that you determine once but use in many places.
var myVariable = 42
myVariable = 50
let myConstant = 42
A constant or variable must have the same type as the value you want to assign to it. However, you don’t always have to write the type explicitly. Providing a value when you create a constant or variable lets the compiler infer its type. In the example above, the compiler infers that myVariable
is an integer because its initial value is an integer.
If the initial value doesn’t provide enough information (or if there is no initial value), specify the type by writing it after the variable, separated by a colon.
let implicitInteger = 70
let implicitDouble = 70.0
let explicitDouble: Double = 70
Values are never implicitly converted to another type. If you need to convert a value to a different type, explicitly make an instance of the desired type.
let label = "The width is "
let width = 94
let widthLabel = label + String(width)
There’s an even simpler way to include values in strings: Write the value in parentheses, and write a backslash (\
) before the parentheses. For example:
let apples = 3
let oranges = 5
let appleSummary = "I have \(apples) apples."
let fruitSummary = "I have \(apples + oranges) pieces of fruit."
Use three double quotes ("""
) for strings that take up multiple lines. Indentation at the start of each quoted line is removed, as long as it matches the indentation of the closing quote. For example:
let quotation = """
I said "I have \(apples) apples."
And then I said "I have \(apples + oranges) pieces of fruit."
"""
Create arrays and dictionaries using brackets ([]
), and access their elements by writing the index or key in brackets. A comma is allowed after the last element.
var shoppingList = ["catfish", "water", "tulips", "blue paint"]
shoppingList[1] = "bottle of water"
var occupations = [
"Malcolm": "Captain",
"Kaylee": "Mechanic",
]
occupations["Jayne"] = "Public Relations"
To create an empty array or dictionary, use the initializer syntax.
let emptyArray = [String]()
let emptyDictionary = [String: Float]()
If type information can be inferred, you can write an empty array as []
and an empty dictionary as [:]
—for example, when you set a new value for a variable or pass an argument to a function.
shoppingList = []
occupations = [:]
Control Flow
Use if
and switch
to make conditionals, and use for
-in
, while
, and repeat
-while
to make loops. Parentheses around the condition or loop variable are optional. Braces around the body are required.
let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores {
if score > 50 {
teamScore += 3
} else {
teamScore += 1
}
}
print(teamScore)
In an if
statement, the conditional must be a Boolean expression—this means that code such as if score { ... }
is an error, not an implicit comparison to zero.
You can use if
and let
together to work with values that might be missing. These values are represented as optionals. An optional value either contains a value or contains nil
to indicate that a value is missing. Write a question mark (?
) after the type of a value to mark the value as optional.
var optionalString: String? = "Hello"
print(optionalString == nil)
var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
greeting = "Hello, \(name)"
}
If the optional value is nil
, the conditional is false
and the code in braces is skipped. Otherwise, the optional value is unwrapped and assigned to the constant after let
, which makes the unwrapped value available inside the block of code.
Another way to handle optional values is to provide a default value using the ??
operator. If the optional value is missing, the default value is used instead.
let nickName: String? = nil
let fullName: String = "John Appleseed"
let informalGreeting = "Hi \(nickName ?? fullName)"
Switches support any kind of data and a wide variety of comparison operations—they aren’t limited to integers and tests for equality.
let vegetable = "red pepper"
switch vegetable {
case "celery":
print("Add some raisins and make ants on a log.")
case "cucumber", "watercress":
print("That would make a good tea sandwich.")
case let x where x.hasSuffix("pepper"):
print("Is it a spicy \(x)?")
default:
print("Everything tastes good in soup.")
}
Notice how let
can be used in a pattern to assign the value that matched the pattern to a constant.
After executing the code inside the switch case that matched, the program exits from the switch statement. Execution doesn’t continue to the next case, so there is no need to explicitly break out of the switch at the end of each case’s code.
You use for
-in
to iterate over items in a dictionary by providing a pair of names to use for each key-value pair. Dictionaries are an unordered collection, so their keys and values are iterated over in an arbitrary order.
let interestingNumbers = [
"Prime": [2, 3, 5, 7, 11, 13],
"Fibonacci": [1, 1, 2, 3, 5, 8],
"Square": [1, 4, 9, 16, 25],
]
var largest = 0
for (kind, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
largest = number
}
}
}
print(largest)
Use while
to repeat a block of code until a condition changes. The condition of a loop can be at the end instead, ensuring that the loop is run at least once.
var n = 2
while n < 100 {
n *= 2
}
print(n)
var m = 2
repeat {
m *= 2
} while m < 100
print(m)
You can keep an index in a loop by using ..<
to make a range of indexes.
var total = 0
for i in 0..<4 {
total += i
}
print(total)
Use ..<
to make a range that omits its upper value, and use ...
to make a range that includes both values.
Functions and Closures
Use func
to declare a function. Call a function by following its name with a list of arguments in parentheses. Use ->
to separate the parameter names and types from the function’s return type.
func greet(person: String, day: String) -> String {
return "Hello \(person), today is \(day)."
}
greet(person: "Bob", day: "Tuesday")
By default, functions use their parameter names as labels for their arguments. Write a custom argument label before the parameter name, or write _
to use no argument label.
func greet(_ person: String, on day: String) -> String {
return "Hello \(person), today is \(day)."
}
greet("John", on: "Wednesday")
Use a tuple to make a compound value—for example, to return multiple values from a function. The elements of a tuple can be referred to either by name or by number.
func calculateStatistics(scores: [Int]) -> (min: Int, max: Int, sum: Int) {
var min = scores[0]
var max = scores[0]
var sum = 0
for score in scores {
if score > max {
max = score
} else if score < min {
min = score
}
sum += score
}
return (min, max, sum)
}
let statistics = calculateStatistics(scores: [5, 3, 100, 3, 9])
print(statistics.sum)
print(statistics.2)
Functions can be nested. Nested functions have access to variables that were declared in the outer function. You can use nested functions to organize the code in a function that is long or complex.
func returnFifteen() -> Int {
var y = 10
func add() {
y += 5
}
add()
return y
}
returnFifteen()
Functions are a first-class type. This means that a function can return another function as its value.
func makeIncrementer() -> ((Int) -> Int) {
func addOne(number: Int) -> Int {
return 1 + number
}
return addOne
}
var increment = makeIncrementer()
increment(7)
A function can take another function as one of its arguments.
func hasAnyMatches(list: [Int], condition: (Int) -> Bool) -> Bool {
for item in list {
if condition(item) {
return true
}
}
return false
}
func lessThanTen(number: Int) -> Bool {
return number < 10
}
var numbers = [20, 19, 7, 12]
hasAnyMatches(list: numbers, condition: lessThanTen)
Functions are actually a special case of closures: blocks of code that can be called later. The code in a closure has access to things like variables and functions that were available in the scope where the closure was created, even if the closure is in a different scope when it is executed—you saw an example of this already with nested functions. You can write a closure without a name by surrounding code with braces ({}
). Use in
to separate the arguments and return type from the body.
numbers.map({ (number: Int) -> Int in
let result = 3 * number
return result
})
You have several options for writing closures more concisely. When a closure’s type is already known, such as the callback for a delegate, you can omit the type of its parameters, its return type, or both. Single statement closures implicitly return the value of their only statement.
let mappedNumbers = numbers.map({ number in 3 * number })
print(mappedNumbers)
You can refer to parameters by number instead of by name—this approach is especially useful in very short closures. A closure passed as the last argument to a function can appear immediately after the parentheses. When a closure is the only argument to a function, you can omit the parentheses entirely.
let sortedNumbers = numbers.sorted { $0 > $1 }
print(sortedNumbers)
Objects and Classes
Use class
followed by the class’s name to create a class. A property declaration in a class is written the same way as a constant or variable declaration, except that it is in the context of a class. Likewise, method and function declarations are written the same way.
class Shape {
var numberOfSides = 0
func simpleDescription() -> String {
return "A shape with \(numberOfSides) sides."
}
}
Create an instance of a class by putting parentheses after the class name. Use dot syntax to access the properties and methods of the instance.
var shape = Shape()
shape.numberOfSides = 7
var shapeDescription = shape.simpleDescription()
This version of the Shape
class is missing something important: an initializer to set up the class when an instance is created. Use init
to create one.
class NamedShape {
var numberOfSides: Int = 0
var name: String
init(name: String) {
self.name = name
}
func simpleDescription() -> String {
return "A shape with \(numberOfSides) sides."
}
}
Notice how self
is used to distinguish the name
property from the name
argument to the initializer. The arguments to the initializer are passed like a function call when you create an instance of the class. Every property needs a value assigned—either in its declaration (as with numberOfSides
) or in the initializer (as with name
).
Use deinit
to create a deinitializer if you need to perform some cleanup before the object is deallocated.
Subclasses include their superclass name after their class name, separated by a colon. There is no requirement for classes to subclass any standard root class, so you can include or omit a superclass as needed.
Methods on a subclass that override the superclass’s implementation are marked with override
—overriding a method by accident, without override
, is detected by the compiler as an error. The compiler also detects methods with override
that don’t actually override any method in the superclass.
class Square: NamedShape {
var sideLength: Double
init(sideLength: Double, name: String) {
self.sideLength = sideLength
super.init(name: name)
numberOfSides = 4
}
func area() -> Double {
return sideLength * sideLength
}
override func simpleDescription() -> String {
return "A square with sides of length \(sideLength)."
}
}
let test = Square(sideLength: 5.2, name: "my test square")
test.area()
test.simpleDescription()
In addition to simple properties that are stored, properties can have a getter and a setter.
class EquilateralTriangle: NamedShape {
var sideLength: Double = 0.0
init(sideLength: Double, name: String) {
self.sideLength = sideLength
super.init(name: name)
numberOfSides = 3
}
var perimeter: Double {
get {
return 3.0 * sideLength
}
set {
sideLength = newValue / 3.0
}
}
override func simpleDescription() -> String {
return "An equilateral triangle with sides of length \(sideLength)."
}
}
var triangle = EquilateralTriangle(sideLength: 3.1, name: "a triangle")
print(triangle.perimeter)
triangle.perimeter = 9.9
print(triangle.sideLength)
In the setter for perimeter
, the new value has the implicit name newValue
. You can provide an explicit name in parentheses after set
.
Notice that the initializer for the EquilateralTriangle
class has three different steps:
Setting the value of properties that the subclass declares.
Calling the superclass’s initializer.
Changing the value of properties defined by the superclass. Any additional setup work that uses methods, getters, or setters can also be done at this point.
If you don’t need to compute the property but still need to provide code that is run before and after setting a new value, use willSet
and didSet
. The code you provide is run any time the value changes outside of an initializer. For example, the class below ensures that the side length of its triangle is always the same as the side length of its square.
class TriangleAndSquare {
var triangle: EquilateralTriangle {
willSet {
square.sideLength = newValue.sideLength
}
}
var square: Square {
willSet {
triangle.sideLength = newValue.sideLength
}
}
init(size: Double, name: String) {
square = Square(sideLength: size, name: name)
triangle = EquilateralTriangle(sideLength: size, name: name)
}
}
var triangleAndSquare = TriangleAndSquare(size: 10, name: "another test shape")
print(triangleAndSquare.square.sideLength)
print(triangleAndSquare.triangle.sideLength)
triangleAndSquare.square = Square(sideLength: 50, name: "larger square")
print(triangleAndSquare.triangle.sideLength)
When working with optional values, you can write ?
before operations like methods, properties, and subscripting. If the value before the ?
is nil
, everything after the ?
is ignored and the value of the whole expression is nil
. Otherwise, the optional value is unwrapped, and everything after the ?
acts on the unwrapped value. In both cases, the value of the whole expression is an optional value.
let optionalSquare: Square? = Square(sideLength: 2.5, name: "optional square")
let sideLength = optionalSquare?.sideLength
Enumerations and Structures
Use enum
to create an enumeration. Like classes and all other named types, enumerations can have methods associated with them.
enum Rank: Int {
case ace = 1
case two, three, four, five, six, seven, eight, nine, ten
case jack, queen, king
func simpleDescription() -> String {
switch self {
case .ace:
return "ace"
case .jack:
return "jack"
case .queen:
return "queen"
case .king:
return "king"
default:
return String(self.rawValue)
}
}
}
let ace = Rank.ace
let aceRawValue = ace.rawValue
By default, Swift assigns the raw values starting at zero and incrementing by one each time, but you can change this behavior by explicitly specifying values. In the example above, Ace
is explicitly given a raw value of 1
, and the rest of the raw values are assigned in order. You can also use strings or floating-point numbers as the raw type of an enumeration. Use the rawValue
property to access the raw value of an enumeration case.
Use the init?(rawValue:)
initializer to make an instance of an enumeration from a raw value. It returns either the enumeration case matching the raw value or nil
if there is no matching Rank
.
if let convertedRank = Rank(rawValue: 3) {
let threeDescription = convertedRank.simpleDescription()
}
The case values of an enumeration are actual values, not just another way of writing their raw values. In fact, in cases where there isn’t a meaningful raw value, you don’t have to provide one.
enum Suit {
case spades, hearts, diamonds, clubs
func simpleDescription() -> String {
switch self {
case .spades:
return "spades"
case .hearts:
return "hearts"
case .diamonds:
return "diamonds"
case .clubs:
return "clubs"
}
}
}
let hearts = Suit.hearts
let heartsDescription = hearts.simpleDescription()
Notice the two ways that the hearts
case of the enumeration is referred to above: When assigning a value to the hearts
constant, the enumeration case Suit.hearts
is referred to by its full name because the constant doesn’t have an explicit type specified. Inside the switch, the enumeration case is referred to by the abbreviated form .hearts
because the value of self
is already known to be a suit. You can use the abbreviated form anytime the value’s type is already known.
If an enumeration has raw values, those values are determined as part of the declaration, which means every instance of a particular enumeration case always has the same raw value. Another choice for enumeration cases is to have values associated with the case—these values are determined when you make the instance, and they can be different for each instance of an enumeration case. You can think of the associated values as behaving like stored properties of the enumeration case instance. For example, consider the case of requesting the sunrise and sunset times from a server. The server either responds with the requested information, or it responds with a description of what went wrong.
enum ServerResponse {
case result(String, String)
case failure(String)
}
let success = ServerResponse.result("6:00 am", "8:09 pm")
let failure = ServerResponse.failure("Out of cheese.")
switch success {
case let .result(sunrise, sunset):
print("Sunrise is at \(sunrise) and sunset is at \(sunset).")
case let .failure(message):
print("Failure... \(message)")
}
Notice how the sunrise and sunset times are extracted from the ServerResponse
value as part of matching the value against the switch cases.
Use struct
to create a structure. Structures support many of the same behaviors as classes, including methods and initializers. One of the most important differences between structures and classes is that structures are always copied when they are passed around in your code, but classes are passed by reference.
struct Card {
var rank: Rank
var suit: Suit
func simpleDescription() -> String {
return "The \(rank.simpleDescription()) of \(suit.simpleDescription())"
}
}
let threeOfSpades = Card(rank: .three, suit: .spades)
let threeOfSpadesDescription = threeOfSpades.simpleDescription()
Protocols and Extensions
Use protocol
to declare a protocol.
protocol ExampleProtocol {
var simpleDescription: String { get }
mutating func adjust()
}
Classes, enumerations, and structs can all adopt protocols.
class SimpleClass: ExampleProtocol {
var simpleDescription: String = "A very simple class."
var anotherProperty: Int = 69105
func adjust() {
simpleDescription += " Now 100% adjusted."
}
}
var a = SimpleClass()
a.adjust()
let aDescription = a.simpleDescription
struct SimpleStructure: ExampleProtocol {
var simpleDescription: String = "A simple structure"
mutating func adjust() {
simpleDescription += " (adjusted)"
}
}
var b = SimpleStructure()
b.adjust()
let bDescription = b.simpleDescription
Notice the use of the mutating
keyword in the declaration of SimpleStructure
to mark a method that modifies the structure. The declaration of SimpleClass
doesn’t need any of its methods marked as mutating because methods on a class can always modify the class.
Use extension
to add functionality to an existing type, such as new methods and computed properties. You can use an extension to add protocol conformance to a type that is declared elsewhere, or even to a type that you imported from a library or framework.
extension Int: ExampleProtocol {
var simpleDescription: String {
return "The number \(self)"
}
mutating func adjust() {
self += 42
}
}
print(7.simpleDescription)
You can use a protocol name just like any other named type—for example, to create a collection of objects that have different types but that all conform to a single protocol. When you work with values whose type is a protocol type, methods outside the protocol definition are not available.
let protocolValue: ExampleProtocol = a
print(protocolValue.simpleDescription)
// print(protocolValue.anotherProperty) // Uncomment to see the error
Even though the variable protocolValue
has a runtime type of SimpleClass
, the compiler treats it as the given type of ExampleProtocol
. This means that you can’t accidentally access methods or properties that the class implements in addition to its protocol conformance.
Error Handling
You represent errors using any type that adopts the Error
protocol.
enum PrinterError: Error {
case outOfPaper
case noToner
case onFire
}
Use throw
to throw an error and throws
to mark a function that can throw an error. If you throw an error in a function, the function returns immediately and the code that called the function handles the error.
func send(job: Int, toPrinter printerName: String) throws -> String {
if printerName == "Never Has Toner" {
throw PrinterError.noToner
}
return "Job sent"
}
There are several ways to handle errors. One way is to use do
-catch
. Inside the do
block, you mark code that can throw an error by writing try
in front of it. Inside the catch
block, the error is automatically given the name error
unless you give it a different name.
do {
let printerResponse = try send(job: 1040, toPrinter: "Bi Sheng")
print(printerResponse)
} catch {
print(error)
}
You can provide multiple catch
blocks that handle specific errors. You write a pattern after catch
just as you do after case
in a switch.
do {
let printerResponse = try send(job: 1440, toPrinter: "Gutenberg")
print(printerResponse)
} catch PrinterError.onFire {
print("I'll just put this over here, with the rest of the fire.")
} catch let printerError as PrinterError {
print("Printer error: \(printerError).")
} catch {
print(error)
}
Another way to handle errors is to use try?
to convert the result to an optional. If the function throws an error, the specific error is discarded and the result is nil
. Otherwise, the result is an optional containing the value that the function returned.
let printerSuccess = try? send(job: 1884, toPrinter: "Mergenthaler")
let printerFailure = try? send(job: 1885, toPrinter: "Never Has Toner")
Use defer
to write a block of code that is executed after all other code in the function, just before the function returns. The code is executed regardless of whether the function throws an error. You can use defer
to write setup and cleanup code next to each other, even though they need to be executed at different times.
var fridgeIsOpen = false
let fridgeContent = ["milk", "eggs", "leftovers"]
func fridgeContains(_ food: String) -> Bool {
fridgeIsOpen = true
defer {
fridgeIsOpen = false
}
let result = fridgeContent.contains(food)
return result
}
fridgeContains("banana")
print(fridgeIsOpen)
Generics
Write a name inside angle brackets to make a generic function or type.
func makeArray<Item>(repeating item: Item, numberOfTimes: Int) -> [Item] {
var result = [Item]()
for _ in 0..<numberOfTimes {
result.append(item)
}
return result
}
makeArray(repeating: "knock", numberOfTimes: 4)
You can make generic forms of functions and methods, as well as classes, enumerations, and structures.
// Reimplement the Swift standard library's optional type
enum OptionalValue<Wrapped> {
case none
case some(Wrapped)
}
var possibleInteger: OptionalValue<Int> = .none
possibleInteger = .some(100)
Use where
right before the body to specify a list of requirements—for example, to require the type to implement a protocol, to require two types to be the same, or to require a class to have a particular superclass.
func anyCommonElements<T: Sequence, U: Sequence>(_ lhs: T, _ rhs: U) -> Bool
where T.Iterator.Element: Equatable, T.Iterator.Element == U.Iterator.Element {
for lhsItem in lhs {
for rhsItem in rhs {
if lhsItem == rhsItem {
return true
}
}
}
return false
}
anyCommonElements([1, 2, 3], [3])
Writing <T: Equatable>
is the same as writing <T> ... where T: Equatable
.
Copyright © 2017 Apple Inc. All rights reserved. Terms of Use | Privacy Policy | Updated: 2017-09-19


Clovis Tree Care Services
As the premiere tree care company serving the Fresno and Clovis area we offer many services to handle all of your tree care needs. Below is just a sample of some of the service Clovis Tree Care offers.
Tree Pruning
Clovis Tree Care provides elite tree trimming and pruning services throughout Fresno, Clovis, and the central valley. Tree Service or tree pruning, is the most common tree maintenance procedure. It takes a highly trained and skilled tree professional to understand which limbs to remove, and the quantity of limbs to safely remove without putting the trees health at risk. At Clovis Tree Care the health of your trees is our staffs number one priority and we do all that we can to insure that your tree stays healthy and beautiful.
Tree Removal
We are tree removal professionals, Clovis Tree Care is qualified to handle any size of tree removal. Our knowledgeable staff is here to help make sure that your tree is removed safely and without damage to your property. Not only do we have the knowledge, but we have the equipment necessary to tackle any type of tree removal.
Stump Removal
Whether you are having a tree removed from your property or you just have an old stump on your property in need of grinding, Clovis Tree Care is here to help. We have the cutting edge in stump grinders and can handle stumps of any size.
Tree Selection & Planting
We are not only in the business of removing trees, but we truly believe that trees are the answer and a world with more trees is a better place. Clovis Tree Care is here to help you find the right tree that will thrive and plant it in the proper place.
Speciality Service
Clovis Tree Care also offers many specialty services, here is a short list of some of what we offer:
- Root pruning
- Root barrier installation
- Soil testing
- Fertilization programs
- and Fruit tree care.


{% extends "webclient/_logged_base.html" %} {% set title="Lab - " + experiment['display_name'] %} {% import "webclient/_upload.html" as upload %} {% block styles %} {{ super() }} {{ upload.styles() }} {% endblock %} {% block body %} {{ super() }} {% if not federated_mode %}
{% endif %}{{ gettext("The experiment is taking longer than expected to load. If this message is shown for a long time, there might be a problem with the experiment or with the web browser you are using. Please contact the administrator.") }}
{{ gettext("The experiment is taking longer than expected to load. If this message is shown for a long time, there might be a problem with the experiment or with the web browser you are using. Please contact the administrator.") }}
{{ "DESCRIPTION"|translate }}: {{ experiment_info.experiment.description }}


1. Geographic coordinate systems
In order to allow interoperability between SVG content generators and user agents dealing with maps encoded in SVG, the use of a common metadata definition for describing the coordinate system used to generate SVG documents is encouraged.
Such metadata must be added under the metadata element of the topmost svg element describing the map, consisting of an RDF description of the Coordinate Reference System definition used to generate the SVG map [RDF-PRIMER]. Note that the presence of this metadata does not affect the rendering of the SVG in any way; it merely provides added semantic value for applications that make use of combined maps.
The definition must be conformant to the XML grammar described in GML 3.2.1, an OpenGIS Standard for encoding common CRS data types in XML [GML]. In order to correctly map the 2-dimensional data used by SVG, the CRS must be of subtype ProjectedCRS or Geographic2dCRS. The first axis of the described CRS maps the SVG x-axis and the second axis maps the SVG y-axis.
The main purpose of such metadata is to indicate to the user agent that two or more SVG documents can be overlayed or merged into a single document. Obviously, if two maps reference the same Coordinate Reference System definition and have the same SVG transform property value then they can be overlayed without reprojecting the data. If the maps reference different Coordinate Reference Systems and/or have different SVG transform property values, then a specialized cartographic user agent may choose to transform the coordinate data to overlay the data. However, typical SVG user agents are not required to perform these types of transformations, or even recognize the metadata. It is described in this specification so that the connection between geographic coordinate systems and the SVG coordinate system is clear.
2. The 'svg:transform' attribute
Attribute definition:
- svg:transform = <transform-list> | none
-
- <transform-list>
-
Specifies the affine transformation that has been applied to the map data. The syntax is identical to that described for the transform property.
- none
-
Specifies that no supplemental affine transformation has been applied to the map data. Using this value has the same meaning as specifying the identity matrix, which in turn is just the same as not specifying the svg:transform the attribute at all.
Animatable: no.
This attribute describes an optional additional affine transformation that may have been applied during this mapping. This attribute may be added to the OpenGIS CoordinateReferenceSystem element. Note that, unlike the transform property, it does not indicate that a transformation is to be applied to the data within the file. Instead, it simply describes the transformation that was already applied to the data when being encoded in SVG.
There are three typical uses for the svg:transform global attribute. These are described below and used in the examples.
- Most ProjectedCRS have the north direction represented by positive values of the second axis and conversely SVG has a y-down coordinate system. That’s why, in order to follow the usual way to represent a map with the north at its top, it is recommended for that kind of ProjectedCRS to use the svg:transform global attribute with a scale(1, -1) value as in the third example below.
- Most Geographic2dCRS have the latitude as their first axis rather than the longitude, which means that the south-north axis would be represented by the x-axis in SVG instead of the usual y-axis. That’s why, in order to follow the usual way to represent a map with the north at its top, it is recommended for that kind of Geographic2dCRS to use the svg:transform' global attribute with a rotate(-90) value as in the first example (while also adding the scale(1, -1) as for ProjectedCRS).
- In addition, when converting for profiles which place restrictions on precision of real number values, it may be useful to add an additional scaling factor to retain good precision for a specific area. When generating an SVG document from WGS84 geographic coordinates (EPGS 4326), we recommend the use of an additional 100 times scaling factor corresponding to an svg:transform global attribute with a rotate(-90) scale(100) value (shown in the second example). Different scaling values may be required depending on the particular CRS.
Below is a simple example of the coordinate metadata, which describes the coordinate system used by the document via a URI.
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg"
width="100" height="100" viewBox="0 0 1000 1000">
<desc>An example that references coordinate data.</desc>
<metadata>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:crs="http://www.ogc.org/crs"
xmlns:svg="http://www.w3.org/2000/svg">
<rdf:Description rdf:about="">
<!-- The Coordinate Reference System is described
through a URI. -->
<crs:CoordinateReferenceSystem
svg:transform="rotate(-90)"
rdf:resource="http://www.example.org/srs/epsg.xml#4326"/>
</rdf:Description>
</rdf:RDF>
</metadata>
<!-- The actual map content -->
</svg>
The second example uses a well-known identifier to describe the coordinate system. Note that the coordinates used in the document have had the supplied transform applied.
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg"
width="100" height="100" viewBox="0 0 1000 1000">
<desc>Example using a well known coordinate system.</desc>
<metadata>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:crs="http://www.ogc.org/crs"
xmlns:svg="http://www.w3.org/2000/svg">
<rdf:Description rdf:about="">
<!-- In case of a well-known Coordinate Reference System
an 'Identifier' is enough to describe the CRS -->
<crs:CoordinateReferenceSystem svg:transform="rotate(-90) scale(100, 100)">
<crs:Identifier>
<crs:code>4326</crs:code>
<crs:codeSpace>EPSG</crs:codeSpace>
<crs:edition>5.2</crs:edition>
</crs:Identifier>
</crs:CoordinateReferenceSystem>
</rdf:Description>
</rdf:RDF>
</metadata>
<!-- The actual map content -->
</svg>
The third example defines the coordinate system completely within the SVG document.
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg"
width="100" height="100" viewBox="0 0 1000 1000">
<desc>Coordinate metadata defined within the SVG document</desc>
<metadata>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:crs="http://www.ogc.org/crs"
xmlns:svg="http://www.w3.org/2000/svg">
<rdf:Description rdf:about="">
<!-- For other CRS it should be entirely defined -->
<crs:CoordinateReferenceSystem svg:transform="scale(1,-1)">
<crs:NameSet>
<crs:name>Mercator projection of WGS84</crs:name>
</crs:NameSet>
<crs:ProjectedCRS>
<!-- The actual definition of the CRS -->
<crs:CartesianCoordinateSystem>
<crs:dimension>2</crs:dimension>
<crs:CoordinateAxis>
<crs:axisDirection>north</crs:axisDirection>
<crs:AngularUnit>
<crs:Identifier>
<crs:code>9108</crs:code>
<crs:codeSpace>EPSG</crs:codeSpace>
<crs:edition>5.2</crs:edition>
</crs:Identifier>
</crs:AngularUnit>
</crs:CoordinateAxis>
<crs:CoordinateAxis>
<crs:axisDirection>east</crs:axisDirection>
<crs:AngularUnit>
<crs:Identifier>
<crs:code>9108</crs:code>
<crs:codeSpace>EPSG</crs:codeSpace>
<crs:edition>5.2</crs:edition>
</crs:Identifier>
</crs:AngularUnit>
</crs:CoordinateAxis>
</crs:CartesianCoordinateSystem>
<crs:CoordinateReferenceSystem>
<!-- the reference system of that projected system is
WGS84 which is EPSG 4326 in EPSG codeSpace -->
<crs:NameSet>
<crs:name>WGS 84</crs:name>
</crs:NameSet>
<crs:Identifier>
<crs:code>4326</crs:code>
<crs:codeSpace>EPSG</crs:codeSpace>
<crs:edition>5.2</crs:edition>
</crs:Identifier>
</crs:CoordinateReferenceSystem>
<crs:CoordinateTransformationDefinition>
<crs:sourceDimensions>2</crs:sourceDimensions>
<crs:targetDimensions>2</crs:targetDimensions>
<crs:ParameterizedTransformation>
<crs:TransformationMethod>
<!-- the projection is a Mercator projection which is
EPSG 9805 in EPSG codeSpace -->
<crs:NameSet>
<crs:name>Mercator</crs:name>
</crs:NameSet>
<crs:Identifier>
<crs:code>9805</crs:code>
<crs:codeSpace>EPSG</crs:codeSpace>
<crs:edition>5.2</crs:edition>
</crs:Identifier>
<crs:description>Mercator (2SP)</crs:description>
</crs:TransformationMethod>
<crs:Parameter>
<crs:NameSet>
<crs:name>Latitude of 1st standart parallel</crs:name>
</crs:NameSet>
<crs:Identifier>
<crs:code>8823</crs:code>
<crs:codeSpace>EPSG</crs:codeSpace>
<crs:edition>5.2</crs:edition>
</crs:Identifier>
<crs:value>0</crs:value>
</crs:Parameter>
<crs:Parameter>
<crs:NameSet>
<crs:name>Longitude of natural origin</crs:name>
</crs:NameSet>
<crs:Identifier>
<crs:code>8802</crs:code>
<crs:codeSpace>EPSG</crs:codeSpace>
<crs:edition>5.2</crs:edition>
</crs:Identifier>
<crs:value>0</crs:value>
</crs:Parameter>
<crs:Parameter>
<crs:NameSet>
<crs:name>False Easting</crs:name>
</crs:NameSet>
<crs:Identifier>
<crs:code>8806</crs:code>
<crs:codeSpace>EPSG</crs:codeSpace>
<crs:edition>5.2</crs:edition>
</crs:Identifier>
<crs:value>0</crs:value>
</crs:Parameter>
<crs:Parameter>
<crs:NameSet>
<crs:name>False Northing</crs:name>
</crs:NameSet>
<crs:Identifier>
<crs:code>8807</crs:code>
<crs:codeSpace>EPSG</crs:codeSpace>
<crs:edition>5.2</crs:edition>
</crs:Identifier>
<crs:value>0</crs:value>
</crs:Parameter>
</crs:ParameterizedTransformation>
</crs:CoordinateTransformationDefinition>
</crs:ProjectedCRS>
</crs:CoordinateReferenceSystem>
</rdf:Description>
</rdf:RDF>
</metadata>
<!-- the actual map content -->
</svg>


| 036:029 Khan | : |
It was but one Saihah (shout, etc.) and lo! They (all) were silent (dead-destroyed). |
| 036:029 Maulana | : |
It was naught but a single cry, and lo! they were still. |
| 036:029 Pickthal | : |
It was but one Shout, and lo! they were extinct. |
| 036:029 Rashad | : |
All it took was one blow, whereupon they were stilled. |
| 036:029 Sarwar | : |
It was only a single blast which made them extinct. |
| 036:029 Shakir | : |
It was naught but a single cry, and lo! they were still. |
| 036:029 Sherali | : |
It was but a single blast and lo ! they were extinct. |
| 036:029 Yusufali | : |
It was no more than a single mighty Blast, and behold! they were (like ashes) quenched and silent. |
Concepts/Themes Covered: العلوم والفنون > الحقائق العلمية و الإشاة إلى وقائع أيدتهاالإكتشافات العلمية > الإشارة إلى الذبذبات الصوتية Science and Art> The Scientific Facts and the Indication to Facts which have been supported by the Scientific Discoveries>Indication to the Vocal Vibration
This tool uses eight English parallel translations for the Holy Quran imported from Mr. Clay Smith. You can also visit Qurany Concepts for browsing the Quran themes or topics. If you want to search the Holy Quran for keywords, please visit Qurany Keywords.


3 references to InvocationInfo
System.Management.Automation (3)
engine\MshCommandRuntime.cs (3)
486
if (record.
InvocationInfo
== null)
580
if (record.
InvocationInfo
== null)
674
if (record.
InvocationInfo
== null)


%inherit file='/base/index.html' /> <%def name="title()">Cronus Agent Memory Profiler%def> <%def name="head()">
| URL | Heapy Function | Descriptions |
| /agent/memoryhelp | Tutorial | Reference from: How to use guppy/heapy for tracking down memory usage |
| /agent/memory | Basic: h = hp.heap() | Categorize by class |
| /agent/memory/{index} | Basic Details: h[index].byrcs | Go to that index by h class; get the details by referrers classifiers set (rcs). |
| /agent/memory/{index}/{index2} | Basic More Details: h[index].byrcs[index2].byvia | Go to that index by h; get list of objects referring a given referrers classifiers set (rcs). |
| /agent/memory1 | Advance: h.byrcs | For every object, find all its referrers: Group together all the objects with the same referrers classifiers set (rcs). |
| /agent/memory1/{index} | Advance Details: h.byrcs[index].byclodo | Go to that index by byrcs; get the details by clodo ("Clodo" for "Class or dict owner") |
| /agent/memory1/{index}/{index2} | Advance More Details: h[index].byclodo[index2].byvia | Go to that index by h; get list of objects referring a given Clodo. ("Clodo" for "Class or dict owner") |
${c.memInfo[0]}


Bio:{{users.bio}}
Public Repositories: {{users.public_repos}}
Followers: {{users.followers}}
Following: {{users.following}}
Account Created on: {{users.created_at|date}}


This category contains size and layout for a user-defined envelope size.
height = <number>
This field holds the envelope's height in points.
layout = <PageLayout value>
This field holds the envelope's layout information.
name = <string>
This field holds the envelope's full name.
width = <number>
This field holds the envelope's width in points.


DSpace REST Query Client
Collection Filter
Filters
URL to current search
Metadata Field Queries
Limit/Paginate Queries
Limit:
Offset:
Additional data to return
Run Item Query
Create CSV


|
ActionComponents
04.05.00
Customizable UI and time-saving tools for Android development with Xamarin and Visual Studio.
|
Helper extensions when working with Android drawing Canvas More...
Static Public Member Functions | |
| static int | TextHeight (string text, int width, int maxlines, Paint textPaint) |
| Calculates the height of a block of text to be drawn in a canvas given the wrapping width and the maximum number of lines to draw More... | |
| static void | DrawTextBoxInCanvas (Canvas canvas, string text, int x, int y, int width, int maxlines, Paint textPaint) |
| Draws a block of text at the given x,y coords in a canvas wrapping the text on the given width and stopping at the mx number of lines specified More... | |
| static int | MeasureTextBlock (string text, int width, int maxlines, Paint textPaint) |
| Measures the height of the given text drawn with the given style properties, wrapping the text at the given width and stopping after a maximum number of lines. More... | |
| static void | DrawTextBlockInCanvas (Canvas canvas, string text, int x, int y, int width, int maxlines, Paint textPaint) |
| Draws the given text at the given x,y coordinates in the given style in the given canvas. The text will be wrapping at the given width and will not exceed the given number of lines. The lines of text will be broken on word bounderies and newline or carriage returns can be included to force a line break. More... | |
| static void | DrawTextBlockInCanvas (Canvas canvas, string text, CGRect rect, Paint textPaint, TextBlockAlignment align) |
| Draws the given text at the given x,y coordinates in the given style in the given canvas. The text will be wrapping at the given width and will not exceed the given number of lines. The lines of text will be broken on word bounderies and newline or carriage returns can be included to force a line break. More... | |
| static void | DrawTextBlockInCanvas (Canvas canvas, string text, int x, int y, int width, int maxlines, Paint textPaint, TextBlockAlignment align) |
| Draws the given text at the given x,y coordinates in the given style in the given canvas. The text will be wrapping at the given width and will not exceed the given number of lines. The lines of text will be broken on word bounderies and newline or carriage returns can be included to force a line break. More... | |
| static void | DrawTextAligned (Canvas canvas, string text, int x, int y, int width, int height, Paint textPaint, TextBlockAlignment alignHorizontal, TextBlockAlignment alignVertical) |
| Draws a single line of text aligned horizontaly and vertically inside the rectangle specified by the x,y and given width, height. More... | |
| static void | DrawTextAligned (Canvas canvas, string text, CGRect rect, Paint textPaint, TextBlockAlignment alignHorizontal, TextBlockAlignment alignVertical) |
| Draws a single line of text aligned horizontaly and vertically inside the rectangle specified by the x,y and given width, height. More... | |
| static void | DrawTextAligned (Canvas canvas, string text, int x, int y, int width, int height, Paint textPaint, TextBlockAlignment alignHorizontal) |
| Draws a single line of text aligned horizontally inside the rectangle specified by the x, y and the given width. More... | |
| static void | DrawTextAligned (Canvas canvas, string text, CGRect rect, Paint textPaint, TextBlockAlignment alignHorizontal) |
| Draws a single line of text aligned horizontally inside the rectangle specified by the x, y and the given width. More... | |
Helper extensions when working with Android drawing Canvas
|
static |
Draws a single line of text aligned horizontaly and vertically inside the rectangle specified by the x,y and given width, height.
| canvas | Canvas. |
| text | Text. |
| x | The x coordinate. |
| y | The y coordinate. |
| width | Width. |
| height | Height. |
| textPaint | Text paint. |
| alignHorizontal | Align horizontal. |
| alignVertical | Align vertical. |
|
static |
Draws a single line of text aligned horizontaly and vertically inside the rectangle specified by the x,y and given width, height.
| canvas | Canvas. |
| text | Text. |
| rect | Rect. |
| textPaint | Text paint. |
| alignHorizontal | Align horizontal. |
| alignVertical | Align vertical. |
|
static |
Draws a single line of text aligned horizontally inside the rectangle specified by the x, y and the given width.
| canvas | Canvas. |
| text | Text. |
| x | The x coordinate. |
| y | The y coordinate. |
| width | Width. |
| height | Height. |
| textPaint | Text paint. |
| alignHorizontal | Align horizontal. |
|
static |
Draws a single line of text aligned horizontally inside the rectangle specified by the x, y and the given width.
| canvas | Canvas. |
| text | Text. |
| rect | Rect. |
| textPaint | Text paint. |
| alignHorizontal | Align horizontal. |
|
static |
Draws the given text at the given x,y coordinates in the given style in the given canvas. The text will be wrapping at the given width and will not exceed the given number of lines. The lines of text will be broken on word bounderies and newline or carriage returns can be included to force a line break.
| canvas | Canvas. |
| text | Text. |
| x | The x coordinate. |
| y | The y coordinate. |
| width | Width. |
| maxlines | Maxlines. |
| textPaint | Text paint. |
This routine breaks on words
|
static |
Draws the given text at the given x,y coordinates in the given style in the given canvas. The text will be wrapping at the given width and will not exceed the given number of lines. The lines of text will be broken on word bounderies and newline or carriage returns can be included to force a line break.
| canvas | Canvas. |
| text | Text. |
| rect | Rect. |
| textPaint | Text paint. |
| align | Align. |
|
static |
Draws the given text at the given x,y coordinates in the given style in the given canvas. The text will be wrapping at the given width and will not exceed the given number of lines. The lines of text will be broken on word bounderies and newline or carriage returns can be included to force a line break.
| canvas | Canvas. |
| text | Text. |
| x | The x coordinate. |
| y | The y coordinate. |
| width | Width. |
| maxlines | Maxlines. |
| textPaint | Text paint. |
| align | The text alignment |
This routine breaks on words
|
static |
Draws a block of text at the given x,y coords in a canvas wrapping the text on the given width and stopping at the mx number of lines specified
| canvas | Canvas. |
| text | Text. |
| x | The x coordinate. |
| y | The y coordinate. |
| width | Width. |
| maxlines | Maxlines. |
| textPaint | Text paint. |
This routine breaks on character not words
|
static |
Measures the height of the given text drawn with the given style properties, wrapping the text at the given width and stopping after a maximum number of lines.
| text | Text. |
| width | Width. |
| maxlines | Maxlines. |
| textPaint | Text paint. |
This routine breaks on words
|
static |
Calculates the height of a block of text to be drawn in a canvas given the wrapping width and the maximum number of lines to draw
| text | Text. |
| width | Width. |
| maxlines | Maxlines. |
| textPaint | Text paint. |
This routines breaks on character not words


19 February 2004
Situation (human) in Viet Nam
Further details are now available for Viet Nam’s 22nd case of H5N1 infection, which was confirmed yesterday. The case was a three-year-old boy from Lam Dong Province. His death, announced yesterday, is the country’s 15th fatality.


Privacy Policy
What we collect
- Anonymous information about your phone such as make, model & version of Android.
What we don’t collect
- Your name
- Your email address
- Any Access Tokens associated with your account
- Any files from your Google Drive - Files are uploaded straight from your device and do not pass through any of our servers.
Security
Security is an issue we take very seriously. All connections between this app and the Google Drive API are over https.
Changes to Privacy Policy
We may change this privacy policy at any time, however you will be notifed of any changes before you can continue using the app.
Feel free to get in touch if you have any queries about our privacy policy.
@darrenmowat |
dmowat91@gmail.com


JavaScript is disabled on your browser.
Overview
Package
Class
Use
Tree
Deprecated
Index
Help
Prev
Next
Frames
No Frames
All Classes
Hierarchy For All Packages
Package Hierarchies:
org.apache.zookeeper
,
org.apache.zookeeper.client
,
org.apache.zookeeper.data
,
org.apache.zookeeper.server
,
org.apache.zookeeper.server.quorum
,
org.apache.zookeeper.server.upgrade
Class Hierarchy
java.lang.
Object
org.apache.zookeeper.data.
ACL
(implements org.apache.jute.Record)
org.apache.zookeeper.client.
FourLetterWordMain
org.apache.zookeeper.data.
Id
(implements org.apache.jute.Record)
org.apache.zookeeper.server.
LogFormatter
org.apache.zookeeper.server.
PurgeTxnLog
org.apache.zookeeper.server.quorum.
QuorumPeerMain
org.apache.zookeeper.
ServerAdminClient
org.apache.zookeeper.server.
SnapshotFormatter
org.apache.zookeeper.data.
Stat
(implements org.apache.jute.Record)
org.apache.zookeeper.data.
StatPersisted
(implements org.apache.jute.Record)
org.apache.zookeeper.data.
StatPersistedV1
(implements org.apache.jute.Record)
java.lang.
Throwable
(implements java.io.
Serializable
)
java.lang.
Exception
org.apache.zookeeper.
KeeperException
org.apache.zookeeper.
KeeperException.APIErrorException
org.apache.zookeeper.
KeeperException.AuthFailedException
org.apache.zookeeper.
KeeperException.BadArgumentsException
org.apache.zookeeper.
KeeperException.BadVersionException
org.apache.zookeeper.
KeeperException.ConnectionLossException
org.apache.zookeeper.
KeeperException.DataInconsistencyException
org.apache.zookeeper.
KeeperException.InvalidACLException
org.apache.zookeeper.
KeeperException.InvalidCallbackException
org.apache.zookeeper.
KeeperException.MarshallingErrorException
org.apache.zookeeper.
KeeperException.NoAuthException
org.apache.zookeeper.
KeeperException.NoChildrenForEphemeralsException
org.apache.zookeeper.
KeeperException.NodeExistsException
org.apache.zookeeper.
KeeperException.NoNodeException
org.apache.zookeeper.
KeeperException.NotEmptyException
org.apache.zookeeper.
KeeperException.NotReadOnlyException
org.apache.zookeeper.
KeeperException.OperationTimeoutException
org.apache.zookeeper.
KeeperException.RuntimeInconsistencyException
org.apache.zookeeper.
KeeperException.SessionExpiredException
org.apache.zookeeper.
KeeperException.SessionMovedException
org.apache.zookeeper.
KeeperException.SystemErrorException
org.apache.zookeeper.
KeeperException.UnimplementedException
org.apache.zookeeper.server.upgrade.
UpgradeMain
org.apache.zookeeper.
WatchedEvent
org.apache.zookeeper.
ZooDefs
org.apache.zookeeper.
ZooKeeper
org.apache.zookeeper.
ZooKeeperMain
org.apache.zookeeper.server.
ZooKeeperServerMain
Interface Hierarchy
org.apache.zookeeper.
AsyncCallback
org.apache.zookeeper.
AsyncCallback.ACLCallback
org.apache.zookeeper.
AsyncCallback.Children2Callback
org.apache.zookeeper.
AsyncCallback.ChildrenCallback
org.apache.zookeeper.
AsyncCallback.DataCallback
org.apache.zookeeper.
AsyncCallback.StatCallback
org.apache.zookeeper.
AsyncCallback.StringCallback
org.apache.zookeeper.
AsyncCallback.VoidCallback
org.apache.zookeeper.
KeeperException.CodeDeprecated
org.apache.zookeeper.
Watcher
org.apache.zookeeper.
Watcher.Event
org.apache.zookeeper.
ZooDefs.Ids
org.apache.zookeeper.
ZooDefs.OpCode
org.apache.zookeeper.
ZooDefs.Perms
Enum Hierarchy
java.lang.
Object
java.lang.
Enum
<E> (implements java.lang.
Comparable
<T>, java.io.
Serializable
)
org.apache.zookeeper.
CreateMode
org.apache.zookeeper.
KeeperException.Code
(implements org.apache.zookeeper.
KeeperException.CodeDeprecated
)
org.apache.zookeeper.
Watcher.Event.KeeperState
org.apache.zookeeper.
Watcher.Event.EventType
org.apache.zookeeper.
ZooKeeper.States
Overview
Package
Class
Use
Tree
Deprecated
Index
Help
Prev
Next
Frames
No Frames
All Classes
Copyright © 2014 The Apache Software Foundation


Borderline 'Party in the Park' honors victims, provides healing for grieving community
THOUSAND OAKS, Calif. (KABC) -- The anniversary of the Borderline shooting was marked Saturday by a celebration of life in honor of the 12 people killed one year ago.
The "Borderline Strong Party in the Park" was hosted Saturday by the Borderline Bar and Grill.
Organizers encouraged everyone to attend the inaugural event, which includes line dancing, live music, food trucks and a beer garden.
RELATED: Massive spontaneous line dance breaks out at Borderline
The celebration, which starts at 11 a.m. and runs until 5 p.m., is being held at Conejo Creek Park North, located at 1379 E Janss Rd. in Thousand Oaks.
Tickets are $5.


Legend was removed in Handsontable 0.7.0
Instead, please use
cell renderers
. Also see
conditional formatting
tips


--- layout: default title: Rant category: Rant permalink: category/rant/ --- {% for post in site.categories.Rant %}


{% extends "public/components/base.html" %} {% load static %} {% block title %}Open States Bulk Data{% endblock %} {% block og_title %}Open States Bulk Data{% endblock %} {% block description %}Download bulk data from Open States{% endblock %} {% block content %}
Open States makes almost all of our data available in bulk. Unless otherwise noted data is provided under a public domain dedication but attribution is greatly appreciated and very helpful.
If you're looking for details on our API, visit: v2 GraphQL API.
If you notice any data irregularities, issue reports are very useful: Report an Issue
We depend upon donations to keep this work alive. Also consider giving us a testimonial, as those can help us obtain funding and always make our day.
Structured data files for every legislator we've tracked, stored in version control.
CSV files representing all bills & votes, available on a per-session basis. In beta as of February 2020.
Polygons representing the state legislative districts.
Nearly-complete database dump of Open States' public data.
Data from Open States' old services, prior to 2019.


This page displays an alphabetical list of all software projects on {{ SITE_NAME }}. To search content on {{ SITE_NAME }}, visit the search page. Enter the search terms, add a filter for resource type if needed, and select how you would like the results to be ordered (for example, by relevance, by date, or by title).
{% if is_lightwave_supported %}Many of the time series datasets on {{ SITE_NAME }} (for example, ECGs) are shared in waveform-database (WFDB) compatible file formats. For more information on these formats, see the WFDB Applications Guide. WFDB-formatted datasets can also be viewed online with LightWAVE.
{% endif %}


MY Spectre around me night and day Like a wild beast guards my way; My Emanation far within Weeps incessantly for my sin.
''He scents thy footsteps in the snow Wheresoever thou dost go, Thro’ the wintry hail and rain. When wilt thou return again?''
''He scents thy footsteps in the snow Wheresoever thou dost go, Thro’ the wintry hail and rain. When wilt thou return again?''


PRACTICAL MAGIC (Warner Bros.) Starring: Sandra Bullock, Nicole Kidman, Dianne Wiest, Stockard Channing, Aidan Quinn, Goran Visjnic. Screenplay: Robin Swicord, Akiva Goldsman and Adam Brooks, based on the novel by Alice Hoffman. Producer: Denise DiNovi. Director: Griffin Dunne. MPAA Rating: PG-13 (profanity, adult themes, violence) Running Time: 104 minutes. Reviewed by Scott Renshaw.
PRACTICAL MAGIC cast a sort of spell over me, but I don't think it's the kind a film-maker might have intended. Rather than enchantment, it produced a Spell of Befuddlement. It's not so much a movie as it is a big bubbling cauldron of confusion into which a mess of ingredients have been tossed. Among the items included in this concoction:
1) A cup of THELMA & LOUISE. The story focuses on a pair of sisters (genetic, not just philosophical) named Sally (Sandra Bullock) and Gillian (Nicole Kidman) Owens, who come from a long line of witchcraft practitioners including the maiden aunts (Stockard Channing and Dianne Wiest) who raised them. Part of that legacy involves a curse on the men in their lives, leading Sally into a tragic longing for true love and Gillian to a pursuit of loveless affairs. The whispers of THELMA & LOUISE come when the two sisters kill an abusive lout (Goran Visnjic) while his is in the process of assaulting Gillian. The women then try to hide from the repercussions of their deed, even as good-hearted cop Gary Hallet (Aidan Quinn) tries to help them. It's an obvious hook for a female empowerment fable, one that plays female viewers for every whoop and cheer it can wrest out of them, but it doesn't quite mix with other ingredients like...
2) A dash of THE FRIGHTENERS.   The catch is that his restless soul is still hanging about the sisters' picturesque New England home, appearing occasionally to inhabit Gillian's body or attempt to hear out Gary's heart. Though the scenes of supernatural nastiness are sporadic, they're nonetheless jarring. As the Owens women attempt a climactic exorcism of sorts -- joined by a bunch of townswomen who had until that point loathed the sisters, but decided to help out because, darn it, that's just what women do for one another -- you may wonder who took your saucy romantic comedy and dipped it in THE WITCHES OF EASTWICK. That's assuming you still care by that point, given...
3) A smidgen of HOPE FLOATS. Sandra Bullock now appears to be in her pensive, sorrowful single mother phase, and it doesn't suit her. In the midst of the magical hijinks surrounding her, Bullock plays her mourning far too straight, as though the film were a deeply observational relationsihp drama. She should have taken a hint from her co-stars, all of whom appear to be having a heck of a lot more fun. Kidman is flashy, fiery and sexy as the naughty sister, playing town tramp with plenty of gusto; Channing and Wiest are both matronly and devilish as the eccentric aunts. Bullock, meanwhile, puts on her horn-rims from LOVE POTION NO. 9 and frumps about when she should be providing the stable, sympathetic figure the story needs. And it could have been a strange delight thanks to...
4) The eye of Griffin Dunne. Actor-turned-director Dunne has a unique, dark comic sensibility behind the camera, evidenced by his ability to turn a tale of two obsessive stalkers (ADDICTED TO LOVE) into an entertaining romantic comedy. Here he offers a few of his cock-eyed touches, including a midnight tequila party and Gillian's surreal time-lapsed drive home, but there's no focus to the story. It's a comedy that gets too serious, a crowd-pleaser that turns too bizarre, and a romantic love story that suddenly turns into a sisterly love story. It's certainly never a bore, not with Kidman throwing off sparks and so many shifts in tone. It also never comes together as anything more than the sum of its disparate parts. I'm not sure what the recipe for PRACTICAL MAGIC was supposed to create, but it adds up to a casserole of clashing flavors, a supernatural stew with the power to create a fog of ambivalence.
On the Renshaw scale of 0 to 10 witchy poohs: 5.
Visit Scott Renshaw's MoviePage http://www.inconnect.com/~renshaw/ *** Subscribe to receive new reviews directly by email! See the MoviePage for details, or reply to this message with subject line "Subscribe".
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews