We're sorry but 我愛玩學校 doesn't work properly without JavaScript enabled. Please enable it to continue.


Bike Walnut Creek is a non-profit social organization founded in 2012 as a local working group of Bike East Bay.
Our vision is to create a comfortable and safe environment for bicyclists of all ages and abilities.
We do this by providing free services to bicyclists and advocating the city to create usable spaces for bicyclists and pedestrians.
Becoming a member is the best way to support us.
Twice a year our amazing volunteers count bicyclists and pedestrians on city streets. The most recent bike counts for 42 locations over the last 5 years are displayed in the map below. The larger the circle, the more bicyclists counted. The information collected tells us important information such as where to find the majority of bicyclists (on trails) and the gender distribution of bicyclists (data not shown).


Login
Sentimeter
The application that facilitates sentiment analysis of conversations involving multiple people
Begin


Tech Summit Conference
WHEN
April 30, 2020
WHERE
Andheri, Mumbai
Why Tech Summit Conference?
It’s time for an evolution. Senior marketing executives are truly focused on one thing: technology and its effective use to create, manage, deliver, and scale enterprise content and marketing. Tech Summit wants to keep pace with industry leaders and push our entire community forward.
Who should attend?
VPs, senior directors and directors in marketing, digital marketing, marketing innovation, marketing technology, demand generation, marketing operations, customer advocacy, customer experience, and ecommerce, as well as CMOs, CDOs, CTOs, CCOs, and anyone else working at the convergence point of content.
What will be answered?
The biggest questions you have: How do we ensure our business is using or preparing for the right content and marketing technology innovations? How do we fill our customers’ needs for epic experiences? How do we use content and technology to help us in the ever-changing marketing landscape? How do we sort through the thousands of opportunities available to us?


Build Cop¶
Overview¶
The Drake build cop monitors continuous, nightly, and weekly production continuous integration failures in the RobotLocomotion/drake GitHub repo.
The build cop will rotate on a weekly basis. The schedule is maintained on the RobotLocomotion/drake-ci wiki.
Process¶
The build cop is expected to be on duty during normal business hours Eastern Time, approximately 9am to 5pm on weekdays, holidays excepted. Developers are encouraged, but not required, to merge pull requests during times when the build cop is on duty. Nightly and weekly build failures will be addressed the following weekday morning.
When a CI build failure occurs, the build cop will be notified by email.
Notifications are sent to<EMAIL_ADDRESS>and
<EMAIL_ADDRESS>. To receive these notifications,
subscribe to the drake-alerts
Google Group at TRI or the
drake-developers
Google Group at Kitware. The build cop will triage the
failure by identifying the recent commits or other problem that caused the CI
build to fail.
In the case of an issue with the CI infrastructure, Kitware will be responsible for fixing the issue.
In the case of an issue with recent commits, the build cop will contact the authors of the commits and prepare a new pull request that reverts those commits. If the authors are not responsive within 15 minutes, or are unable to fix the failure within 60 minutes, the build cop will merge the pull request to revert the commits and verify that the continuous builds triggered by that merge pass.
Use the DrakeDevelopers Slack channel #buildcop to discuss build issues with your partner build cop and other Drake contributors.
At the end of each rotation, the build cop should complete the build cop review and retrospective, and should notify the next build cop on the DrakeDevelopers Slack channel #buildcop.
Revert Template¶
When creating a revert PR, the build cop will assign that PR to the original author, and include the following template in the PR description.
Dear $AUTHOR,
The on-call build cop, $BUILD_COP, believes that your PR $NUMBER may have
broken one or more of Drake's continuous integration builds [1]. It is
possible to break a build even if your PR passed continuous integration
pre-merge because additional platforms are tested post-merge.
The specific build failures under investigation are:
$LINK_TO_BROKEN_BUILD_ON_JENKINS
$LINK_TO_BROKEN_BUILD_ON_JENKINS
Therefore, the build cop has created this revert PR and started a complete
post-merge build to determine whether your PR was in fact the cause of the
problem. If that build passes, this revert PR will be merged 60 minutes from
now. You can then fix the problem at your leisure, and send a new PR to
reinstate your change.
If you believe your original PR did not actually break the build, please
explain on this thread.
If you believe you can fix the break promptly in lieu of a revert, please
explain on this thread, and send a PR to the build cop for review ASAP.
If you believe your original PR definitely did break the build and should be
reverted, please review and LGTM this PR. This allows the build cop to merge
without waiting for CI results.
For advice on how to handle a build cop revert, see [2].
Thanks!
 What do you do?
Here’s one workflow:
- Create a new development branch based off of the
HEAD
of master. - Revert the revert of your originally-merged PR to get your changes back.
- Debug the problem. This may require you to run on-demand continuous integration builds to ensure the problem that caused your PR to be reverted was actually fixed.
- Commit your changes into your new branch.
- Issue a new PR containing your fixes. Be sure to link to the build cop revert PR in your new PR.
Build Cop Playbook¶
This section is a quick-reference manual for the on-call build cop.
Monitor the Build¶
Check the Continuous Production build dashboard in Jenkins at least once an hour during on-call hours. These builds run after every merge to Drake. Also check the Nightly Production build dashboard every morning and Weekly Production build dashboard on Monday morning. These builds are unusually resource-intensive, and therefore run at most once per day.
If any Continuous, Nightly, or Weekly Production builds turn yellow or red, you need to act.
In Jenkins, builds that are in progress (blinking on and off) will show the color of the previous build.
Note that CDash pages may take a minute to populate.
Respond to Breakage¶
There are various reasons the build might break. Diagnose the failure, and then take appropriate action. This section lists some common failures and recommended responses. However, build cops often have to address unexpected circumstances. Do not expect this list to be complete, and always apply your own judgment.
In almost any build breakage, the first information-gathering step is to click on the build that is yellow or red in Jenkins, then click on the first breaking change in the Build History. You will see a list of the new commits in that particular run.
Determine if an open GitHub Drake issue describes the situation. For example, some tests are flaky for reasons that have no known resolution, but are described by Drake issues. If you find that your broken build is described by such an issue, consider adding the build information to the issue for future analysis. The build cop review and retrospective also describes current build issues.
Broken Compile or Test¶
Sometimes people merge code that doesn’t compile, or that fails a test. This can happen for several reasons:
- The platform or test case only runs post-merge.
- An administrator performed an override-merge of the culprit PR, circumventing pre-merge checks.
- The failure is an interaction between the culprit PR and some other recent change to master.
Compile failures will be red in Jenkins. Test failures will be yellow. Consult the list of commits in the breaking change to identify possible culprit PRs. Try to rule out some of those PRs by comparing their contents to the specifics of the failure. For any PRs you cannot rule out, create a rollback by clicking “Revert” in the GitHub UI. Use the template message to communicate with the author, and proceed as specified in that message.
Manually schedule the failing build as an experimental build on the rollback PR. If it passes, the odds are good that you have found the culprit. Proceed as specified in the template message.
Flaky Test¶
Sometimes people introduce code that makes a test non-deterministic, failing on some runs and passing on others. You cannot reliably attribute a flaky test failure to the first failing build, because it may have passed by chance for the first few continuous builds after the culprit PR landed.
Test failures will be yellow in Jenkins. If the list of commits in the breaking change does not include any plausible culprits, you may be looking at a flaky test. Look through earlier commits one-by-one for plausible culprits. After you identify one, create a rollback by clicking “Revert” in the GitHub UI. Use the template message to communicate with the author, and proceed as specified in that message.
Restarting Mac Nightly Builds¶
Occasionally there will be flaky tests or timeouts in the Mac nightly builds. While it is tempting to restart these builds to clear the errors, Mac resources are limited and restarting the long-running nightly builds may tie up resources needed for continuous builds. In addition, too many simultaneous Mac builds will increase the chances of timeouts and other flakes. Build cops should use their best judgement, keeping in mind the following guidelines:
- If the nightly job is mirrored by a continuous job, don’t re-run.
- If the test passed last build, don’t re-run.
- If it is a linter only timeout, don’t re-run.
- If there are many timeouts, you may consider re-running.
- If the timed-out test failed last build (not just timed out), you may consider re-running.
Broken CI Script¶
Sometimes people merge changes to the Drake CI scripts that result in spurious CI failures. The list of commits in Jenkins for each continuous build includes the drake-ci repository as well as Drake proper. Consider whether those changes are possible culprits.
If you believe a CI script change is the culprit, contact the author. If they are not responsive, revert the commit yourself and see what happens on the next continuous build. There are no pre-merge builds you can run that exercise changes to the CI scripts themselves.
Infrastructure Flake¶
The machinery of the CI system itself sometimes fails for reasons unrelated to any code change. The most common infrastructure flakes include:
- Unable to obtain a Gurobi license.
- Broken connection to a Mac build agent.
Infrastructure flakes will be red in Jenkins. If you believe you are looking at an infrastructure flake, run the build manually at HEAD. If it passes, you are definitely looking at an infrastructure flake, and no further action is required. If you believe the rate of a particular infrastructure flake has increased, alert Kitware by assigning a GitHub issue to both @BetsyMcPhail and @jamiesnape.
Note that “slow read” warnings during Bazel builds are due to the relative slowness of the remote storage used by the CI infrastructure when compared to storage connected to the local bus on a local developer workstation build and can be safely ignored.
If you see “All nodes of label <label> are offline”, this should disappear eventually and the build should run, once Jenkins gets a node booted up.
Infrastructure Collapse¶
Occasionally, some piece of CI infrastructure completely stops working. For instance, GitHub, AWS, or MacStadium could have an outage, or our Jenkins server could crash or become wedged. During infrastructure collapses, lots of builds will turn red and stay red.
Attempt to figure out what infrastructure collapsed. If it’s under our control, alert Kitware by assigning a GitHub issue to both @BetsyMcPhail and @jamiesnape. If it’s under a vendor’s control, spread the news and simply wait it out.
Drake External Examples¶
Details of failures in the drake-external-examples repository, which may be denoted by red “build failing” icons at the top of the build dashboard on Jenkins, should be posted to the #buildcop channel on Slack, ensuring that @jamiesnape is mentioned in the message.


Create Room
Game Lobby
Join Game
{{ roomName }}
{{ players | keylength }} player
s
in game
Current Players:
{{ player.name }}
,
×
Create Game
Room Name
Player Name
Ninja Colour
Red
Blue
Green
Yellow
{{ errorMessage }}
×
Join Game
Room Name
Player Name
Ninja Colour
Red
Blue
Green
Yellow
{{ errorMessage }}


{{option_a}} vs {{option_b}}!
{{option_a}}
{{option_b}}
(Tip: you can change your vote)
Processed by container ID {{hostname}}
{% if vote %} {% endif %}


--- layout: post title: Transposing a table date: type: post published: false status: draft categories: [] tags: [] meta: _edit_last: '2' author: login: shlomi email<EMAIL_ADDRESS>display_name: shlomi first_name: Shlomi last_name: Noach ---
123
SELECT CONCAT_WS('|', ID, Name, CountryCode, District, Population) AS concatenated_columns FROM city; SELECT GROUP_CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(concatenated_columns, '|', tinyint_asc.value), '|', -1) ORDER BY id SEPARATOR '|') AS concatenated_columns FROM tinyint_asc INNER JOIN ( SELECT id, CONCAT_WS('|', ID, Name, CountryCode, District, Population) AS concatenated_columns FROM city ) sel_graph WHERE tinyint_asc.value BETWEEN 1 AND (CHAR_LENGTH(concatenated_columns)-CHAR_LENGTH(REPLACE(concatenated_columns, '|', ''))+1) GROUP BY tinyint_asc.value ORDER BY tinyint_asc.value DESC;
123


You must log into the database as Bob before proceeding with this page.
Bob is an employee of customer service department. Check if Bob can access 'credit_card' table data.
Bob acquires SELECT, INSERT, and UPDATE privileges through the 'custService' role.
The query results in the right pane show that user Bob is able to execute SELECT, INSERT, UPDATE statements successfully. But DELETE statement on the right pane will fail as Bob does not have DELETE privilege.


PD: Woman sexually assaulted in parking lot of central PHX grocery store
by Joe EneaPHOENIX — A woman was sexually assaulted in the parking lot of a central Phoenix grocery store, according to court records.
Phoenix police report that on the afternoon of October 27, a man, later identified as Jorge Armando Fierro-Bustos, 44, was following a woman inside the Los Pinos Carniceria near 27th Avenue and Camelback Road.
Busto followed the woman outside and "forcefully fondled her," according to police.
A witness reportedly got the license plate number of his car as he left.
On November 8, Bustos was located and arrested. Police say he gave them a false identity; however, a fingerprint check revealed his actual identity.
Court records show that police found a glass pipe and 28 loose yellow pills in the car.
Bustos has been charged with sexual assault.


public interface Resolver
| ���������� | �ӿں�˵�� |
|---|---|
static class |
Resolver.ResolverType
Type of resolver that can be registered with JRegistry.
|
| ���������� | �ֶκ�˵�� |
|---|---|
static java.lang.String |
RESOLVER_SEARCH_PATH_PROPERTY
The Constant RESOLVER_SEARCH_PATH_PROPERTY.
|
| ���������� | ������˵�� |
|---|---|
boolean |
canBeResolved(byte[] address)
Checks if a mapping exists or can be made.
|
void |
clearCache()
Resets the cache to its defaults.
|
void |
initializeIfNeeded()
This method is called everytime the resolver is requested from
JRegistry.
|
boolean |
isCached(byte[] address)
Checks if resolver already has a mapping made for this particular
address.
|
int |
loadCache(java.net.URL url)
Attempts to load the cache from the given URL.
|
java.lang.String |
resolve(byte[] address)
Attempts to resole an address to a human readable form.
|
int |
saveCache()
Forces cache contents to be saved to the default cache file.
|
static final java.lang.String RESOLVER_SEARCH_PATH_PROPERTY
boolean canBeResolved(byte[] address)
address
- address to check mapping forvoid clearCache()
void initializeIfNeeded()
boolean isCached(byte[] address)
address
- address to check forint loadCache(java.net.URL url) throws java.io.IOException
url
- URL of the resource containing the database to loadjava.io.IOException
- any IO errorsjava.lang.String resolve(byte[] address)
address
- address to try and resolveint saveCache() throws java.io.IOException
java.io.IOException
- any IO errors during save


In Case of Death
Steps to take in case of death in your family
You have to contact the IAR Cemetery Committee in order to perform the Islamic rites of washing the body and burial at the Islamic Center of Raleigh's cemetery in Wendell NC.
- Choose only one family member or friend to co-ordinate with the Cemetery Committee.
- Do not call any funeral homes.
- Do not let multiple family members co-ordinate with the Cemetery Committee.
IAR Cemetery committee phone numbers
919-649-7126
919-407-9737
919-333-2600
The IAR Cemetery Committee is run by dedicated volunteers to help you with Islamic rituals of preparing the deceased for burial and with burial at the Muslim cemetery.
Funeral prayers will be held at the Islamic Center of Raleigh after daily prayers. We try to schedule the prayers after Dhuhr or Jumuah prayers and leave for cemetery immediately after the prayers.
Please follow these instructions to follow the funeral home van to the IAR Cemetery.
To learn more about Islamic funerals, please read the article written by Imam Baianonie
Funeral Homes
The IAR Cemetery Committee has the latest list of Funeral homes on contract. Please call the committee for details. Funeral homes charge only an agreed upon price.
Approximate cost of burial (may change)
| Items | Cost |
| Cost of Gravesite | FREE |
| Washing the Janazah | FREE |
| Burial kit, Wood, Grave Marker | $400 |
| Digging the grave | $450 |
| Funeral Home (see description of services provided by the funeral home) |
$1200 to $2000 |
| Total costs for burial in the IAR Cemetery | $2050 to $2850 |
Services provided by the funeral home
- Transfering the janazah from the hospital to the funeral home
- Use of bathing room facilities for washing the janazah
- Preparing the janazah including shrouding with the kafan
- Casket for transporting the janazah
- Use of visiting room
- Funeral van for one day


At Ohio University, there are a multitude of LGBTQ+ resources, organizations and opportunities for involvement for freshmen entering college.
When first entering campus, the primary LGBTQ+ resource presented to students is the LGBT Center, located in Baker University Center.
Micah McCarey, director of the LGBT Center, said the center is meant to promote safe, inclusive living and learning environments across OU’s campuses and in the overall communities where the campuses are located.
“That means that we're here for a wide range of constituents – from students to faculty to staff to community members,” McCarey said. “And that, of course, is across a wide range of demographic identities, including those who identify with gender expansive identities, or various minoritized sexualities.”
McCarey stressed the importance of having this organization be so central to campus, particularly for freshmen, is to reaffirm that the university is supportive of their identity.
“Many first-year students come from high schools where they do not have a visibly affirming LGBTQ+ environment,” McCarey said. “Some were lucky enough to have gay-straight alliances, or queer-straight alliances. But for many first-year students, college is the first time that they can count on that space being staffed by caring, competent supporters of the LGBTQ+ community, who can help them make friends and help them feel like their queerness is something to be celebrated, as opposed to feeling alienated by.”
Taylor Whittington, a senior studying biological sciences and psychology, is a member of Spectrum+, a student organization that focuses on educational and social events for the queer community.
Whittington mentioned that the welcoming nature of the organization is especially beneficial for queer freshmen, as they are presented with a larger challenge entering college.
“[Last semester] was my first semester in the organization and it’s already made a huge impact on me as a person,” Whittington said. “I think all incoming freshmen are trying to find a place to belong, and to add onto that, being someone in the LGBTQ+ community, it can be really difficult to feel like you fit in somewhere. I think this organization does a fantastic job of welcoming any and everybody, and just making you feel like you matter.”
Gabriela Grijalva, who graduated in Spring 2021 with a degree in social work, referenced the frequent feelings of isolation that may arise for freshmen, especially for those who identify as queer.
“When it comes to being in Athens initially, for many different folks it's really easy to feel alone and isolated from others, especially for people who come from more conservative rural areas that are not as accepting towards diverse sexualities and or genders,” Grijalva said. “So, it can feel lonely, but I want freshmen to know that there's such a large, diverse queer community in Athens, and we have your back.”
Grijalva helped to reinforce the queer community on campus by co-founding and serving as the president of the student organization Allies, which is open for anyone, including freshmen, to join.
“[We established] Allies, which is an org whose mission was focused on creating a safe space to facilitate dialogue, talking about different intersections of identities and how to be active allies and intersectional allies in the face of the evolving social justice picture in the United States,” Grijalva said.
Winsome Chunnu is the director of the Multicultural Center and the adviser of SHADES, a student organization that focuses on creating a safe space for individuals with diverse sexual and gender identities and discusses the intersectionality of race and ethnicity with those identities.
“Being LGBTQIA in the United States, depending on one's family, also brings its own set of challenges,” Chunnu said. “This organization can help incoming students with that process of feeling some form of acceptance. Having a mentor or friend, who understands them beyond just being a first-year student. And for people who have not come out to their families, it provides the space for them, where they can decompress and can find resources that can help them as they're navigating their identity.”
Alongside organizations like SHADES, McCarey said the LGBT Center also fosters these similar goals of creating a space that encourages LGBTQ+ students to feel comfortable in their identities.
“We can help them troubleshoot some of the many challenges that LGBTQ+ students can face,” McCarey said. “Not knowing, for instance, always how to go about coming out in different environments – from the classroom to the residence hall setting, or thinking about connecting with folks who have perhaps had similar experiences transitioning with regard to gender identity and expression. And we can really help people make bonds that give them a solid sense of belonging and connection to the university.”
For Whittington, her upbringing conjured a lot of negativity associated with her sexuality. However, Whittington said through entering college, she noticed a significant change in how her identity was perceived.
“I came from a really small town where the idea of somebody being gay or bi, or trans was very taboo,” Whittington said. “And I remember my senior year, people were going around telling everybody that I was bisexual and making fun of me and judging me for that. So I'd always been very hidden about my sexuality and my identity because of where I came from. But through college, I found that everybody is so much more accepting of you, no matter how you identify or who you love. I know, it seems really cliche, but it truly is such a welcoming environment.”
With the numerous LGBTQ+ organizations and resources available to incoming freshmen, Whittington said these opportunities will ultimately enable queer freshmen to feel secure in their identities, and discover multiple spaces where they can freely and comfortably belong.
“When you get to college, what connects you is your interests and hobbies because you find each other in organizations or in classes that you have together, or your personalities just click and I think that just creates a lot stronger of a bond,” Whittington said. “So no matter who you are, who you love, it doesn't matter. Because the people that love you love you for who you are.”


How to use bash history expansion
Examples:
- re-execute the last commands:
echo !!
shortern for echo !-1
- re-execute the second last command:
echo !-2
- re-execute the last command with string replace
service sshd start
^start^stop^
equal !!:s/start/stop
- execute command with the last argument of the last command
echo !$
shortern for echo !!:$
- execute command with the first argument of the last command
echo !^
shortern for echo !!:1
- execute command with all argument of the last command
echo !!:*
shortern for !!:1-$
- The most complex command:
echo !-3:2-3:gs/start/stop/
reference:
- bash history expansion


This documentation describes the hData content payload for the Result Extension.
| Name | Result Extension Description |
| Version Aware URL | |
| Creation Date | 13 February 2012 |
| Summary | This Result hData Extension Description contains information about result observations |
| Author(s) | RHEx Pilot Team |
| Date | Author(s) | Version URL | Major Changes | Comments |
|---|---|---|---|---|
| 13 February 2012 | King, Kling, Gregorowicz, et. al. | First Version | Draft - In Progress | |
| 31 July 2012 | King, Kling, Gregorowicz, et. al. | Update for RHEx | V1.2 | Draft - In Progress |
| 31 August 2012 | King, Kling, Gregorowicz, et. al. | Update for RHEx | V1.3 |
All hData section documents identified by an XML namespace must be declared in the extensions node of the root document. Extensions are either "mandatory" or "optional." Each section document has an address expressed as a Uniform Resource Identifier (URI). Each URI is registered in the extensions node of the root document. Sections can contain either single data type documents (e.g., XML, JSON, HTML) or URIs referencing other sections. Section document content must be expressed in XML and document types must be declared in the extensions node of the root document.
Result contains information about the current and relevant historical result observations for the patient..
| Name | Type | Mandatory/Optional | Notes |
|---|---|---|---|
| id | string | M | Entry Component: An identifier for this specific observation |
| code | code | O | Entry Component: The coded value of the result represented. SHOULD be selected from LOINC (codeSystem 2.16.840.1.113883.6.1) or SNOMED CT (codeSystem 2.16.840.1.113883.6.96) C154-[DE-15.03-2] Result Type for laboratory results SHOULD be coded as specified in HITSP/C80 Section <IP_ADDRESS>.1 Laboratory Observations |
| status | string | O |
Entry Component: Status for this observation, e.g., complete, preliminary |
| name | string | O | Entry Component: This is a free text description of the result. |
| effectiveTime | TimeInterval | M | Entry Component: The biologically relevant date/time for the observation. |
| value | quantity | M | The value of the result, including units of measure if applicable |
| interpretation | simpleCode | O | An abbreviated interpretation of the observation, e.g., normal, abnormal, high, etc. Result Interpretation SHALL be coded as specified in HITSP/C80 Section <IP_ADDRESS>.3 Result Normalcy Status |
| reference range | any | O | Reference range(s) for the observation |
Result is characterized by:
The XML Schema Definition (XSD) for Result specifies how to formally describe the elements in an XML document. For the RHEx Pilot, C32/C80 values that lend themselves to greater accuracy through calculation are calculated.
Result.xsd is located at the following URI: https://github.com/projectcypress/health-data-standards/blob/develop/greenc32/schemas/rest_plus/result.xsd
Result.xsd extends the entry complex data type which is defined in the data_types schema at the following URI: https://github.com/projectcypress/health-data-standards/blob/develop/greenc32/schemas/rest_plus/data_types.xsd
Result may be represented in XML and JSON format.
Components of the Result Extension Specification have been drawn from authoritative source and reference documents, as follows:


Holds a complete list of all file paths
Returns an array of all file paths
Returns the built structure
Check if file meets requirements
Check if a folder meets requirements
Build the JSON structure used to generate the DOT code
Build up the directory structure from a give path
Holds the built JSON structure of the give directory
Generated using TypeDoc
The walker class provides functions for walking the specified directory and provides a JSON structure of sub directories and files found.


This webapp is product sum of efforts by Gaux community.
This page is generated with lots of hardwork, patience and dedication. To modify it, edit the code contact one of our chief members.


For many years I believed that the most startling opening line in theatre was Ubu's “Merdre!” in Alfred Jarry's Ubu Roi. But no! What could better this:
Aldiborontiphoscophornio! Where left you Chrononhotonthologos?
These are the opening words of Henry Carey's Chrononhotonthologos, spoken by Rigdum-Funnidos. The play is not unlike Ubu Roi, in that the title character is a greedy, bad-tempered and violent king. (It would have been a great role for Robert Coates.) The final scene leaves the stage littered with corpses—this memorable line will give you some idea:
O horrid! horrible, and horridest horror! Our king! our general! our cook! our doctor! All dead! stone dead! irrevocably dead! O——-h!—— [All groan, a tragedy groan.]
The play also includes my favourite musical direction, which would not be out of place at the Festival of Argumentative Music at Ülm (see 24th February):
SCENE—A Bed Chamber. Chrononhotonthologos asleep. [Rough music, Viz. Salt Boxes and Rolling Pins, Grid-Irons and Tongs, Sow-Gelders Horns, Marrow-Bones and Cleavers, c. c.] He wakes.
Henry Carey (c.1687-1743) also wrote, among much else, the words to God Save The King (or Queen). Chrononhotonthologos was so popular in its day that the title entered the language, as a synonym for “furious, violent, demanding, self-centered” (sounds just like Pa Ubu) and appeared in earlier editions of Roget's Thesaurus, although appears not to have made it into the OED.
You can read the play in full by clicking on the picture of Pa Ubu (for want of a picture of Chrononhotonthologos himself).


Create/Join a virtual meeting.
Enter your meeting code or create a meeting code down below.
Join room


Googles main page has a wonderful signal to noise ratio; it only shows exactly what you need
Facebook has way too many ads and suggested posts, making it difficult to find material that im actually interested in.
Simple menu, just put in a youtube link and the download starts!
So many options are shown, and it makes it hard to determine what fields you actually have to fill out to see classes
Information is chunked into individual posts, making it easy to find the post or information that you are looking for, and avoiding information you dont want
Too much information on one function is chunked in to one page.
Buttons are shaped like arrows, making it obvious that their function is to change to the next picture. hovering over a product comes up with a bigger zoomed in picure. Everything does what you would expect it to and buttons are color coded, darker colors being more important buttons
When on a page of a program, ads will display that say "download" or other similar phrases that confuse you and make it hard to find the actual download link
Buttons do what they should: select box allows deleting or moving files, dragging files can move them to other folders, and dragging files onto the website stores them in the current open folder
Amazon has a 1-click order button, which is displayed right below "add to cart". Users could easily place an order on something they dont want with 1 simple mis-clic


Hey there! I'm Mark Hattori. Thanks for coming to my website! Feel free to read about me, listen to some of my music, or look at some of the graphic design and video work I've done. I am a recent graduate from Santa Clara University, where I majored in Web Design & Engineering and minored in Communications. In my free time, I love creating music, going to concerts, watching sports, and having fun with my friends and family.
I started getting into music at a really young age. My mom says that as a toddler, I would watch the drummer play at church and then bang away at the drums once the service was done. Since then, I've picked up piano, guitar and bass as well. In 7th grade, I was exposed to GarageBand for the first time and that experience opened me up to the world of music production. After that, I began to produce my own covers and write my own songs. I also currently play keyboard and guitar in my church's worship band.


Vanessa Stevenson
Food enthusiast, photography fan. Add a pinch of raw foodism and that's pretty much who I am.
THE BEST FOOD BLOG ON THE WEB.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
POSTED ON 15 DEC 2013 / DESSERTS
    For the ﬁg-swirl: Melt butter over medium heat in a saucepan. Add brown sugar and stir td dissolve. Halve all of the ﬁgs and toss in the saucepan with water and lemon juice. cook dyer medium heat, stirring frequently, until you have a chunky/jammy mixture. Add salt with one do two stirs, set aside and let cool completely.
    Ice cream: In a small put over medium heat, combine milk, and granulated sugar until sugar is completely dissolved and the milk is just barely lukewarm. Whisk in the egg yolks. Set mixture in the fridge and wait until the ﬁg mixture is cooled.
    Using an ice cream machine, pour liquids into the frozen basin and process according to manufacturer instructions, i.e., let spin and thicken for 20 minutes before adding mascarpone, ﬁg jam mixture, and the nuts. continue to process for +/7 10 minutes. Pour semi-frozen mixture into a pyrex dish or glass tupperware. Freeze for at least two hours before serving.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Delicious © 2013 - All Rights Reserved.
Proudly published with Ghost.


by Dmitriy Volk<EMAIL_ADDRESS>@xbo
Traditional PaaS tried to do too many things:
Virtualization, Cloud, Big Data, etc. abstracts away the execution platform for computing tasks.
Instead of configured machines, all that matters is available resources: CPU, memory, disk, ports.
“Distributed systems kernel”
To make Mesos execute even the simplest task, a framework is required
A framework consists of a Scheduler and and optional Executor
Scheduler is called regularly with the question:
"Here's list of slaves with their resources - do you want them to do anything?"
A specialized framework might want to package common way of launching its tasks into an Executor
Deploying an application using various pieces of Mesos ecosystem.
Usage of Docker and Mesos is indicated for each step
| Used | |
| Didn't use | |
| Could've used |
“I suppose it is tempting, if the only tool you have is a hammer, to treat everything as if it were a nail.” Abraham Maslow
Finally, a truly distributed software system to calculate square roots!
Server holds work items (approximation iterations)
Client checks out a work item and calculates next approximation using Newton's formula:
\[newApproximation = \frac{oldApproximation + \frac{square}{oldApproximation}}{2}\]
SQRT Server is a Spring Boot application
Registers itself in a Eureka server
Exposes Web UI and REST APIs
Typical "long-running" task
pom.xml
org.springframework.cloud
spring-cloud-starter-eureka
SqrtServerMain.java
@EnableEurekaClient
@SpringBootApplication
public class SqrtServerMain {
...
}
bootstrap.yml
spring:
application:
name: sqrt-server
Marathon framework manages long-running tasks on Mesos.
upstart / systemd for the cluster
Makes sure n instances of a task (application) are running in the cluster
Exposes rudimentary UI and rich REST API
Deployed on demo cluster
{
"id": "sqrt-server",
"cmd": "",
"cpus": 1,
"instances": 1,
"mem" : 1024,
"container": {
"type": "DOCKER",
"docker": {
"image": "registry.dmitriyvolk.net:5000/sqrt/sqrt-server",
"network": "HOST"
}
},
"constraints": [
[ "hostname", "CLUSTER", "registry.dmitriyvolk.net"]
]
}
SQRT Client is also a Spring Boot application.
Looks up SQRT Server location in Eureka, checks out a work item, and sends back a new approximation.
Needs some data to start with. Let's input data into the SQRT Server.
pom.xml
org.springframework.cloud
spring-cloud-starter-eureka
SqrtClient.java
@Autowired
DiscoveryClient discoveryClient;
private String getSqrtServerUrl() {
ServiceInstance serviceInstance =
discoveryClient.getInstances("sqrt-server").get(0);
return String.format("http://%s:%d",
serviceInstance.getHost(), serviceInstance.getPort());
}
Also on Marathon:
{
"id": "sqrt-client",
"cmd": "",
"cpus": 1,
"instances": 1,
"mem" : 1024,
"container": {
"type": "DOCKER",
"docker": {
"image": "registry.dmitriyvolk.net:5000/sqrt/sqrt-client",
"network": "HOST"
}
}
}
After a square root has been successfully calculated, the client keeps getting launched. Not what we want, let's undeploy client. Marathon
We emulate constant stream of inputs with scheduled calls to generate random input.
Chronos framework is cron for the cluster: distributed and fault-tolerant scheduler for Mesos.
Exposes rudimentary UI and rich REST API
Deployed on the demo cluster: Chronos UI
{
"name": "random-square-input",
"schedule": "R50/2015-05-27T19:00:00Z/PT30S",
"command": "/usr/bin/curl -X POST
'http://registry.dmitriyvolk.net:31080/newinput/random'",
"epsilon": "PT15M",
"owner"<EMAIL_ADDRESS>}
Marathon will keep restarting client, even after all the work is done.
Chronos will launch client regardless of the work availability.
The alternative is obvious...
Yep.
SDKs available in C++, Python, Java
Communication with master through native library
Implement reactions to:
public void resourceOffers(SchedulerDriver schedulerDriver, List<Protos.Offer> list) {
for (Protos.Offer offer : list) {
if (checker.hasMore()) { // makes REST call to app to check for available work items
...
Protos.ContainerInfo.Builder containerBuilder = Protos.ContainerInfo.newBuilder()
.setType(Protos.ContainerInfo.Type.DOCKER)
.setDocker(Protos.ContainerInfo.DockerInfo.newBuilder()
.setImage(sqrtClientImageId).setNetwork(Protos.ContainerInfo.DockerInfo.Network.valueOf("HOST")).build());
Protos.TaskInfo task = Protos.TaskInfo.newBuilder()
.setTaskId(taskId).setName("sqrt-task-" + taskId.getValue())
.setSlaveId(offer.getSlaveId())
.addResources(Protos.Resource.newBuilder()
.setName("cpus").setType(Protos.Value.Type.SCALAR)
.setScalar(Protos.Value.Scalar.newBuilder().setValue(1)))
.addResources(Protos.Resource.newBuilder()
.setName("mem").setType(Protos.Value.Type.SCALAR)
.setScalar(Protos.Value.Scalar.newBuilder().setValue(1024)))
.setContainer(containerBuilder).setCommand(Protos.CommandInfo.newBuilder().setShell(false)).build();
...
schedulerDriver.launchTasks(Collections.singleton(offer.getId()), Collections.singletonList(task), filters);
}
}
}
Custom framework is written as a Spring Boot application
Let's deploy it into the Mesos cluster
Watch clients not being launched when no work is available: Sqrt Server UI
http://mesos.apache.org/documentation/latest/mesos-frameworks/
11 pieces of software used in this demo (12 including the presentation).
Only 3 were not run as docker containers:
In fact, Mesos master can happily run as a container as well.
You're punishing yourself if you're not using it
| Technology | Minutes |
|---|---|
| Run H2 database, configure DataSource, Hibernate, etc. | 1 |
| Exposing REST API with JSON (de-) serialization | 5 |
| Service registration and discovery with Eureka | 20 |
| Streaming live events to the browser with WebSockets | 40 (including JavaScript) |
| Managing Javascript dependencies with WebJars | 5 |


No filtering properties discovered We are not able to provide facets for this visualization.
Press the 'Refresh' button to visualize all unfiltered data. It may take a while. If the dataset is really large,
the visualization will probably slow down your browser.
Error
We are having troubles while querying the dataset.
The last query has failed. Probably a Virtuoso timeout.
Querying the dataset Right now, we are querying the dataset for {{queryingDataset}}.
It may take a few minutes based on the size of the result and/or size of the graph the query is running against.


Zend\Ldap\Node includes the magic property accessors __set(), __get(), __unset() and __isset() to access the attributes by their name. They proxy to Zend\Ldap\Node::setAttribute(), Zend\Ldap\Node::getAttribute(), Zend\Ldap\Node::deleteAttribute() and Zend\Ldap\Node::existsAttribute() respectively. Furthermore the class implements ArrayAccess for array-style-access to the attributes. Zend\Ldap\Node also implements Iterator and RecursiveIterator to allow for recursive tree-traversal.
| Method | Description |
|---|---|
| Zend\Ldap\Ldap getLdap() | Returns the current LDAP connection. Throws Zend\Ldap\Exception\LdapException if current node is in detached mode (not connected to a Zend\Ldap\Ldap instance). |
| Zend\Ldap\Node attachLdap(Zend\Ldap\Ldap $ldap) | Attach the current node to the $ldapZend\Ldap\Ldap instance. Throws Zend\Ldap\Exception\LdapException if $ldap is not responsible for the current node (node is not a child of the $ldap base DN). |
| Zend\Ldap\Node detachLdap() | Detach node from LDAP connection. |
| boolean isAttached() | Checks if the current node is attached to a LDAP connection. |
| Zend\Ldap\Node create(string|array|Zend\Ldap\Dn $dn, array $objectClass) | Factory method to create a new detached Zend\Ldap\Node for a given DN. Creates a new Zend\Ldap\Node with the DN $dn and the object-classes $objectClass. |
| Zend\Ldap\Node fromLdap(string|array|Zend\Ldap\Dn $dn, Zend\Ldap\Ldap $ldap) | Factory method to create an attached Zend\Ldap\Node for a given DN. Loads an existing Zend\Ldap\Node with the DN $dn from the LDAP connection $ldap. |
| Zend\Ldap\Node fromArray((array $data, boolean $fromDataSource) | Factory method to create a detached Zend\Ldap\Node from array data $data. if $fromDataSource is TRUE (FALSE by default), the data is treated as being present in a LDAP tree. |
| boolean isNew() | Tells if the node is considered as new (not present on the server). Please note, that this doesn’t tell if the node is really present on the server. Use Zend\Ldap\Node::exists() to see if a node is already there. |
| boolean willBeDeleted() | Tells if this node is going to be deleted once Zend\Ldap\Node::update() is called. |
| Zend\Ldap\Node delete() | Marks this node as to be deleted. Node will be deleted on calling Zend\Ldap\Node::update() if Zend\Ldap\Node::willBeDeleted() is TRUE. |
| boolean willBeMoved() | Tells if this node is going to be moved once Zend\Ldap\Node::update() is called. |
| Zend\Ldap\Node update(Zend\Ldap\Ldap $ldap) | Sends all pending changes to the LDAP server. If $ldap is omitted the current LDAP connection is used. If the current node is detached from a LDAP connection a Zend\Ldap\Exception\LdapException will be thrown. If $ldap is provided the current node will be attached to the given LDAP connection. |
| Zend\Ldap\Dn getCurrentDn() | Gets the current DN of the current node as a Zend\Ldap\Dn. This does not reflect possible rename-operations. |
| Zend\Ldap\Dn getDn() | Gets the original DN of the current node as a Zend\Ldap\Dn. This reflects possible rename-operations. |
| string getDnString(string $caseFold) | Gets the original DN of the current node as a string. This reflects possible rename-operations. |
| array getDnArray(string $caseFold) | Gets the original DN of the current node as an array. This reflects possible rename-operations. |
| string getRdnString(string $caseFold) | Gets the RDN of the current node as a string. This reflects possible rename-operations. |
| array getRdnArray(string $caseFold) | Gets the RDN of the current node as an array. This reflects possible rename-operations. |
| Zend\Ldap\Node setDn(Zend\Ldap\Dn|string|array $newDn) | Sets the new DN for this node effectively moving the node once Zend\Ldap\Node::update() is called. |
| Zend\Ldap\Node move(Zend\Ldap\Dn|string|array $newDn) | This is an alias for Zend\Ldap\Node::setDn(). |
| Zend\Ldap\Node rename(Zend\Ldap\Dn|string|array $newDn) | This is an alias for Zend\Ldap\Node::setDn(). |
| array getObjectClass() | Returns the objectClass of the node. |
| Zend\Ldap\Node setObjectClass(array|string $value) | Sets the objectClass attribute. |
| Zend\Ldap\Node appendObjectClass(array|string $value) | Appends to the objectClass attribute. |
| string toLdif(array $options) | Returns a LDIF representation of the current node. $options will be passed to the Zend\Ldap\Ldif\Encoder. |
| array getChangedData() | Gets changed node data. The array contains all changed attributes. This format can be used in Zend\Ldap\Ldap::add() and Zend\Ldap\Ldap::update(). |
| array getChanges() | Returns all changes made. |
| string toString() | Returns the DN of the current node - proxies to Zend\Ldap\Dn::getDnString(). |
| string __toString() | Casts to string representation - proxies to Zend\Ldap\Dn::toString(). |
| array toArray(boolean $includeSystemAttributes) | Returns an array representation of the current node. If $includeSystemAttributes is FALSE (defaults to TRUE) the system specific attributes are stripped from the array. Unlike Zend\Ldap\Node::getAttributes() the resulting array contains the DN with key ‘dn’. |
| string toJson(boolean $includeSystemAttributes) | Returns a JSON representation of the current node using Zend\Ldap\Node::toArray(). |
| array getData(boolean $includeSystemAttributes) | Returns the node’s attributes. The array contains all attributes in its internal format (no conversion). |
| boolean existsAttribute(string $name, boolean $emptyExists) | Checks whether a given attribute exists. If $emptyExists is FALSE empty attributes (containing only array()) are treated as non-existent returning FALSE. If $emptyExists is TRUE empty attributes are treated as existent returning TRUE. In this case the method returns FALSE only if the attribute name is missing in the key-collection. |
| boolean attributeHasValue(string $name, mixed|array $value) | Checks if the given value(s) exist in the attribute. The method returns TRUE only if all values in $value are present in the attribute. Comparison is done strictly (respecting the data type). |
| integer count() | Returns the number of attributes in the node. Implements Countable. |
| mixed getAttribute(string $name, integer|null $index) | Gets a LDAP attribute. Data conversion is applied using Zend\Ldap\Attribute::getAttribute(). |
| array getAttributes(boolean $includeSystemAttributes) | Gets all attributes of node. If $includeSystemAttributes is FALSE (defaults to TRUE) the system specific attributes are stripped from the array. |
| Zend\Ldap\Node setAttribute(string $name, mixed $value) | Sets a LDAP attribute. Data conversion is applied using Zend\Ldap\Attribute::setAttribute(). |
| Zend\Ldap\Node appendToAttribute(string $name, mixed $value) | Appends to a LDAP attribute. Data conversion is applied using Zend\Ldap\Attribute::setAttribute(). |
| array|integer getDateTimeAttribute(string $name, integer|null $index) | Gets a LDAP date/time attribute. Data conversion is applied using Zend\Ldap\Attribute::getDateTimeAttribute(). |
| Zend\Ldap\Node setDateTimeAttribute(string $name, integer|array $value, boolean $utc) | Sets a LDAP date/time attribute. Data conversion is applied using Zend\Ldap\Attribute::setDateTimeAttribute(). |
| Zend\Ldap\Node appendToDateTimeAttribute(string $name, integer|array $value, boolean $utc) | Appends to a LDAP date/time attribute. Data conversion is applied using Zend\Ldap\Attribute::setDateTimeAttribute(). |
| Zend\Ldap\Node setPasswordAttribute(string $password, string $hashType, string $attribName) | Sets a LDAP password on $attribName (defaults to ‘userPassword’) to $password with the hash type $hashType (defaults to Zend\Ldap\Attribute::PASSWORD_HASH_MD5). |
| Zend\Ldap\Node deleteAttribute(string $name) | Deletes a LDAP attribute. |
| void removeDuplicatesFromAttribute(string$name) | Removes duplicate values from a LDAP attribute. |
| void removeFromAttribute(string $attribName, mixed|array $value) | Removes the given values from a LDAP attribute. |
| boolean exists(Zend\Ldap\Ldap $ldap) | Checks if the current node exists on the given LDAP server (current server is used if NULL is passed). |
| Zend\Ldap\Node reload(Zend\Ldap\Ldap $ldap) | Reloads the current node’s attributes from the given LDAP server (current server is used if NULL is passed). |
| Zend\Ldap\Node\Collection searchSubtree(string|Zend\Ldap\Filter\AbstractFilter $filter, integer $scope, string $sort) | Searches the nodes’s subtree with the given $filter and the given search parameters. See Zend\Ldap\Ldap::search() for details on the parameters $scope and $sort. |
| integer countSubtree(string|Zend\Ldap\Filter\AbstractFilter $filter, integer $scope) | Count the nodes’s subtree items matching the given $filter and the given search scope. See Zend\Ldap\Ldap::search() for details on the $scope parameter. |
| integer countChildren() | Count the nodes’s children. |
| Zend\Ldap\Node\Collection searchChildren(string|Zend\Ldap\Filter\AbstractFilter $filter, string $sort) | Searches the nodes’s children matching the given $filter. See Zend\Ldap\Ldap::search() for details on the $sort parameter. |
| boolean hasChildren() | Returns whether the current node has children. |
| Zend\Ldap\Node\ChildrenIterator getChildren() | Returns all children of the current node. |
| Zend\Ldap\Node getParent(Zend\Ldap\Ldap $ldap) | Returns the parent of the current node using the LDAP connection $ldap (uses the current LDAP connection if omitted). |
The source code of this file is hosted on GitHub. Everyone can update and fix errors in this document with few clicks - no downloads needed.


| Key(s) | Action |
|---|---|
| / | Open/close this help |
| K Space | Pause or resume playback |
| J Left | Scrub left slowly |
| L Right | Scrub left more quickly |
| H | Scrub left at a moderate rate |
| ; | Scrub right at a moderate rate |
| Shift+J Shift+Left | Scrub left quickly |
| Shift+L Shift+Right | Scrub right quickly |
| Shift+H | Scrub left very quickly |
| Shift+; | Scrub right very quickly |
| I Up | Seek to the previous mark |
| , Down | Seek to the next mark |
| P | Jump to a segment by number |
| 0-9 | Seek to n*10% of the video |
| U - | Decrease playback speed |
| O + | Increase playback speed |
| Page up | Zoom out the waveform |
| Page down | Zoom in the waveform |
| D | Delete the mark prior to the cursor. If the mark forms the beginning of a pair, i.e., 'i' or 'f', then the matching end will be replaced by a temporary 'x' mark to remember its position. If the mark froms the end of a pair, i.e., 'o' or 'n', then it will be moved down to abut the next mark. |
| F Pause |
If the current status is clipped out, then begin
clipping in by introducing an 'i' mark and
corresponding 'o' mark. If the current status is clipped in, then clip out by moving or introducing an 'o' mark. If the current status is fast-forwarding, then resume normal speed by moving or introducing an 'n' mark. If an 'o' or 'n' mark is moved, a temporary 'x' mark may be left to remember its old position. |
| S Print Screen |
If the current status is clipped in, then begin
fast-forward by introducing an 'f' mark and
corresponding 'n' mark. If the current status is clipped out, then introduce an 'r' (reset) mark. Otherwise, no effect. |
| E Scroll Lock | Introduce an 'm' (general) mark. |
| V | Validate marks. This fixes any unmatched pairs, as well as removing 'x' marks. |
| Ctrl+W | Quit. |


Basic example - with looping carousel
This is an example of the basic theme.
jCarousel is supported and can be integrated with PikaChoose!
Be sure to check out
PikaChoose.com
for updates.
You can use any type of html you want with PikaChoose
PikaChoose survives on your donations! Keep the project alive with a donation.


Oops ... your browser doesn't support the HTML5 canvas element
Speed:
hours/render Camera mode:
Mouse
Fly
Mercury
Venus
Earth
Mars
Jupiter
Saturn
Uranus
Neptune
Sun
Space bar - Reset camera position P Key - Pause Animation Show Orbits:
Mouse mode
Orbit - Drag with left button
Track - Drag with right button
Dolly - Mouse wheel
Fly mode
W/S Keys - Dolly forward/backward
A/D Keys - Track left/right
Q/E Keys - Track up/down
Mouse drag - turn right/left, up/down
Planet Years(In)
Mercury Year: 1
Venus Year: 1
Earth Year: 1
Mars Year: 1
Planet Years(Out)
Jupiter Year: 1
Saturn Year: 1
Uranus Year: 1
Neptune Year: 1


--- layout: resource title: Belarus ---
Know any other resources? Send us an email or add links to this page with a Pull request on GitHub!


Chapter 4 Panel
4.1 Generate and Join
4.1.1 Generate Panel Structure
Go back to fan’s REconTools Package, R Code Examples Repository (bookdown site), or Intro Stats with R Repository (bookdown site).
<IP_ADDRESS> Balanced Panel Skeleton
There are \(N\) individuals, each could be observed \(M\) times. In the example below, there are 3 students, each observed over 4 dates. This just uses the uncount function from tidyr.
# Define
<- 3
it_N <- 5
it_M <- 'student_id'
svr_id <- 'class_day'
svr_date
# dataframe
<- as_tibble(matrix(it_M, nrow=it_N, ncol=1)) %>%
df_panel_skeleton rowid_to_column(var = svr_id) %>%
uncount(V1) %>%
group_by(!!sym(svr_id)) %>% mutate(!!sym(svr_date) := row_number()) %>%
ungroup()
# Print
kable(df_panel_skeleton) %>%
kable_styling_fc()
| student_id | class_day |
|---|---|
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 1 | 5 |
| 2 | 1 |
| 2 | 2 |
| 2 | 3 |
| 2 | 4 |
| 2 | 5 |
| 3 | 1 |
| 3 | 2 |
| 3 | 3 |
| 3 | 4 |
| 3 | 5 |
<IP_ADDRESS> Panel of Children with Height Growth
Given \(N\) individuals, each with \(G\) observations. There is an initial height variable and height grows every year. There are growth variables, variables for cumulative growth and variables for height at each age for each child.
Individuals are defined by gender (1 = female), race (1=asian), and birth height. Within individual yearly information includes height at each year of age.
# Define
<- 5
it_N <- 3
it_M <- 'indi_id'
svr_id <- 'female'
svr_gender <- 'asian'
svr_asian <- 'year_of_age'
svr_age # Define Height Related Variables
<- 'birth_height'
svr_brthgt <- 'hgt_growth'
svr_hgtgrow <- 'hgt_growcumu'
svr_hgtgrow_cumu <- 'height'
svr_height
# panel dataframe following
set.seed(123)
<- as_tibble(matrix(it_M, nrow=it_N, ncol=1)) %>%
df_panel_indiage mutate(!!sym(svr_gender) := rbinom(n(), 1, 0.5),
!!sym(svr_asian) := rbinom(n(), 1, 0.5),
!!sym(svr_brthgt) := rnorm(n(), mean=60,sd=3)) %>%
uncount(V1) %>%
group_by(!!sym(svr_gender), !!sym(svr_asian), !!sym(svr_brthgt)) %>%
mutate(!!sym(svr_age) := row_number(),
!!sym(svr_hgtgrow) := runif(n(), min=5, max=15),
!!sym(svr_hgtgrow_cumu) := cumsum(!!sym(svr_hgtgrow)),
!!sym(svr_height) := !!sym(svr_brthgt) + !!sym(svr_hgtgrow_cumu)) %>%
ungroup()
# Add Height Index
kable(df_panel_indiage) %>% kable_styling_fc()
| female | asian | birth_height | year_of_age | hgt_growth | hgt_growcumu | height |
|---|---|---|---|---|---|---|
| 0 | 0 | 65.14520 | 1 | 13.895393 | 13.895393 | 79.04059 |
| 0 | 0 | 65.14520 | 2 | 11.928034 | 25.823427 | 90.96862 |
| 0 | 0 | 65.14520 | 3 | 11.405068 | 37.228495 | 102.37369 |
| 1 | 1 | 61.38275 | 1 | 11.907053 | 11.907053 | 73.28980 |
| 1 | 1 | 61.38275 | 2 | 12.954674 | 24.861727 | 86.24448 |
| 1 | 1 | 61.38275 | 3 | 5.246137 | 30.107864 | 91.49061 |
| 0 | 1 | 56.20482 | 1 | 14.942698 | 14.942698 | 71.14751 |
| 0 | 1 | 56.20482 | 2 | 11.557058 | 26.499756 | 82.70457 |
| 0 | 1 | 56.20482 | 3 | 12.085305 | 38.585060 | 94.78988 |
| 1 | 1 | 57.93944 | 1 | 6.471137 | 6.471137 | 64.41058 |
| 1 | 1 | 57.93944 | 2 | 14.630242 | 21.101379 | 79.04082 |
| 1 | 1 | 57.93944 | 3 | 14.022991 | 35.124369 | 93.06381 |
| 1 | 0 | 58.66301 | 1 | 10.440660 | 10.440660 | 69.10367 |
| 1 | 0 | 58.66301 | 2 | 10.941420 | 21.382081 | 80.04509 |
| 1 | 0 | 58.66301 | 3 | 7.891597 | 29.273678 | 87.93669 |
<IP_ADDRESS> Create Group IDs
Given the dataframe just created, generate group IDs for each Gender and Race Groups. Given that both are binary, there can only be 4 unique groups.
# group id
<- 'female_asian_id'
svr_group_id # Define
<- c('female', 'asian')
ls_svr_group_vars
# panel dataframe following
<- df_panel_indiage %>%
df_panel_indiage_id arrange(!!!syms(ls_svr_group_vars)) %>%
group_by(!!!syms(ls_svr_group_vars)) %>%
mutate(!!sym(svr_group_id) := (row_number()==1)*1) %>%
ungroup() %>%
mutate(!!sym(svr_group_id) := cumsum(!!sym(svr_group_id))) %>%
select(one_of(svr_group_id, ls_svr_group_vars), everything())
# Add Height Index
kable(df_panel_indiage_id) %>%
kable_styling_fc_wide()
| female_asian_id | female | asian | birth_height | year_of_age | hgt_growth | hgt_growcumu | height |
|---|---|---|---|---|---|---|---|
| 1 | 0 | 0 | 65.14520 | 1 | 13.895393 | 13.895393 | 79.04059 |
| 1 | 0 | 0 | 65.14520 | 2 | 11.928034 | 25.823427 | 90.96862 |
| 1 | 0 | 0 | 65.14520 | 3 | 11.405068 | 37.228495 | 102.37369 |
| 2 | 0 | 1 | 56.20482 | 1 | 14.942698 | 14.942698 | 71.14751 |
| 2 | 0 | 1 | 56.20482 | 2 | 11.557058 | 26.499756 | 82.70457 |
| 2 | 0 | 1 | 56.20482 | 3 | 12.085305 | 38.585060 | 94.78988 |
| 3 | 1 | 0 | 58.66301 | 1 | 10.440660 | 10.440660 | 69.10367 |
| 3 | 1 | 0 | 58.66301 | 2 | 10.941420 | 21.382081 | 80.04509 |
| 3 | 1 | 0 | 58.66301 | 3 | 7.891597 | 29.273678 | 87.93669 |
| 4 | 1 | 1 | 61.38275 | 1 | 11.907053 | 11.907053 | 73.28980 |
| 4 | 1 | 1 | 61.38275 | 2 | 12.954674 | 24.861727 | 86.24448 |
| 4 | 1 | 1 | 61.38275 | 3 | 5.246137 | 30.107864 | 91.49061 |
| 4 | 1 | 1 | 57.93944 | 1 | 6.471137 | 6.471137 | 64.41058 |
| 4 | 1 | 1 | 57.93944 | 2 | 14.630242 | 21.101379 | 79.04082 |
| 4 | 1 | 1 | 57.93944 | 3 | 14.022991 | 35.124369 | 93.06381 |
4.1.2 Join Datasets
Go back to fan’s REconTools Package, R Code Examples Repository (bookdown site), or Intro Stats with R Repository (bookdown site).
<IP_ADDRESS> Join Panel with Multiple Keys
We have two datasets, one for student enrollment, panel over time, but some students do not show up on some dates. The other is a skeleton panel with all student ID and all dates. Often we need to join dataframes together, and we need to join by the student ID and the panel time Key at the same time. When students show up, there is a quiz score for that day, so the joined panel should have as data column quiz score
Student count is \(N\), total dates are \(M\). First we generate two panels below, then we join by both keys using left_join. First, define dataframes:
# Define
<- 4
it_N <- 3
it_M <- 'sid'
svr_id <- 'classday'
svr_date <- 'date_in_class'
svr_attend
# Panel Skeleton
<- as_tibble(matrix(it_M, nrow=it_N, ncol=1)) %>%
df_panel_balanced_skeleton rowid_to_column(var = svr_id) %>%
uncount(V1) %>%
group_by(!!sym(svr_id)) %>% mutate(!!sym(svr_date) := row_number()) %>%
ungroup()
# Print
kable(df_panel_balanced_skeleton) %>%
kable_styling_fc()
| sid | classday |
|---|---|
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 2 |
| 2 | 3 |
| 3 | 1 |
| 3 | 2 |
| 3 | 3 |
| 4 | 1 |
| 4 | 2 |
| 4 | 3 |
# Smaller Panel of Random Days in School
set.seed(456)
<- as_tibble(matrix(it_M, nrow=it_N, ncol=1)) %>%
df_panel_attend rowid_to_column(var = svr_id) %>%
uncount(V1) %>%
group_by(!!sym(svr_id)) %>% mutate(!!sym(svr_date) := row_number()) %>%
ungroup() %>% mutate(in_class = case_when(rnorm(n(),mean=0,sd=1) < 0 ~ 1, TRUE ~ 0)) %>%
filter(in_class == 1) %>% select(!!sym(svr_id), !!sym(svr_date)) %>%
rename(!!sym(svr_attend) := !!sym(svr_date)) %>%
mutate(dayquizscore = rnorm(n(),mean=80,sd=10))
# Print
kable(df_panel_attend) %>%
kable_styling_fc()
| sid | date_in_class | dayquizscore |
|---|---|---|
| 1 | 1 | 89.88726 |
| 2 | 1 | 96.53929 |
| 2 | 2 | 65.59195 |
| 2 | 3 | 99.47356 |
| 4 | 2 | 97.36936 |
Second, now join dataframes:
# Join with explicit names
<- df_panel_balanced_skeleton %>%
df_quiz_joined_multikey left_join(df_panel_attend,
by=(c('sid'='sid', 'classday'='date_in_class')))
# Join with setname strings
<- df_panel_balanced_skeleton %>%
df_quiz_joined_multikey_setnames left_join(df_panel_attend, by=setNames(c('sid', 'date_in_class'), c('sid', 'classday')))
# Print
kable(df_quiz_joined_multikey) %>%
kable_styling_fc()
| sid | classday | dayquizscore |
|---|---|---|
| 1 | 1 | 89.88726 |
| 1 | 2 | NA |
| 1 | 3 | NA |
| 2 | 1 | 96.53929 |
| 2 | 2 | 65.59195 |
| 2 | 3 | 99.47356 |
| 3 | 1 | NA |
| 3 | 2 | NA |
| 3 | 3 | NA |
| 4 | 1 | NA |
| 4 | 2 | 97.36936 |
| 4 | 3 | NA |
kable(df_quiz_joined_multikey_setnames) %>%
kable_styling_fc()
| sid | classday | dayquizscore |
|---|---|---|
| 1 | 1 | 89.88726 |
| 1 | 2 | NA |
| 1 | 3 | NA |
| 2 | 1 | 96.53929 |
| 2 | 2 | 65.59195 |
| 2 | 3 | 99.47356 |
| 3 | 1 | NA |
| 3 | 2 | NA |
| 3 | 3 | NA |
| 4 | 1 | NA |
| 4 | 2 | 97.36936 |
| 4 | 3 | NA |
<IP_ADDRESS> Stack Panel Frames Together
There are multiple panel dataframe, each for different subsets of dates. All variable names and units of observations are identical. Use DPLYR bind_rows.
# Define
<- 2 # Number of individuals
it_N <- 3 # Number of Months
it_M <- 'sid'
svr_id <- 'date'
svr_date
# Panel First Half of Year
<- as_tibble(matrix(it_M, nrow=it_N, ncol=1)) %>%
df_panel_m1tom3 rowid_to_column(var = svr_id) %>%
uncount(V1) %>%
group_by(!!sym(svr_id)) %>% mutate(!!sym(svr_date) := row_number()) %>%
ungroup()
# Panel Second Half of Year
<- as_tibble(matrix(it_M, nrow=it_N, ncol=1)) %>%
df_panel_m4tom6 rowid_to_column(var = svr_id) %>%
uncount(V1) %>%
group_by(!!sym(svr_id)) %>% mutate(!!sym(svr_date) := row_number() + 3) %>%
ungroup()
# Bind Rows
<- bind_rows(df_panel_m1tom3, df_panel_m4tom6) %>% arrange(!!!syms(c(svr_id, svr_date)))
df_panel_m1tm6
# Print
kable(df_panel_m1tom3) %>%
kable_styling_fc()
| sid | date |
|---|---|
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 2 |
| 2 | 3 |
kable(df_panel_m4tom6) %>%
kable_styling_fc()
| sid | date |
|---|---|
| 1 | 4 |
| 1 | 5 |
| 1 | 6 |
| 2 | 4 |
| 2 | 5 |
| 2 | 6 |
kable(df_panel_m1tm6) %>%
kable_styling_fc()
| sid | date |
|---|---|
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 1 | 5 |
| 1 | 6 |
| 2 | 1 |
| 2 | 2 |
| 2 | 3 |
| 2 | 4 |
| 2 | 5 |
| 2 | 6 |
4.2 Wide and Long
4.2.1 Long to Wide
Go back to fan’s REconTools Package, R Code Examples Repository (bookdown site), or Intro Stats with R Repository (bookdown site).
Using the pivot_wider function in tidyr to reshape panel or other data structures
<IP_ADDRESS> Panel Long Attendance Roster to Wide
There are \(N\) students in class, but only a subset of them attend class each day. If student \(id_i\) is in class on day \(Q\), the teacher records on a sheet the date and the student ID. So if the student has been in class 10 times, the teacher has ten rows of recorded data for the student with two columns: column one is the student ID, and column two is the date on which the student was in class. Suppose there were 50 students, who on average attended exactly 10 classes each during the semester, this means we have \(10 \cdot 50\) rows of data, with differing numbers of rows for each student. This is shown as df_panel_attend_date generated below.
Now we want to generate a new dataframe, where each row is a date, and each column is a student. The values in the new dataframe shows, at the \(Q^{th}\) day, how many classes student \(i\) has attended so far. The following results is also in a REconTools Function. This is shown as df_attend_cumu_by_day generated below.
First, generate the raw data structure, df_panel_attend_date:
# Define
<- 3
it_N <- 5
it_M <- 'student_id'
svr_id
# from : support/rand/fs_rand_draws.Rmd
set.seed(222)
<- as_tibble(matrix(it_M, nrow=it_N, ncol=1)) %>%
df_panel_attend_date rowid_to_column(var = svr_id) %>%
uncount(V1) %>%
group_by(!!sym(svr_id)) %>% mutate(date = row_number()) %>%
ungroup() %>% mutate(in_class = case_when(rnorm(n(),mean=0,sd=1) < 0 ~ 1, TRUE ~ 0)) %>%
filter(in_class == 1) %>% select(!!sym(svr_id), date) %>%
rename(date_in_class = date)
# Print
kable(df_panel_attend_date) %>%
kable_styling_fc()
| student_id | date_in_class |
|---|---|
| 1 | 2 |
| 1 | 4 |
| 2 | 1 |
| 2 | 2 |
| 2 | 5 |
| 3 | 2 |
| 3 | 3 |
| 3 | 5 |
Second, generate wider data structure, df_attend_cumu_by_day:
# Define
<- 'student_id'
svr_id <- 'date_in_class'
svr_date <- 'sid_'
st_idcol_prefix
# Generate cumulative enrollment counts by date
<- df_panel_attend_date %>% mutate(attended = 1)
df_panel_attend_date_addone kable(df_panel_attend_date_addone) %>%
kable_styling_fc()
| student_id | date_in_class | attended |
|---|---|---|
| 1 | 2 | 1 |
| 1 | 4 | 1 |
| 2 | 1 | 1 |
| 2 | 2 | 1 |
| 2 | 5 | 1 |
| 3 | 2 | 1 |
| 3 | 3 | 1 |
| 3 | 5 | 1 |
# Pivot Wide
<- df_panel_attend_date_addone %>%
df_panel_attend_date_wider pivot_wider(names_from = svr_id,
values_from = attended)
kable(df_panel_attend_date_wider) %>%
kable_styling_fc()
| date_in_class | 1 | 2 | 3 |
|---|---|---|---|
| 2 | 1 | 1 | 1 |
| 4 | 1 | NA | NA |
| 1 | NA | 1 | NA |
| 5 | NA | 1 | 1 |
| 3 | NA | NA | 1 |
# Sort and rename
# rename see: https://fanwangecon.github.io/R4Econ/amto/tibble/fs_tib_basics.html
<- sort(unique(df_panel_attend_date %>% pull(!!sym(svr_id))))
ar_unique_ids <- df_panel_attend_date_wider %>%
df_panel_attend_date_wider_sort arrange(!!sym(svr_date)) %>%
rename_at(vars(num_range('',ar_unique_ids))
list(~paste0(st_idcol_prefix, . , ''))
,
)kable(df_panel_attend_date_wider_sort) %>%
kable_styling_fc()
| date_in_class | sid_1 | sid_2 | sid_3 |
|---|---|---|---|
| 1 | NA | 1 | NA |
| 2 | 1 | 1 | 1 |
| 3 | NA | NA | 1 |
| 4 | 1 | NA | NA |
| 5 | NA | 1 | 1 |
# replace NA and cumusum again
# see: R4Econ/support/function/fs_func_multivar for renaming and replacing
<- df_panel_attend_date_wider_sort %>%
df_attend_cumu_by_day mutate_at(vars(contains(st_idcol_prefix)), list(~replace_na(., 0))) %>%
mutate_at(vars(contains(st_idcol_prefix)), list(~cumsum(.)))
kable(df_attend_cumu_by_day) %>%
kable_styling_fc()
| date_in_class | sid_1 | sid_2 | sid_3 |
|---|---|---|---|
| 1 | 0 | 1 | 0 |
| 2 | 1 | 2 | 1 |
| 3 | 1 | 2 | 2 |
| 4 | 2 | 2 | 2 |
| 5 | 2 | 3 | 3 |
The structure above is also a function in Fan’s REconTools Package, here the function is tested:
# Parameters
<- df_panel_attend_date
df <- 'student_id'
svr_id_i <- 'date_in_class'
svr_id_t <- 'sid_'
st_idcol_prefix
# Invoke Function
<- ff_panel_expand_longrosterwide(df, svr_id_t, svr_id_i, st_idcol_prefix)
ls_df_rosterwide <- ls_df_rosterwide$df_roster_wide
df_roster_wide_func <- ls_df_rosterwide$df_roster_wide_cumu
df_roster_wide_cumu_func
# Print
print(df_roster_wide_func)
print(df_roster_wide_cumu_func)
4.2.2 Wide to Long
Go back to fan’s REconTools Package, R Code Examples Repository (bookdown site), or Intro Stats with R Repository (bookdown site).
Using the pivot_wider function in tidyr to reshape panel or other data structures
<IP_ADDRESS> Generated Matrix by States to Long Table
A matrix of ev given states, rows are states and cols are shocks. Convert to Long table with shock and state values and ev.
Generated Matrix by States to Long Table where state values are stored as variables, with correct value labels for states:
- Generate a matrix
- Convert matrix to tibble
- Tibble make longer, and store column and row id var names
# Generate A Matrix
set.seed(123)
<- c(1.1,5.1)
ar_a <- seq(-2.5, 2.53, length.out=11)
ar_z = matrix(rnorm(ar_a*ar_z), nrow=length(ar_a), ncol=length(ar_z))
mt_ev
# Name Matrix
rownames(mt_ev) <- paste0('ai', seq(1:length(ar_a)))
colnames(mt_ev) <- paste0('zi', seq(1:length(ar_z)))
# to tibble
<- as_tibble(mt_ev) %>% rowid_to_column(var = "ai")
tb_ev
# longer
<- tb_ev %>%
tb_ev_long pivot_longer(cols = starts_with('zi'),
names_to = c('zi'),
names_pattern = paste0("zi(.*)"),
values_to = "ev") %>%
mutate(zi = as.numeric(zi))
# Merge with a and z values
<- tb_ev_long %>%
tb_ev_long left_join(as_tibble(ar_a) %>%
rowid_to_column(var = "ai") %>%
rename(a = value)
by = 'ai') %>%
, left_join(as_tibble(ar_z) %>%
rowid_to_column(var = "zi") %>%
rename(z = value),
by = 'zi') %>%
select(a,ai,z,zi,ev)
# Display
kable(tb_ev) %>% kable_styling_fc_wide()
| ai | zi1 | zi2 | zi3 | zi4 | zi5 | zi6 | zi7 | zi8 | zi9 | zi10 | zi11 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | -0.5604756 | 1.5587083 | 0.1292877 | 0.4609162 | -0.6868529 | 1.2240818 | -0.2301775 | 0.0705084 | 1.7150650 | -1.2650612 | -0.445662 |
| 2 | -0.2301775 | 0.0705084 | 1.7150650 | -1.2650612 | -0.4456620 | -0.5604756 | 1.5587083 | 0.1292877 | 0.4609162 | -0.6868529 | 1.224082 |
kable(tb_ev_long) %>% kable_styling_fc()
| a | ai | z | zi | ev |
|---|---|---|---|---|
| 1.1 | 1 | -2.500 | 1 | -0.5604756 |
| 1.1 | 1 | -1.997 | 2 | 1.5587083 |
| 1.1 | 1 | -1.494 | 3 | 0.1292877 |
| 1.1 | 1 | -0.991 | 4 | 0.4609162 |
| 1.1 | 1 | -0.488 | 5 | -0.6868529 |
| 1.1 | 1 | 0.015 | 6 | 1.2240818 |
| 1.1 | 1 | 0.518 | 7 | -0.2301775 |
| 1.1 | 1 | 1.021 | 8 | 0.0705084 |
| 1.1 | 1 | 1.524 | 9 | 1.7150650 |
| 1.1 | 1 | 2.027 | 10 | -1.2650612 |
| 1.1 | 1 | 2.530 | 11 | -0.4456620 |
| 5.1 | 2 | -2.500 | 1 | -0.2301775 |
| 5.1 | 2 | -1.997 | 2 | 0.0705084 |
| 5.1 | 2 | -1.494 | 3 | 1.7150650 |
| 5.1 | 2 | -0.991 | 4 | -1.2650612 |
| 5.1 | 2 | -0.488 | 5 | -0.4456620 |
| 5.1 | 2 | 0.015 | 6 | -0.5604756 |
| 5.1 | 2 | 0.518 | 7 | 1.5587083 |
| 5.1 | 2 | 1.021 | 8 | 0.1292877 |
| 5.1 | 2 | 1.524 | 9 | 0.4609162 |
| 5.1 | 2 | 2.027 | 10 | -0.6868529 |
| 5.1 | 2 | 2.530 | 11 | 1.2240818 |


Cassini-Huygens NASA/JPL This joint NASA/ESA spacecraft, launched in 1997, reached its destination, Saturn, in 2004. Since then it has been in orbit around the ringed world, taking one stunning snapshot after another of the planets rings, moons and weather. The Hugyens probe separated from Cassini and made a special trip to the moon Titan, where it descended through the atmosphere and landed on solid ground in 2005. Though previous spacecraft have visited Saturn, Cassini is the first to orbit it and study the system in detail.


Are extensions useful?
Yes
What are they good for?
Performance, integration, low-level operations
Are they difficult to write?
Rather yes
Should you write one?
Probably not, use alternatives
What if you do write an extension?
Fame and glory everlasting
Can you achieve cool stuff?
Definitely yes