Assignment 1 - build a calculator
- Output field displays result
- Buttons for numbers
- Buttons for add, subtract, mul, div, evaluate, reset
- Optional: decimals, brackets, backspace
- When typing, show calculation. On evaluate, show result
Assignment 2 - build a todo app
- Input field to get todo item, OK button to store
- Store todo items in local storage
- Add a list of todo items on screen, update from local storage
- Load existing todo items on opening page
- Add checkbox to set "done"
Assignment 3 - load todo items from backend
- Get nodejs and express up and running
- Store todo items in express in memory
- rewrite your todo app to get / set todo items from express
Assignment 4 - draw your route on screen
- Show canvas on screen
- Get location from geolocation API, continuously
- With every update of geolocation, draw difference on canvas
- Load your app on your phone
- We're taking a walk together
Todo
- SVG
- Web sockets
- Web workers
- Media controls
- Form validation
- Closures
- Promises and Callbacks
- CSS flexbox, media queries, grid
- CSS transitions, animations, transforms


| Methods' Details |
setAlpha
- Description
- Set overall transparency of the sprite.
This method is useful for e.g. fading in/out of animations.
Please note that if this sprite is not animated, the
associated XSpriteCanvas does not update changed
sprites automatically, but has to be told to do so via
XSpriteCanvas::updateScreen().
- Parameter nAlpha
- New global alpha value to composite this sprite with the
background. Valid range is [0,1].
- Throws
- com::sun::star::lang::IllegalArgumentException
if nAlpha is not within the permissible range.
|
|
move
- Description
- Move sprite to the specified position.
The position specified here is first transformed by the
combined view and render transformation. The resulting
position is then used as the output position (also in device
coordinates) of the rendered sprite content.
Please note that if this sprite is not animated, the
associated ::XSpriteCanva does not update changed sprites
automatically, but has to be told to do so via
XSpriteCanvas::updateScreen().
- Parameter aNewPos
- The new position, in user coordinate space, to move the sprite to.
- Parameter aViewState
- The viewstate to be used when interpreting aNewPos.
- Parameter aRenderState
- The renderstate to be used when interpreting aNewPos.
- Throws
- com::sun::star::lang::IllegalArgumentException
if one of the view and renderstate parameters are outside the
specified range.
|
|
transform
- Description
- Apply a local transformation to the sprite.
The given transformation matrix locally transforms the sprite
shape. If this transformation contains translational
components, be aware that sprite content moved beyond the
sprite area (a box from (0,0) to (spriteWidth,spriteHeight))
might (but need not) be clipped. Use
XSprite::move to change the sprite location
on screen. The canvas implementations are free, if they have a
cached representation of the sprite at hand, to transform only
this cached representation (e.g. a bitmap), instead of
re-rendering the sprite from first principles. This is usually
the case for an implementation of a XCustomSprite
interface, since it typically has no other cached pictorial
information at hand.
Please note that if this sprite is not animated, the
associated XSpriteCanvas does not update changed
sprites automatically, but has to be told to do so via
XSpriteCanvas::updateScreen().
- Parameter aTransformation
- The transformation to apply to the sprite shape.
- Throws
- com::sun::star::lang::IllegalArgumentException
if the given transformation matrix is singular.
|
|
clip
- Description
- Apply a clipping to the shape output.
The given clip poly-polygon is always interpreted in device
coordinate space. As the sprite has its own local coordinate
system, with its origin on screen being equal to its current
position, the clip poly-polygon's origin will always coincide
with the sprite's origin. Furthermore, if any sprite
transformation is set via transform(), the clip is subject to
this transformation, too. The implementation is free, if it
has a cached representation of the sprite at hand, to
clip-output only this cached representation (e.g. a bitmap),
instead of re-rendering the sprite from first principles. This
is usually the case for an implementation of a
XCustomSprite interface, since it typically has
no other cached pictorial information at hand.
Please note that if this sprite is not animated, the
associated XSpriteCanvas does not update changed
sprites automatically, but has to be told to do so via
XSpriteCanvas::updateScreen().
Specifying an empty interface denotes no clipping,
i.e. everything contained in the sprite will be visible
(subject to device-dependent constraints, of
course). Specifying an empty XPolyPolygon2D, i.e. a
poly-polygon containing zero polygons, or an XPolyPolygon2D
with any number of empty sub-polygons, denotes the NULL
clip. That means, nothing from the sprite will be visible.
- Parameter aClip
- The clip poly-polygon to apply.
|
|
setPriority
| void |
| setPriority( |
[in] double |
nPriority ); |
- Description
- Set sprite priority.
The sprite priority determines the order of rendering relative
to all other sprites of the associated canvas. The higher the
priority, the later will the sprite be rendered, or, in other
words, the closer to the screen surface the sprite is shown.
- Parameter nPriority
- New sprite priority value to serve as the sort key when
determining sprite rendering order. Avoid NaNs and other
irregular floating point values here, the order position for
sprites with such a priority value is undefined.
|
|
show
- Description
- Make the sprite visible.
This method makes the sprite visible on the canvas it was
created on.
|
|
hide
- Description
- Make the sprite invisible.
This method makes the sprite invisible.
|
|
Copyright © 2013, The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache, the Apache feather logo, Apache OpenOffice and OpenOffice.org are trademarks of The Apache Software Foundation. Other names may be trademarks of their respective owners.


Character: Dialog configuration
In the Dialog configuration tab
we can define the dialog configuration of the Character.
Colors of the player's conversation lines
In this place, we define the dialog appearance:
-
Font front color: color for
the letters.
-
Font border color: color for
the letters border.
-
If we enable Show speech bubble:
-
Bubble background color: color
for the dialog container.
-
Bubble border color: color
tor the dialog container border.
Current voice
In this section, we can enable voice synthesizer. This option is still
on development phase and only supports English voices.


"Material featured on this Portal may be reproduced free of charge after taking proper prior permission by sending a mail to us. However, the material has to be reproduced accurately and not to be used in a derogatory manner or in a misleading context. Wherever the material is being published or issued to others, the source must be prominently acknowledged. However, the permission to reproduce this material shall not extend to any material which is identified as being copyright of a third party. Authorisation to reproduce such material must be obtained from the copyright holders concerned."


Storyboard StudyRightObjectModelNavigationAndQueries
Extend the class model:
Full class model from code:
How to navigate and query an object model.
Start: Example object structure:
Step 1: Simple set based navigation:
double assignmentPoints = university.getRooms().getAssignments().getPoints().sum(); double donePoints = university.getStudents().getDone().getPoints().sum();
Results in:
Sum of assignment points: 23.0. Sum of points of assignments that have been done by at least one students: 15.0.
Check: Assignment points: 23.0 actual 23.0
Check: donePoints: 15.0 actual 15.0
Step 2: Rooms with assignments not yet done by Karli:
AssignmentSet availableAssignments = university.getRooms().getAssignments().minus(karli.getDone()); RoomSet rooms = availableAssignments.getRoom();
Results in:
(senate math 17, gymnasium sports 25)
Check: rooms.size(): 2 actual 2
RoomSet rooms17 = university.getRooms().filterCredits(17); RoomSet roomsGE20 = university.getRooms().filterCredits(20, Integer.MAX_VALUE);
Results in:
rooms17: (senate math 17) roomsGE20: (gymnasium sports 25, 7422 Software Engineering 42)
Step 4: Filter for attribute greater than:
// Java 8: // (Room elem) -> elem.getCredits() > 20 RoomSet roomsEven = university.getRooms().filter(value -> value.getCredits() % 2 == 0);
Results in:
(7522 arts 16, The End exam 0, 7422 Software Engineering 42)
TeachingAssistantSet taStudents = university.getRooms().getStudents().instanceOfTeachingAssistant();
(Karli 4242 0 0 0)
Step 6: Write operations on sets:
university.getStudents().withMotivation(42);
Step 7: Rooms with two students that are friends (and need supervision):
RoomPO roomPO = university.getRooms().createRoomPO(); StudentPO stud1PO = roomPO.createStudentsPO(); roomPO.createStudentsPO().createMotivationCondition(42).createFriendsLink(stud1PO); rooms = roomPO.allMatches();
Results in:
(gymnasium sports 25)
Step 8: Rooms with two students with low motivation that are friends (and need supervision):
roomPO = university.getRooms().createRoomPO(); stud1PO = roomPO.createStudentsPO(); final StudentPO stud2PO = roomPO.createStudentsPO().createMotivationCondition(0, 50); stud2PO.createFriendsLink(stud1PO); rooms = roomPO.allMatches();
Results in:
(gymnasium sports 25)
Step 9: Rooms with two students without supervision that are friends and add teaching assistance:
UniversityPO uniPO = new UniversityPO(university); roomPO = uniPO.createRoomsPO(); stud1PO = roomPO.createStudentsPO().createMotivationCondition(0, 42); roomPO.createStudentsPO().createFriendsLink(stud1PO); roomPO.createTasLink(null); roomPO.createTasPO(CREATE); rooms = roomPO.allMatches();
Results in:
(gymnasium sports 25)
Step 10: TAs as students in a room:
roomPO = university.getRooms().createRoomPO(); stud1PO = roomPO.createStudentsPO(); TeachingAssistantPO taPO = stud1PO.instanceOf(new TeachingAssistantPO()); TeachingAssistantSet taSet = taPO.allMatches();
Step 11: Double motivation of all students:
roomPO = university.getRooms().createRoomPO(); stud1PO = roomPO.createStudentsPO(); for (Match match : (Iterable<Match>) roomPO.getPattern()) { Student currentMatch = stud1PO.getCurrentMatch(); currentMatch.withMotivation(currentMatch.getMotivation() * 2); // or more simple: stud1PO.withMotivation(stud1PO.getMotivation() * 2); Room assertMatch = roomPO.getCurrentMatch(); if (match.number == 1) { Assert.assertEquals("Karli", currentMatch.getName()); Assert.assertEquals("senate", assertMatch.getName()); Assert.assertEquals("math", assertMatch.getTopic()); Assert.assertEquals(17, assertMatch.getCredits()); } else if (match.number == 2) { Assert.assertEquals("Abu", currentMatch.getName()); Assert.assertEquals("gymnasium", assertMatch.getName()); Assert.assertEquals("sports", assertMatch.getTopic()); Assert.assertEquals(25, assertMatch.getCredits()); } else if (match.number == 3) { Assert.assertEquals("Alice", currentMatch.getName()); Assert.assertEquals("gymnasium", assertMatch.getName()); Assert.assertEquals("sports", assertMatch.getTopic()); Assert.assertEquals(25, assertMatch.getCredits()); } // System.out.println("match " + match.number + ": " + currentMatch + " // in room " + roomPO.getCurrentMatch()); }
Step 12: lure students from other rooms into math room:
roomPO = new RoomPO(mathRoom); stud1PO = roomPO.createPath(r -> ((Room) r).getDoors().getStudents(), new StudentPO()); stud1PO.startCreate(); stud1PO.createInLink(roomPO); stud1PO.allMatches();
Check: New students in math room: 3 actual 3


Standards and Testing Agency (STA) issues emailed assessment updates weekly during term time to early years providers, primary schools, local authorities, academy trusts and others with an interest in primary assessment.
Published on Tuesdays, unless there are exceptional circumstances (such as to notify readers of a ministerial announcement), all issues aimed at a wide audience will be published in this collection.
You can sign up to alerts on our homepage so you know when we have updated this page. If you have a Department for Education (DfE) number you can also
subscribe
to our assessment updates and receive them directly. Your DfE number will be 7 digits if you are from a school or academy trust, and 3 digits if you are from a local authority.


Dear users,
To celebrate the launching of KMD on Huobi Global, we are now initiating the promotion “KMD is launched! Trade to Win 50,000 KMD!” from 17:00 on March 1 to 17:00 on March 8, 2019 (GMT+8...
jl777c07-Mar-19 06:53 AM
who knows how much KMD they actually have. it seems they must be trading among themselves
Mark8107-Mar-19 06:55 AM
that list only involves people who have registered and are verified users. dont know what are limits for non registered users.
and there are lot of existing volume from else where since those accounts holds volume from beginning of contests.
Mark8107-Mar-19 07:06 AM
By watching huobis orderbooks you can see something doesn't add up. there is not enough liquidity for such volumes. price would skyrocket with that volume.
jl777c07-Mar-19 07:20 AM
off book orders?
some exchanges let you put orders that dont appear publicly, but they fill if a matching order comes in
huobi does have a lot of very big traders for whom a million per day is just a small test trade
and with all the recent news about KMD, maybe was already curious and making a "free 50000 KMD" pushed them over the edge to start trading
then so did the other guy
and they now self trade to their other account to boost volumes to crazy levels
just a theory and possible explanation for what we see
big question is what happens after the trade competition
these are huobi traders trading to win the trading competition
Cryptoon07-Mar-19 09:11 AM
If you have a million kmd and dump it after the competition, the damage will be bigger than the 50k kmd bounty :p
Keppie07-Mar-19 10:49 AM
About 22 hours left on the trading comp on Huobi
As they state here, there is a ranking which is updated on march 4 & 6. Can anyone help me out with a link to that
Vertigo07-Mar-19 10:58 AM
I can put 10 kmd to keep the competition for another month.
Dear users,
To celebrate the launching of KMD on Huobi Global, we are now initiating the promotion “KMD is launched! Trade to Win 50,000 KMD!” from 17:00 on March 1 to 17:00 on March 8, 2019 (GMT+8...
They just update the article it seems, got it
So in 6 days the 'guy' bought/sold 3M KMD
More like a bot
I call him the 24kmd bot lol. So obvious
my gut tells me last hours of the comp will give us even more volume
Exchange/Margin page by Huobi Global, includes real-time transaction price, tradingview, order history, and market trades, providing professional, safe and quick transaction.
But please check this out, wash trading over here
Check how every 6 seconds a sell order for 0.0023980 sats is placed and immediatly bought
richardt07-Mar-19 11:24 AM
Huobi is making the wash-trading on Coinbene look like child's play
Keppie07-Mar-19 11:30 AM
They upped it to 300kmd every 6sec lol
Not sure what the deal is with fees on huobi. But losing this trading comp with 3mil kmd traded must hurt lol
50k kmd doesnt even break even the trading fees
jl777c07-Mar-19 11:35 AM
what are the trading fees? 1%??
50K KMD would cover 50 million trading at 0.1%
Keppie07-Mar-19 11:37 AM
Ok mis calcs
it's 0.2%
But im sure the huobi whales own a ton of huobi tokens; equivalent of bnb
Vertigo07-Mar-19 12:50 PM
If we get to a $100 dollars I will buy a Komodo dragon and name it James.
And feed it chicken nuggets.
2
Keppie07-Mar-19 01:00 PM
Ballin'
freakbros07-Mar-19 01:08 PM
And Starbucks
siu - Chainmakers07-Mar-19 01:08 PM
maybe huobi was the whale accumulating in binance?
Vertigo07-Mar-19 01:14 PM
Huobibro?
siu - Chainmakers07-Mar-19 01:16 PM
could be
BoBot-BUY KMD07-Mar-19 02:25 PM
is ARRR on barterdex?
ComputerGenie 👴👴👴07-Mar-19 02:25 PM
no
BoBot-BUY KMD07-Mar-19 02:25 PM
how come?

BoBot-BUY KMD07-Mar-19 02:32 PM
Wazzup07-Mar-19 02:32 PM
Gold looks dog shit tho
BoBot-BUY KMD07-Mar-19 02:33 PM
yea it fell back but kinda looks like a cup and handle forming
I put heaps/all of my super annuation into some gold miners in 2017, and while gold hasnt done well, they are up like 70-130% in the same time (edited)
so either, they figured out how to mine gold waaayy cheaper or people are specualting that gold si going to rise a lot.
BoBot-BUY KMD07-Mar-19 02:37 PM
I have a feeling JPM will launch a silver backed coin with all the physical silver they are hoarding.... I could see them doing that one day
ComputerGenie 👴👴👴07-Mar-19 02:37 PM
Gold looks dog shit tho
yeah, it sux that all the gold above ground is only worth 8.64 trillion US$(edited)
gold as a store of value in modern society is only slightly less silly than cowry shells
Wazzup07-Mar-19 02:42 PM
that s not how gold works as a store of value lol
ComputerGenie 👴👴👴07-Mar-19 02:42 PM
but, there`s about 2 trillion US$ just waiting for you to dig up if you really don't like your tiny investment at $1,288.87 an oz(edited)
that s not how gold works as a store of value lol
oh? please elaborate....
Wazzup07-Mar-19 02:43 PM
"gold as a store of value in modern society is only slightly less silly than cowry shells" you first...
ComputerGenie 👴👴👴07-Mar-19 02:44 PM
because it's not the 1800s and it's only real non-utility value is, quite literally, the exact same as when societies used cowry shells
melts down all the chains his cousins wore in the '80s and retires because this convo is a snoozefest
Wazzup07-Mar-19 02:47 PM
Jewelry: The Primary Use of Gold
Financial Gold: Coinage, Bullion, Backing
Uses of Gold in Electronics
Uses of Gold in Computers
Uses of Gold in Dentistry
Medical Uses of Gold
Uses of Gold in Aerospace
Uses of Gold in Awards & Status Symbols
Uses of Gold in Glassmaking
Gold Gilding and Gold Leaf
Hell no, there is a flat price floor for gold that will be sustained if speculation goes away and for that it has intrinsic value(edited)
ComputerGenie 👴👴👴07-Mar-19 02:49 PM
I love that I say "non-utility" and your response is utility, ty for being predictably wrong
based on your premise, one should stop investing in gold and buy shares of white oak
Wazzup07-Mar-19 02:52 PM
how did you come up with that lol ?
Yes, a lot of things have intrinsic value, but investing in something purely based that is retarded.(edited)
ComputerGenie 👴👴👴07-Mar-19 02:53 PM
because it has more utility and is more scarce at the higher utility levels(edited)
naturally increasing store of value
literally the older it is, the more utility it has
Wazzup07-Mar-19 02:54 PM
Yeah, as if the world will not evolve(edited)
ComputerGenie 👴👴👴07-Mar-19 02:55 PM
Buy your White Oak saplings now!(edited)
1
Wazzup07-Mar-19 02:55 PM
You speculate on the future appreciation in value of something
if you tell me long term you see white oak appreciating in price
....
ComputerGenie 👴👴👴07-Mar-19 02:56 PM
Yeah, as if the world will not evolve
Yup, right past the concept of gold as a "scarce resource" (we literally throw the shit away) and a useful store of value (edited)
Wazzup07-Mar-19 02:57 PM
scarcity doesn t imply value
ComputerGenie 👴👴👴07-Mar-19 02:57 PM
goes back to diking with js because that makes more sense than this conversation
blubbi07-Mar-19 03:37 PM
gold is undervalued
ComputerGenie 👴👴👴07-Mar-19 03:38 PM
based on.....?
blubbi07-Mar-19 03:38 PM
future utility
ComputerGenie 👴👴👴07-Mar-19 03:39 PM
such as.......?
blubbi07-Mar-19 03:45 PM
im not here to explain u the world, but if technics continue to get smaller and smaller there some natural boarders, take a look at electrical conductivity, specific thermal conductivity


'He's going to come in fit and healthy': Chiefs shoot down Aaron Cruden's injury concerns
by Online EditorsThe Chiefs aren’t worried about Aaron Cruden’s recent injury history in the wake of his return to the Hamilton franchise.
Cruden will return to Super Rugby next year with the club he won two titles with over a six-year span after spending two seasons in France with Top 14 outfit Montpellier.
During his time in Europe, though, the 30-year-old playmaker sustained a prolonged injury run, with a troublesome calf proving to be particularly prone to keeping him sidelined.
Continue reading below…
However, Chiefs CEO Michael Collins told Stuff that the side has full faith in Cruden’s ability to stay injury free throughout his one-year deal.
“We’ve spoken to Aaron and watched some of his games, and a couple of the injuries he did suffer in France were contact injuries and we always knew he was going to come right,” Collins said.
“But the driver for us was he has such a history with the Chiefs, he’s a world-class first five-eighth, we’ve got some really good young backs coming through and we thought his recruitment would serve two purposes – to help drive the team round the field, and also to be an older voice and someone for those younger players to learn off.
“We know that he’s going to come in fit and healthy, so we thought it’d be better to get his family settled, focus on that, then join the team after the Christmas break.”
The 50-cap All Black, who played his last test for New Zealand in the drawn test against the British and Irish Lions in Auckland two years ago, will link up with the Chiefs in January.
The Chiefs will kick-off their 2020 Super Rugby campaign against the Blues at Eden Park on January 31.
In other news:


pages
This website is a responsive and interactive welcome page that displays the local time and date of the user, as well as the current weather at UConn.
This website is a mock landing page for a lip kit by Nyx Cosmetics.
This webpage is an interactive site that allows users to enter text fields and then display those inputs in a pre-formatted Mad Lib, using JavaScript.
This webpage is a research showcase about the capabilities of CSS animation.


WARNINGS AND PRECAUTIONS
DO NOT SWALLOW. Keept out of reach of children under 6 years of age. Read all instructions and prescribing information before using this product.
Outer Carton
Tube Label
DIRECTIONS FOR USE: This prescription toothpaste is recommended for adults and children 6 years of age and older. Use twice daily as your normal dentifrice or as directed by your dental professional.
- Apply a thin ribbon or pea-sized amount of Fluoridex Daily Defense® Sensitivity Relief Toothpaste to a toothbrush and brush thoroughly on all tooth surfaces for at least one minute.
- After use, adults expectorate. For best results do not eat, drink, or rinse for 30 minutes. Pediatric patients age 6-16, expectorate after use and rinse mouth thoroughly.
STORAGE AND HANDLING SECTION: Store at controlled room temperature 15°-30°C (59°-86°F)
INDICATIONS AND USAGE: Prescription fluoride toothpaste for use as part of a professional program for the prevention and control of dental caries.
INACTIVE INGREDIENTS: Cellulose Gum, D&C Yellow No. 10, FD&C Blue No. 1, Flavor, Glycerin, Mica (and) Titanium Dioxide, Poloxamer 234, Silica, Sodium Lauryl Sulfate, Sodium Saccharin, Sorbitol, Water, Xylitol


Lecture 1: Introduction, Quadrature, Crude Monte Carlo, Importance Sampling, Cross Entropy Method Preliminaries
- Video recordings: Part 1, Part 2
- Lecture slides: as Jupyter notebook, as Jupyter slideshow
- Quiz 1: pdf, solution
Lecture 2: Cross Entropy Method for Rare Event Estimation and Optimization, Acceptance-Rejection algorithm, Markov Chain Preliminaries
- Video recordings: Part 1, Part 2
- Lecture slides: as Jupyter notebook, as Jupyter slideshow
- Quiz 2: pdf, solution
- A note on the cross-entropy method to help with quiz 2: pdf.
Lecture 3: Markov Chain Monte Carlo (MCMC), Improved Cross Entropy Method
- Video recordings: Part 1, Part 2
- Lecture slides: as Jupyter notebook, as Jupyter slideshow
- Quiz 3: pdf, solution
Lecture 4: MCMC Details, and some Machine Learning Overview.
- Video recordings: Part 1, Part 2
- Lecture slides: as Jupyter notebook, as Jupyter slideshow
Course materials from 2020.


National University of Singapore
Bachelor of Computing (Honours) in Information Systems
Aug 2017 - Present
The programme put emphasize on technologies that are relevant today and can be used to solve business problems.
Full-stack web development and data analytics are some of the technical skills taught. It also enables us to apply technical
skills into the business by offering courses such as Business and Technical Communications, IT Project Management, and IT Leadership.
SMAK 7 BPK Penabur Jakarta
Specialization in Natural Sciences (Physics, Chemistry, Biology)
Jul 2014 - Jun 2017
- Ranked 3rd in the cohort among over 120 students.


Getting started with JavaScript Object Notation. A JSON tutorial for Absolute Beginners
If your WordPress site is set up to show the full length articles
Workflow tips and tricks for Adobe In-Design
Creating sub-domains gives you the ability to create shortcuts
I love the JQuery tagline…write less, do more.


About Me
Lorem Khaled Ipsum is a major key to success. It’s important to use cocoa butter. It’s the key to more success, why not live smooth? Why live rough? They never said winning was easy. Some people can’t handle success, I can. Every chance I get, I water the plants, Lion! Every chance I get, I water the plants, Lion! Hammock talk come soon. Surround yourself with angels, positive energy, beautiful people, beautiful souls, clean heart, angel. The ladies always say Khaled you smell good, I use no cologne. Cocoa butter is the key. Special cloth alert
Connect with Me


Distraction List
Small trivial tasks can occupy your mind. Write these down for later so you can focus on things that are important right now.


{#
#} {#
#} {#
#} {#
#} {#
#} {#
#}
Visualize Your Research
and surf the academia
{#
Go
#}
author
study fields
key words
185,915,481
Papers
89,421,970
Authors
25,659
Affiliations
720,335
Concepts
765,217
Visitors
Data Visualization
{# 第一张图片#}
Subject field ontology relational data and visualization
Basic in PDF paper generate a knowledge graph
{% csrf_token %}
Upload
{##} {##}


{% extends "withoutnav_template.html" %} {% from "components/page-footer.html" import page_footer %} {% block per_page_title %} {{ title }} {% endblock %} {% block maincolumn_content %}
For security, we need to check if you still have access to your email address.
We’ve sent you a link to sign in to Notify. The link will open in a new browser window, so you can close this one.
{{ page_footer( secondary_link=url_for('main.email_not_received', next=redirect_url), secondary_link_text='Not received an email?' ) }}


|
libpqxx 4.0
|
Standard back-end transaction, templatized on isolation level. More...
#include <transaction.hxx>
Public Types | |
| typedef isolation_traits < ISOLATIONLEVEL > | isolation_tag |
| If nothing else is known, our isolation level is at least read_committed. | |
Public Member Functions | |
| transaction (connection_base &C, const std::string &TName) | |
| Create a transaction. | |
| transaction (connection_base &C) | |
| virtual | ~transaction () throw () |
Standard back-end transaction, templatized on isolation level.
This is the type you'll normally want to use to represent a transaction on the database.
While you may choose to create your own transaction object to interface to the database backend, it is recommended that you wrap your transaction code into a transactor code instead and let the transaction be created for you.
If you should find that using a transactor makes your code less portable or too complex, go ahead, create your own transaction anyway.
Usage example: double all wages
extern connection C; work T(C); try { T.exec("UPDATE employees SET wage=wage*2"); T.commit(); // NOTE: do this inside try block } catch (const exception &e) { cerr << e.what() << endl; T.abort(); // Usually not needed; same happens when T's life ends. }
| typedef isolation_traits<ISOLATIONLEVEL> pqxx::transaction< ISOLATIONLEVEL, READWRITE >::isolation_tag |
If nothing else is known, our isolation level is at least read_committed.
Reimplemented from pqxx::transaction_base.
| pqxx::transaction< ISOLATIONLEVEL, READWRITE >::transaction | ( | connection_base & | C, |
| const std::string & | TName | ||
| ) | [explicit] |
Create a transaction.
| C | Connection for this transaction to operate on |
| TName | Optional name for transaction; must begin with a letter and may contain letters and digits only |
References pqxx::transaction_base::Begin().
| pqxx::transaction< ISOLATIONLEVEL, READWRITE >::transaction | ( | connection_base & | C | ) | [explicit] |
References pqxx::transaction_base::Begin().
| virtual pqxx::transaction< ISOLATIONLEVEL, READWRITE >::~transaction | ( | ) | throw () [virtual] |
References pqxx::transaction_base::conn(), and pqxx::transaction_base::End().


--- title: "Estimating causal effects from aggregated data" author: "Mikael Lundqvist" date: '2021-05-18' slug: estimating-causal-effects-from-aggregated-data tags: - R Markdown - regression categories: R ---
The publically available datasets from Statistics Sweden are aggregated tables. Groups with fewer than five records are filtered out not to have any individual data being made public.
In this post, I am going to investigate with what precision it is possible to estimate the causal effect of predictors using aggregated data. I will use the dataset CPS1988 which is contained in the AER library. Cross-section data originating from the March 1988 Current Population Survey by the US Census Bureau.
I will estimate the average treatment effect on wage for ethnicity and experience respectively. I will subclassify the predictors’ education and experience. I will balance on the observed confounders and make no attempts to handle unobserved covariates. I will not try to draw any conclusions on causal effects based on SUTVA assumptions.
First, define libraries and functions.
library (tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.3 v purrr 0.3.4
## v tibble 3.1.0 v dplyr 1.0.5
## v tidyr 1.1.3 v stringr 1.4.0
## v readr 1.4.0 v forcats 0.5.1
## Warning: package 'ggplot2' was built under R version 4.0.3
## Warning: package 'tibble' was built under R version 4.0.5
## Warning: package 'tidyr' was built under R version 4.0.5
## Warning: package 'readr' was built under R version 4.0.3
## Warning: package 'dplyr' was built under R version 4.0.5
## Warning: package 'forcats' was built under R version 4.0.3
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library (AER)
## Warning: package 'AER' was built under R version 4.0.5
## Loading required package: car
## Warning: package 'car' was built under R version 4.0.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.0.3
##
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
##
## recode
## The following object is masked from 'package:purrr':
##
## some
## Loading required package: lmtest
## Warning: package 'lmtest' was built under R version 4.0.4
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.0.5
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Loading required package: sandwich
## Warning: package 'sandwich' was built under R version 4.0.3
## Loading required package: survival
## Warning: package 'survival' was built under R version 4.0.5
library (bnlearn)
## Warning: package 'bnlearn' was built under R version 4.0.3
library (PerformanceAnalytics)
## Loading required package: xts
## Warning: package 'xts' was built under R version 4.0.3
##
## Attaching package: 'xts'
## The following objects are masked from 'package:dplyr':
##
## first, last
##
## Attaching package: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
##
## legend
library (tableone)
## Warning: package 'tableone' was built under R version 4.0.4
library (Matching)
## Warning: package 'Matching' was built under R version 4.0.5
## Loading required package: MASS
##
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
## ##
## ## Matching (Version 4.9-9, Build Date: 2021-03-15)
## ## See http://sekhon.berkeley.edu/matching for additional documentation.
## ## Please cite software as:
## ## Jasjeet S. Sekhon. 2011. ``Multivariate and Propensity Score Matching
## ## Software with Automated Balance Optimization: The Matching package for R.''
## ## Journal of Statistical Software, 42(7): 1-52.
## ##
library (WeightIt)
## Warning: package 'WeightIt' was built under R version 4.0.5
library (lavaan)
## Warning: package 'lavaan' was built under R version 4.0.5
## This is lavaan 0.6-8
## lavaan is FREE software! Please report any bugs.
library (tidySEM)
## Registered S3 methods overwritten by 'tidySEM':
## method from
## print.mplus.model MplusAutomation
## print.mplusObject MplusAutomation
## summary.mplus.model MplusAutomation
##
## Attaching package: 'tidySEM'
## The following objects are masked from 'package:bnlearn':
##
## nodes, nodes<-
library (cobalt)
## Warning: package 'cobalt' was built under R version 4.0.4
## cobalt (Version 4.3.1, Build Date: 2021-03-30 09:50:18 UTC)
library (jtools)
## Warning: package 'jtools' was built under R version 4.0.5
##
## Attaching package: 'jtools'
## The following object is masked from 'package:tidySEM':
##
## get_data
# Argument: Vector with binned values; Value: Numeric vector where each value is the mean of the binwidth
unbin_bin <- function(x){
unbin_x <- function(x) (parse_number(unlist(strsplit(as.character(x), ",")))[1] + parse_number(unlist(strsplit(as.character(x), ",")))[2])/2
unlist(map(x, unbin_x))
}
data(CPS1988)
CPS1988_n <- CPS1988 %>%
mutate(education = as.numeric(education)) %>%
mutate(experience = as.numeric(experience)) %>%
mutate(region = as.numeric(region)) %>%
mutate(smsa = as.numeric(smsa)) %>%
mutate(parttime = as.numeric(parttime)) %>%
mutate(ethnicity = as.numeric(ethnicity))
The correlation chart shows that many predictors are correlated with the response variable but also that many predictors are correlated with each other.
chart.Correlation(CPS1988_n, histogram = TRUE, pch = 19)
A Directed Ascyclical Graph (DAG) is a useful tool to identify backdoor paths, confounders, mediators and colliders. A DAG is usually constructed by expert knowledge in the problem domain. There are also algorithms for Bayesian networks that can estimate a DAG based on the statistical properties of the data, these estimations need to be validated against expert knowledge. I will estimate a DAG using a Bayesian network, the Hill Climbing (HC) algorithm.
hcmodel <- hc(CPS1988 %>%
mutate(education = as.numeric(education)) %>%
mutate(experience = as.numeric(experience)))
plot(hcmodel)
Structural Equation Modeling (SEM) is a tool to represent a system of regressions. I will use Lavaan to represent the DAG from the Bayesian network above.
semmodel = '
education ~ wage
wage ~ parttime
experience ~ wage
experience ~ parttime
wage ~ ethnicity
region ~ ethnicity
region ~ smsa
wage ~ smsa
wage ~ region
education ~ region
education ~ parttime
education ~ smsa
smsa ~ ethnicity
experience ~ education
experience ~ ethnicity
parttime ~ ethnicity
'
semfit <- sem(semmodel,
data = CPS1988_n)
## Warning in lav_data_full(data = data, group = group, cluster = cluster, : lavaan
## WARNING: some observed variances are (at least) a factor 1000 times larger than
## others; use varTable(fit) to investigate
graph_sem(model = semfit)
Since ethnicity is a binary variable I will use the Match algorithm to find individuals that are as similar as possible from the two groups African American and Caucasian. I will do a greedy matching based on Mahalanobis distance.
xvars <- c("education", "experience", "smsa", "region", "parttime")
print(CreateTableOne(vars = xvars, strata = "ethnicity", data = CPS1988, test = FALSE), smd = TRUE)
## Stratified by ethnicity
## cauc afam SMD
## n 25923 2232
## education (mean (SD)) 13.13 (2.90) 12.33 (2.77) 0.284
## experience (mean (SD)) 18.15 (13.04) 18.74 (13.51) 0.044
## smsa = yes (%) 19095 (73.7) 1837 (82.3) 0.210
## region (%) 0.644
## northeast 6073 (23.4) 368 (16.5)
## midwest 6486 (25.0) 377 (16.9)
## south 7468 (28.8) 1292 (57.9)
## west 5896 (22.7) 195 ( 8.7)
## parttime = yes (%) 2280 ( 8.8) 244 (10.9) 0.072
greedymatch <- Match(Tr = as.integer(CPS1988$ethnicity) - 1, M = 1, X = data.frame(data.matrix(CPS1988[xvars])), replace = FALSE)
matched <- CPS1988[unlist(greedymatch[c("index.treated", "index.control")]), ]
print(CreateTableOne(vars = xvars, strata = "ethnicity", data = matched, test = FALSE), smd = TRUE)
## Stratified by ethnicity
## cauc afam SMD
## n 2232 2232
## education (mean (SD)) 12.33 (2.76) 12.33 (2.77) 0.001
## experience (mean (SD)) 18.71 (13.44) 18.74 (13.51) 0.003
## smsa = yes (%) 1837 (82.3) 1837 (82.3) <0.001
## region (%) 0.003
## northeast 368 (16.5) 368 (16.5)
## midwest 375 (16.8) 377 (16.9)
## south 1293 (57.9) 1292 (57.9)
## west 196 ( 8.8) 195 ( 8.7)
## parttime = yes (%) 244 (10.9) 244 (10.9) <0.001
matched <- matched %>% mutate(ethnicity_n = as.integer(ethnicity) - 1)
t.test(matched$wage[matched$ethnicity_n == 1] - matched$wage[matched$ethnicity_n == 0])
##
## One Sample t-test
##
## data: matched$wage[matched$ethnicity_n == 1] - matched$wage[matched$ethnicity_n == 0]
## t = -12.989, df = 2231, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## -131.18979 -96.77381
## sample estimates:
## mean of x
## -113.9818
Another way to estimate the causal effect of ethnicity on wage is by calculating the propensity score. By regressing on the treatment, i.e. the variable that we want to calculate the effect for, we can reduce the selection bias by balancing on the covariates. Below you can see the balancing before and after using the propensity score.
W.out <- weightit(ethnicity ~ education + experience + smsa + region + parttime,
data = CPS1988, method = "ebal")
model_lm_ethnicity <- lm(wage ~ ethnicity, data = CPS1988, weights = W.out$weights)
bal.tab(ethnicity ~ education + experience + smsa + region + parttime,
data = CPS1988, estimand = "ATT", m.threshold = .05)
## Balance Measures
## Type Diff.Un M.Threshold.Un
## education Contin. -0.2909 Not Balanced, >0.05
## experience Contin. 0.0435 Balanced, <0.05
## smsa_yes Binary 0.0864 Not Balanced, >0.05
## region_northeast Binary -0.0694 Not Balanced, >0.05
## region_midwest Binary -0.0813 Not Balanced, >0.05
## region_south Binary 0.2908 Not Balanced, >0.05
## region_west Binary -0.1401 Not Balanced, >0.05
## parttime_yes Binary 0.0214 Balanced, <0.05
##
## Balance tally for mean differences
## count
## Balanced, <0.05 2
## Not Balanced, >0.05 6
##
## Variable with the greatest mean difference
## Variable Diff.Un M.Threshold.Un
## education -0.2909 Not Balanced, >0.05
##
## Sample sizes
## cauc afam
## All 25923 2232
bal.tab(W.out, m.threshold = .05, disp.v.ratio = TRUE)
## Call
## weightit(formula = ethnicity ~ education + experience + smsa +
## region + parttime, data = CPS1988, method = "ebal")
##
## Balance Measures
## Type Diff.Adj M.Threshold V.Ratio.Adj
## education Contin. 0.0001 Balanced, <0.05 0.7731
## experience Contin. 0.0000 Balanced, <0.05 0.9613
## smsa_yes Binary 0.0000 Balanced, <0.05 .
## region_northeast Binary 0.0000 Balanced, <0.05 .
## region_midwest Binary -0.0000 Balanced, <0.05 .
## region_south Binary -0.0000 Balanced, <0.05 .
## region_west Binary -0.0000 Balanced, <0.05 .
## parttime_yes Binary 0.0001 Balanced, <0.05 .
##
## Balance tally for mean differences
## count
## Balanced, <0.05 8
## Not Balanced, >0.05 0
##
## Variable with the greatest mean difference
## Variable Diff.Adj M.Threshold
## education 0.0001 Balanced, <0.05
##
## Effective sample sizes
## cauc afam
## Unadjusted 25923. 2232.
## Adjusted 25833.39 1233.1
Estimate the causal effect of experience on wage by calculating the propensity score.
W.out <- weightit(experience ~ ethnicity + education + smsa + region + parttime,
data = CPS1988, method = "ebal")
model_lm_experience <- lm(wage ~ experience, data = CPS1988, weights = W.out$weights)
bal.tab(experience ~ ethnicity + education + smsa + region + parttime,
data = CPS1988, estimand = "ATT", m.threshold = .05)
## Balance Measures
## Type Corr.Un
## ethnicity_afam Binary 0.0121
## education Contin. -0.2867
## smsa_yes Binary -0.0397
## region_northeast Binary 0.0251
## region_midwest Binary -0.0166
## region_south Binary 0.0114
## region_west Binary -0.0212
## parttime_yes Binary -0.0942
##
## Sample sizes
## Total
## All 28155
bal.tab(W.out, m.threshold = .05, disp.v.ratio = TRUE)
## Call
## weightit(formula = experience ~ ethnicity + education + smsa +
## region + parttime, data = CPS1988, method = "ebal")
##
## Balance Measures
## Type Corr.Adj Diff.Adj M.Threshold
## ethnicity_afam Binary -0 -0 Balanced, <0.05
## education Contin. -0 0 Balanced, <0.05
## smsa_yes Binary -0 -0 Balanced, <0.05
## region_northeast Binary 0 0 Balanced, <0.05
## region_midwest Binary 0 0 Balanced, <0.05
## region_south Binary -0 -0 Balanced, <0.05
## region_west Binary -0 -0 Balanced, <0.05
## parttime_yes Binary 0 0 Balanced, <0.05
##
## Balance tally for target mean differences
## count
## Balanced, <0.05 8
## Not Balanced, >0.05 0
##
## Variable with the greatest target mean difference
## Variable Diff.Adj M.Threshold
## education 0 Balanced, <0.05
##
## Effective sample sizes
## Total
## Unadjusted 28155.
## Adjusted 25793.54
Let’s now investigate how aggregating the numerical predictors in the data affects the precision when estimating the causal effect on wage. I will also filter out groups with less than 5 persons in them so that any individual can not be identified in the material. The binning and filtering reduces the original dataset by 98.9 %. By expanding the reduced dataset the original dataset can be estimated.
CPS1988_refi <- CPS1988 %>%
mutate(education = as.numeric(education)) %>%
mutate(experience = as.numeric(experience)) %>%
mutate(education = cut_interval(education, 5)) %>%
mutate(experience = cut_interval(experience, 5)) %>%
group_by(education, experience, ethnicity, smsa, region, parttime) %>%
mutate (wage = mean(wage)) %>%
group_by(wage, education, experience, ethnicity, smsa, region, parttime) %>%
tally() %>%
mutate(experience = unbin_bin(experience)) %>%
mutate(education = unbin_bin(education)) %>%
filter(n > 4)
dim(CPS1988_refi)
## [1] 302 8
CPS1988_refiexp <- CPS1988_refi[rep(seq(nrow(CPS1988_refi)), CPS1988_refi$n),]
dim(CPS1988_refiexp)
## [1] 27797 8
How has the reduction affected the DAG? It is not possible to use weights in the hc algorithm. Therefore I will use the expanded table based on the data in the aggregated table.
hcmodel_refiexp <- hc(dplyr::select(CPS1988_refiexp %>%
mutate(education = as.numeric(education)) %>%
mutate(experience = as.numeric(experience)), -n))
plot(hcmodel_refiexp)
For comparison, I will plot the coefficients for ethnicity for the linear model based on the original data, aggregated data and the expanded data. I will use robust (Heteroskedasticity-Consistent) error estimates.
model <- lm(wage ~ ethnicity, data = CPS1988)
model_refi <- lm(wage ~ ethnicity, data = CPS1988_refi, weights = n)
model_refiexp <- lm(wage ~ ethnicity, data = CPS1988_refiexp)
plot_summs(model, model_refi, model_refiexp, robust = "HC1",
model.names = c(
"Original dataset",
"Reduced dataset using weights",
"Expanded dataset"))
## Loading required namespace: broom.mixed
## Warning in checkMatrixPackageVersion(): Package version inconsistency detected.
## TMB was built with Matrix version 1.3.2
## Current Matrix version is 1.2.18
## Please re-install 'TMB' from source using install.packages('TMB', type = 'source') or ask CRAN for a binary version of 'TMB' matching CRAN's 'Matrix' package
Now let’s estimate the causal effect of ethnicity on wage using propensity scores. I will use the expanded dataset since I did not get any reasonable results using the argument s.weights in weightit.
W.out <- weightit(ethnicity ~ education + experience + smsa + region + parttime,
data = CPS1988_refiexp, method = "ebal")
model_refiexp <- lm(wage ~ ethnicity, data = CPS1988_refiexp, weights = W.out$weights)
coeftest(model_refiexp, vcov = vcovHC, type = "HC1")
##
## t test of coefficients:
##
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 616.8706 1.4634 421.541 < 2.2e-16 ***
## ethnicityafam -133.7648 6.1773 -21.654 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
bal.tab(ethnicity ~ education + experience + smsa + region + parttime,
data = CPS1988_refiexp, estimand = "ATT", m.threshold = .05)
## Balance Measures
## Type Diff.Un M.Threshold.Un
## education Contin. -0.2050 Not Balanced, >0.05
## experience Contin. -0.0567 Not Balanced, >0.05
## smsa_yes Binary 0.0995 Not Balanced, >0.05
## region_northeast Binary -0.0784 Not Balanced, >0.05
## region_midwest Binary -0.0800 Not Balanced, >0.05
## region_south Binary 0.3059 Not Balanced, >0.05
## region_west Binary -0.1475 Not Balanced, >0.05
## parttime_yes Binary -0.0052 Balanced, <0.05
##
## Balance tally for mean differences
## count
## Balanced, <0.05 1
## Not Balanced, >0.05 7
##
## Variable with the greatest mean difference
## Variable Diff.Un M.Threshold.Un
## region_south 0.3059 Not Balanced, >0.05
##
## Sample sizes
## cauc afam
## All 25732 2065
bal.tab(W.out, m.threshold = .05, disp.v.ratio = TRUE)
## Call
## weightit(formula = ethnicity ~ education + experience + smsa +
## region + parttime, data = CPS1988_refiexp, method = "ebal")
##
## Balance Measures
## Type Diff.Adj M.Threshold V.Ratio.Adj
## education Contin. 0.0001 Balanced, <0.05 0.6710
## experience Contin. 0.0000 Balanced, <0.05 0.8969
## smsa_yes Binary 0.0000 Balanced, <0.05 .
## region_northeast Binary 0.0000 Balanced, <0.05 .
## region_midwest Binary 0.0001 Balanced, <0.05 .
## region_south Binary -0.0000 Balanced, <0.05 .
## region_west Binary -0.0001 Balanced, <0.05 .
## parttime_yes Binary -0.0000 Balanced, <0.05 .
##
## Balance tally for mean differences
## count
## Balanced, <0.05 8
## Not Balanced, >0.05 0
##
## Variable with the greatest mean difference
## Variable Diff.Adj M.Threshold
## region_midwest 0.0001 Balanced, <0.05
##
## Effective sample sizes
## cauc afam
## Unadjusted 25732. 2065.
## Adjusted 25650.5 1094.35
plot_summs(model_lm_ethnicity, model_refiexp, scale = TRUE, robust = "HC1",
model.names = c(
"Original dataset",
"Expanded dataset"))
Let’s compare the coefficients for experience for the linear model based on the original data, aggregated data and the expanded data.
model <- lm(wage ~ experience, data = CPS1988)
model_refi <- lm(wage ~ experience, data = CPS1988_refi, weights = n)
model_refiexp <- lm(wage ~ experience, data = CPS1988_refiexp)
plot_summs(model, model_refi, model_refiexp, robust = "HC1",
model.names = c(
"Original dataset",
"Reduced dataset using weights",
"Expanded dataset"))
Let’s estimate the causal effect of ethnicity on wage using propensity scores. I will use the expanded dataset since I did not get any reasonable results using the argument s.wights in weightit.
W.out <- weightit(experience ~ ethnicity + education + smsa + region + parttime,
data = CPS1988_refiexp, method = "ebal")
model_refiexp <- lm(wage ~ experience, data = CPS1988_refiexp, weights = W.out$weights)
coeftest(model_refiexp, vcov = vcovHC, type = "HC1")
##
## t test of coefficients:
##
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 452.45062 2.25958 200.237 < 2.2e-16 ***
## experience 8.60394 0.14098 61.029 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
bal.tab(experience ~ ethnicity + education + smsa + region + parttime,
data = CPS1988_refiexp, estimand = "ATT", m.threshold = .05)
## Balance Measures
## Type Corr.Un
## ethnicity_afam Binary -0.0143
## education Contin. -0.2736
## smsa_yes Binary -0.0339
## region_northeast Binary 0.0256
## region_midwest Binary -0.0156
## region_south Binary 0.0092
## region_west Binary -0.0202
## parttime_yes Binary -0.1072
##
## Sample sizes
## Total
## All 27797
bal.tab(W.out, m.threshold = .05, disp.v.ratio = TRUE)
## Call
## weightit(formula = experience ~ ethnicity + education + smsa +
## region + parttime, data = CPS1988_refiexp, method = "ebal")
##
## Balance Measures
## Type Corr.Adj Diff.Adj M.Threshold
## ethnicity_afam Binary -0 -0 Balanced, <0.05
## education Contin. -0 -0 Balanced, <0.05
## smsa_yes Binary -0 -0 Balanced, <0.05
## region_northeast Binary 0 0 Balanced, <0.05
## region_midwest Binary 0 0 Balanced, <0.05
## region_south Binary -0 -0 Balanced, <0.05
## region_west Binary -0 -0 Balanced, <0.05
## parttime_yes Binary 0 -0 Balanced, <0.05
##
## Balance tally for target mean differences
## count
## Balanced, <0.05 8
## Not Balanced, >0.05 0
##
## Variable with the greatest target mean difference
## Variable Diff.Adj M.Threshold
## education -0 Balanced, <0.05
##
## Effective sample sizes
## Total
## Unadjusted 27797.
## Adjusted 25618.89
plot_summs(model_lm_experience, model_refiexp, robust = "HC1",
model.names = c(
"Original dataset",
"Expanded dataset"))


@@include('../layouts/head.html', { "title": "Demo" }) @@include('../layouts/styles.html')
Create account to continue.


Kilmarnock boss Angelo Alessio bags Ladbrokes Premiership manager of the month award
The Rugby Park boss guided his side to nine points from their available 12 in October.
by Lochlin Highet, https://www.dailyrecord.co.uk/authors/lochlin-highet/Kilmarnock boss Angelo Alessio has scooped the Ladbrokes Premiership manager of the month award for October.
The Italian guided the Ayrshire side to three wins in a row in October before his 10 men narrowly lost at Motherwell in the last game of the month.
The month started brightly with a 1-0 win at Tynecastle as a Chris Burke header, which could also have been argued as an own goal, put Hearts to the sword.
Next up was a 2-1 victory at Rugby Park over Livingston as goals from Gary Dicker and Rory McKenzie were enough to combat a late Lee Miller strike.
Then a week later captain Dicker scored again as he helped the side to a 1-0 victory at home to St Mirren.
Killie lost Alex Bruce after just 12 minutes at Fir Park as they went down 2-1 to Motherwell.
A Dom Thomas equaliser after a Liam Donnelly opener wasn't enough to take anything back home as Devante Cole's header sealed all three points for the Steelmen.


Snakepit is an open-source multiplayer snake game.
It was designed as a demo of asyncio library for Python 3.5.
Check out the source code at our github repo.
Rules:
- Use arrows to control the snake.
- Eat digits to grow up (score += digit).
- Do not bite: stones (#), snakes, borders.
- Earn points by killing other snakes (score += 1000).
- Invite friends and have fun together!


class: clear, title-slide, inverse, center, top, middle # CSforAll Education Communities on Twitter ---- ### **Jennifer Houchins** ### North Carolina State University ### July 11, 2021 --- class: clear, wolfhead .font90[ .pull-right[
 - Computer science is recognized at .red[**key 21st century skill**].

 - [.blue[**CSforALL**]](https://www.csforall.org/) aims to make high-quality computer science integral to K-12 students' educational experiences.

 - \#CSforAll suggests that .red[**CS educators engage with one another**] on Twitter.]] --- # Guiding Questions This social network analysis is guided by the following questions: 1. Are .blue[**\#CSforALL**] educators engaging with each other on Twitter? 2. Who are the major actors (e.g., transmitters, transceivers, and/or transcenders) in the .blue[**\#CSforALL**] network? 3. Are there communities that are formed in the .blue[**\#CSforALL**] network? 4. What are the sentiments of actors in the .blue[**\#CSforALL**] network? --- # Methods - `rtweet` package was used to pull relevant tweets from Twitter - Hashtags included: .blue[\#CSforAll], .blue[\#CSEd], and .blue[\#CSEducation] - Additionally, .blue[\#KaporCRCS] and .blue[\#CSForGood] because of more recent efforts for culturally-responsive pedagogy

 - Packages used for .red[analysis, exploration, and visualization] included: - `tidyverse`, `tidytext`, and `tidygraph` - `igraph` and `ggraph` - `vader` --- class: clear, no-logo, inverse, center, middle ![](https://media.giphy.com/media/RpfIXomvjCh8I/giphy.gif) .center[ .font130[**Let's wrangle some data...**] ] --- # Data Wrangling I used the following code to retrieve relevant tweets, excluding retweets. .code60[ ```r get_token() csed_tweets <- search_tweets(q = "#CSforAll OR #CSEd OR #CSEducation OR #KaporCRCS OR #CSForGood", n=5000, lang = "en", include_rts = FALSE) csed_tweets_1 <- rtweet::flatten(csed_tweets) write_csv(csed_tweets_1, here("Presentation", "data","csed-tweets.csv")) ``` ] --- # Sampling of Tweets .font60[.red[The following sample shows what some of the data looks like.]

  Screen Name 	  Text

  coding4kids_ph 	  #Coding4Kids #Coding Kit comes w/ FREE #lessons & activity guides. Grows w/ child. Parts readily available for expansion. Works w/ different platforms & devices. #girlswhocode #csforall #kids #robotics #bgc #manila #computerscience #raspberrypi #microbit https://t.co/3RoFAsqwhN

  AVIDOpenAccess 	  Attention 6–12 educators: We still have seats available in our summer https://t.co/4mBaAg1gYR workshops in WA, OR, and MT! Apply here today! https://t.co/5ZZ4xhCy08 #AVIDxCode #CSForAll #CSForGood #TechWithPurpose https://t.co/GpqQv2o2GO

  coding4kids_ph 	  Best value #Coding #Robot. Durable. No loose parts to manage #LEGO compatible. Prebuilt sensors. No SW to install. Lessons free to DL/use. https://t.co/NXTNbOVQvg #csforall #girlswhocode #kids #robotics #microbit #bgc #makati #ai #stem #computerscience

  YouthCodeJam 	  Our 5th birthday celebration was a success! Thank you to everyone who donated, fundraised on our behalf, and shared our social posts! Cheers to 5 years and here's to many many more. #CSforALL #kidswhocode #codingisfun #txed #girlswhocode https://t.co/VUFpXQfBiw

 ] --- class: no-logo # Extracting Ties and Actors for Network Creation .code60[ .panelset[ .panel[.panel-name[Ties] .pull-left-narrow[
.red[First I extracted the ties from the Twitter data.]] .pull-right-wide[ ```r ties <- csed_tweets |> relocate(sender = screen_name, # rename screen_name to sender target = mentions_screen_name) |> # rename to receiver select(sender, target, created_at, text) |> unnest_tokens(input = target, output = receiver, to_lower = FALSE) |> relocate(sender, receiver) |> drop_na(receiver) ``` ] ] .panel[.panel-name[Actors] .pull-left-narrow[
.red[Then I used the ties to extract the actors.]] .pull-right-wide[ ```r actors_1 <- ties |> pivot_longer(cols = sender:receiver, names_to = "nodes", values_to = "screen_name") actors <- actors_1 |> select(screen_name) |> distinct() |> drop_na() ``` ] ] .panel[.panel-name[Network] .pull-left-narrow[
.red[The result was a directed network with 195 nodes and 358 edges.]] .pull-right-wide[ ```r network <- tbl_graph(edges = ties, nodes = actors) network ``` ``` ## # A tbl_graph: 195 nodes and 358 edges ## # ## # A directed multigraph with 23 components ## # ## # Node Data: 195 x 1 (active) ## screen_name ## <chr> ## 1 SKolhatkar ## 2 microbit_edu ## 3 mlmiller ## 4 thegrene ## 5 MsHexsel ## 6 drabigailjoseph ## # … with 189 more rows ## # ## # Edge Data: 358 x 4 ## from to created_at text ## <int> <int> <dttm> <chr> ## 1 1 2 2021-07-10 16:38:03 Had forgotten how exciting it is to meet in person with educators from all over. Folks have come in 45… ## 2 1 2 2021-07-04 14:56:34 In person @microbit_edu summer PD for Ts organized by #cstasv in #PaloAlto July 10th Registration &… ## 3 1 3 2021-07-04 14:56:34 In person @microbit_edu summer PD for Ts organized by #cstasv in #PaloAlto July 10th Registration &… ## # … with 355 more rows ``` ] ] ] ] --- class: no-logo # Exploring Centrality .code60[ .panelset[ .panel[.panel-name[Degrees] .pull-left-narrow[
.red[Next steps were to calculate the node degrees.]] .pull-right-wide[ ```r network_1 <- network |> activate(nodes) |> mutate(degree = centrality_degree(mode = "all")) |> mutate(in_degree = centrality_degree(mode = "in")) |> mutate(out_degree = centrality_degree(mode = "out")) network_1 ``` ] ] .panel[.panel-name[Measures] .pull-left-narrow[
.red[And to get a summary of these measures.]] .pull-right-wide[ ```r node_measures <- network_1 |> activate(nodes) |> data.frame() summary(node_measures) ``` ``` ## screen_name degree in_degree out_degree ## Length:195 Min. : 1.000 Min. : 0.000 Min. : 0.000 ## Class :character 1st Qu.: 1.000 1st Qu.: 0.000 1st Qu.: 0.000 ## Mode :character Median : 1.000 Median : 1.000 Median : 0.000 ## Mean : 3.672 Mean : 1.836 Mean : 1.836 ## 3rd Qu.: 4.500 3rd Qu.: 1.000 3rd Qu.: 3.000 ## Max. :44.000 Max. :44.000 Max. :16.000 ``` ] ] ] ] --- # Transmitters, Transceivers, and Transcenders .red[**...oh my!**] .panelset[ .panel[.panel-name[Transmitters] .pull-left-narrow[.red[Here are the top CS education Tweeters.]] .pull-right-wide[ ``` ## screen_name degree in_degree out_degree ## 1 chrisevans17 13 0 13 ## 2 SvetlikCS 17 1 16 ## 3 BTwarek 13 0 13 ``` ] ] .panel[.panel-name[Transceivers] .pull-left-narrow[.red[And the top actors receiving tweets which are all CS education organizations.]] .pull-right-wide[ ``` ## screen_name degree in_degree out_degree ## 1 csteachersorg 44 44 0 ## 2 Googleorg 30 30 0 ## 3 CMEGroup 30 30 0 ## 4 MicronTech 30 30 0 ## 5 CMEFoundation 30 30 0 ## 6 AZFoundation 30 30 0 ``` ]] .panel[.panel-name[Transcenders] .pull-left-narrow[.red[Because their in_degree is so high, the top transceivers are the transcenders for this network!]] .pull-right-wide[ ``` ## screen_name degree in_degree out_degree ## 1 csteachersorg 44 44 0 ## 2 Googleorg 30 30 0 ## 3 CMEGroup 30 30 0 ## 4 MicronTech 30 30 0 ## 5 CMEFoundation 30 30 0 ## 6 AZFoundation 30 30 0 ``` ]] ] --- class: no-logo # Closeness and Betweenness .red[In preparation for visualizing the network, I added the closeness and betweeness for the nodes.] ```r network_2 <- network_1 |> activate(nodes) |> mutate(closeness = centrality_closeness(), betweenness = centrality_betweenness()) network_2 ``` --- class: no-logo # Visualizing the Network .center[ ![](IndependentAnalysis_files/figure-html/sociogram-1.png) ] --- class: no-logo # Community Detection .code60[ .panelset[ .panel[.panel-name[Group Info] .pull-left-narrow[.red[Since visualization revealed clear groups, community detection was used for the network.]] .pull-right-wide[ ```r network_3 <- network_2 %>% activate(nodes) %>% mutate(group = group_infomap()) network_3 ``` ]] .panel[.panel-name[Groups] .pull-left-narrow[.red[There turned out to be 29 distinct groups in the network, some of them very small.]] .pull-right-wide[ ```r groups <- network_3 %>% activate(nodes) %>% data.frame() groups$group %>% sort() ``` ``` ## [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ## [45] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 ## [89] 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 6 6 6 6 6 6 7 7 7 7 7 7 ## [133] 8 8 8 8 8 9 9 9 9 9 10 10 10 10 11 11 11 11 12 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 17 17 17 18 18 18 19 19 19 20 ## [177] 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 ``` ]] .panel[.panel-name[Group Visualization] .center[ ![](IndependentAnalysis_files/figure-html/group-graph-1.png) ] ] ] ] --- class: no-logo # CSforALL Educator Sentiments .code60[ .panelset[ .panel[.panel-name[VADER] VADER is the sentiment analysis package I used to process the tweet text. .pull-left[ ```r summary_vader <- vader_df(ties$text) tweet_sentiment <-inner_join(summary_vader, ties, by = "text") user_sentiment <- tweet_sentiment %>% group_by(sender) %>% summarise(sentiment = mean(compound)) ``` ] .pull-right[ ![](https://media.giphy.com/media/GIIC4jmmUlXZS/giphy.gif) ]] .panel[.panel-name[Positive Tweeters] .pull-left-narrow[
.red[72 of the tweeters in our \#CSforALL network are tweeting positive things.]] .pull-right-wide[ ``` ## # A tibble: 72 x 2 ## sender sentiment ## <chr> <dbl> ## 1 AFunabiki 0.623 ## 2 AISES 0.895 ## 3 alsgillespie 0.698 ## 4 AmandaMackereth 0.694 ## 5 AmyBakaletz 0.694 ## 6 AndersonTechie 0.694 ## 7 AngCleveland 0.753 ## 8 AnnyAllerton 0.159 ## 9 AnthonyOwenADE 0.648 ## 10 AstraZeno 0.721 ## # … with 62 more rows ``` ]] .panel[.panel-name[Negative Tweeters] .pull-left-narrow[
.red[**There are none!**]] .pull-right-wide[ ``` ## # A tibble: 0 x 2 ## # … with 2 variables: sender <chr>, sentiment <dbl> ``` ]] .panel[.panel-name[Neutral Tweeters] .pull-left-narrow[.red[7 of our actors are posting neutral tweets.
Perhaps they are only sharing information or resources?]] .pull-right-wide[ ``` ## # A tibble: 7 x 2 ## sender sentiment ## <chr> <dbl> ## 1 cgarside 0 ## 2 CodeMonkeySTU 0 ## 3 grant_hutchison 0 ## 4 HikariKishi 0 ## 5 MichaelSakowicz 0 ## 6 SvetlikCS 0 ## 7 thealohateacher 0 ``` ] ]]] --- class: clear, inverse ## Interpretations and Recommendations .font90[ - There are .red[network of CS educators who are engaging on Twitter]. - .red[Transmitters are individuals] heavily engaged in \#CSforALL work (e.g., @chrisevans17, @SvetlikCS, and @BTwarek ) but .red[transceivers and transcenders are major organizations] (e.g., @csteachersorg and @Googleorg) receiving tweets. - Perhaps these .warmyellow[**organizations should engage more**] by tweeting at their biggest followers. - Many small communities in the \#CSforALL network with a handful of larger ones. - .red[Most CS educators] in the \#CSforALL network on Twitter .red[are posting positive things.] - Neutral tweeters may only be posting informative tweets for the network. ] --- class: clear, middle, inverse .center[ **Thank you!** .font90[If you'd like to learn more about the techniques used in this presentation you can get the R project from my Github repo:
 <https://github.com/jennhouchins/ECI589-SNA>] .pull-left-narrow[.center[ ]] .pull-right-wide[
 .font90[ **Follow me on Twitter:** [@TooSweetGeek](https://twitter.com/TooSweetGeek)
 **Email me:** [jennifer.houchins<EMAIL_ADDRESS>] ]] --- class: clear background-image: url("https://media.giphy.com/media/l0IycQmt79g9XzOWQ/giphy.gif") background-size: cover


Form
Form with placeholders
submit
Form with fixed labels
submit
Form with floating labels
submit
Inline Form
submit
Checkboxes and radio buttons
checkbox1: {{check.select1}}
checkbox2: {{check.select2}} checkbox3: {{check.select3}} checkbox4: {{check.select4}}
value: {{color.name}}
select
selected: {{data.selected}}
Form Validation
submit


2) Example
In the example folder of the tagslam repository you can find a simple example for a monucular camera setup. Here’s how to run it.
Running the example directly from the bag
The example bag file already contains the extracted tags,
so you can directly feed the bag into tagslam. You need to
set use_sim_time
to true
so
tagslam
can drive the clock.
rosparam set use_sim_time true
rviz -d `rospack find tagslam`/example/tagslam_example.rviz &
roslaunch tagslam tagslam.launch bag:=`rospack find tagslam`/example/example.bag
Rviz should show you a tag/camera configuration like the one on the image below, but without the camera image.
The program will complete too quickly to observe it in rviz, but you can ask tagslam to replay the sequence with a ROS service call (tagslam must still be running at that point):
rosservice call /tagslam/replay
Running the example in online mode
Run these three commands, each in a separate terminal when required
rosparam set use_sim_time true
roslaunch tagslam tagslam.launch run_online:=true
roslaunch tagslam apriltag_detector_node.launch
rviz -d `rospack find tagslam`/example/tagslam_example.rviz &
rosbag play --clock `rospack find tagslam`/example/example.bag --topics /pg_17274483/image_raw/compressed
If all goes well, your rviz window should look like this:
Extracting tags from images in a bag
Unless you must run online, it is best to run the tag detector on the
whole bag first, and then directly feed the detections into tagslam.
The tagslam workspace contains sync_and_detect
, a tool to extract
tags and write them to a new bag. At the same time, it also synchronizes
the detections that come from multiple cameras, i.e it filters frames
that don’t have images from all configured cameras.
Here is an example of how to run it on the example bag:
roslaunch tagslam sync_and_detect.launch bag:=`rospack find tagslam`/example/example.bag
This will produce a bag in the example
directory:
example.bag_output.bag
Under the topic /detector/tags
the bag has the tag detections, so it
can be used to directly drive tagslam. Besides that there is the topic
/annotated_images/compressed
which has the tags highlighted in the
original image.
More examples
Many more examples can be found in the tagslam test repository.


ssl
indicates whether if the site is under ssl or not
locale (optional)
indicates whether if the site is localized in more than one languages or not
if the locale is specified, the jsnbt will assume that there is one and only content language
injects
defines the custom content injections to the admin predefined holders
injects: {
navigation: [{
index: 5,
identifier: 'extra',
name: 'extra',
url: '/extra',
}],
dashboard: 'tmpl/public/injects/dashboard.html',
content: 'tmpl/public/injects/content.html',
settings: 'tmpl/public/injects/settings.html'
}
layouts
custom layouts of the site
the layouts defined here, will be available to be bound to nodes and provide administrative layout management for their front end templates
layouts: [{
id: 'global',
name: 'global layout',
form: 'tmpl/public/layouts/global.html'
}, {
id: 'eshop',
name: 'eshop layout',
form: 'tmpl/public/layouts/eshop.html'
}]
containers
the available containers of the site
these containers are available to the container controls
containers: [{
id: 'sampleContainer1',
name: 'sample container A',
html: '/tmpl/partial/containers/sampleContainerA.html',
}, {
id: 'sampleContainer2',
name: 'sample container B',
html: '/tmpl/partial/containers/sampleContainerB.html'
}]
templates
the available templates of the site
these template are available to the template dropdown control on every node
templates are assosiated with "form" guidance html parts, that are used by the node to save additional data that concern this only template
templates: [{
id: 'text',
name: 'text page',
html: '/tmpl/text.html',
form: 'tmpl/public/forms/page/text.html',
restricted: ['page'],
scripts: [
['lib', 'app']
],
styles: [
['lib', 'app']
]
}]
lists
data lists along with their role permissions
the content of these lists is managed in the data section of the admin
lists: [{
id: 'sample1',
name: 'Sample 01',
form: 'tmpl/customModule/sample1.html',
localized: true
}]
routes
custom routes implemented by the public module
a route must define an id and a display name, as well as a function ("fn") name that exists in the public module's index file.
routes: [{
id: 'search',
name: 'Search results',
fn: 'routeSearch'
}]


Click the button below to get a list of subreddits based on a sample Reddit post!
Is this a link post?
Click the button below to get a list of subreddits based on the (length of) a username!


kian Doyle
Dashboard
Quotes
Orders
Invoices
Cases
Log out
Dashboard
Quotes
Orders
Invoices
Cases
log out
Hi! Welcome back
Devin
1908 Progress way,Alburnett,lowa-52202 USA
kian Doyle
ORDERS #
Name
Please Enter a valid Name!
Contact Number
Please Enter a valid Contact Number!
Email
Please Enter a valid Email!
Date
Country
-- Select Country --
Please select a valid Country!
State
-- Select State --
Please select a valid state!
City
-- Select City --
Please select a valid City!
Address
Please Enter a valid Address!
Agree to terms and conditions
You must agree before submitting.
Submit
Add Products
Products
×
Product Name
Descripition
Cost Per Unit
Quantity
Product Name
Descripition
Cost Per Unit
Quantity
Tax
Total Price
Created Date
Action
GRAND Total
No Orders Added yet!


{% extends 'site_base.html' %}
{% block head_title %}registration failed{% endblock %}
{% block body %}
Something with your authentication went wrong, maybe your popup blocker is active, you can refresh the website to ensure you are not already logged in or try another login provider.
{% endblock %}


not a skype
your friend's name
was online:
5 minutes ago
Vitalik B.
Hi! How are you?
12:00
You
Nice! u?
13:00
Vitalik B.
good :-)
13:01
Vitalik B.
look what i found
Video is not supported by this browser.
13:01
Send
Attach file
Send


Supports org.vertx.java.core.ClientSSLSupport functionality.
Signals that an instance can be closed.
Offers methods that can be used to configure a service that provide network services.
Supports org.vertx.java.core.ServerSSLSupport functionality.
Supports org.vertx.java.core.ServerTCPSupport functionality.
Supports org.vertx.java.core.TCPSupport functionality.
The control centre of the Vert.
Classes implementing this trait provide direct access to Vertx
, Container
and Logger
.
Factory for org.vertx.scala.core.Vertx instances.
Vert.


The path to the directory.
Gets the absolute path to the current directory.
The absolute directory path.
Gets the name of the current directory, not including any parent paths.
The name of the current directory.
Gets the absolute normalized path of the parent directory.
The normalized path.
Gets the normalized path of the current directory. This path may be relative or absolute depending on how the object was initialized.
The normalized path.
Creates a child directory for the current directory.
The name of the child directory
An object that represents the child directory.
Gets the path to an API route, formulating the path from the specified base directory.
The base path from which to calculate the api route path. This path should separate tokens using a forward slash (/)
The calculated relative path.
Generated using TypeDoc
Class that represents a directory in a construct hierarchy. Exposes methods and properties that allow directory/path information to be used to initialize and/or configure the construct.


All Classes
AbstractSpecial
AddOn
ApplicationSession
BaseUser
DailySpecial
Item
Main
Menu
PermissionsFactory
Restaurant
ServableTable
StartupWizard
Tax
Ticket
TicketLine
UserPermissions


Our mission statement is to shed more light towards the STEM fields by allowing teenagers to obtain the opportunity to build a mindset around the topics that heavily surround our generation. We draw info from other resources to collect info about STEM-based programs and workshops and display them for you. These are catered towards highschool students, who are interested in exploring new opportunities in the STEM field.
Gain your experience here! All workshops and programs are categorized based on inclusion of each STEM field. Each option allows you to explore the experiences that come along with the posibilities that may cater to your interest. You can choose from our meta search engine of workshops or events.
| Event | STEM | Organization | Date |
|---|---|---|---|
| ElleHacks | S T E M | WISE | 01-02-19 |
| Intro to 3D Printing | S T E M | Toronto Public Library | 11-02-19 |
| Waterloo Math Contest | S T E M | Canada | 28-02-19 |
| Intro to JavaScript | S T E M | Teens Learning Code | 01-03-19 |
| STEM March Break Camp | S T E M | Ontario Science Center | 11-03-19 |
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque scelerisque diam non nisi semper, et elementum lorem ornare. Maecenas placerat facilisis mollis. Duis sagittis ligula in sodales vehicula....
Curabitur purus sem, malesuada eu luctus eget, suscipit sed turpis. Nam pellentesque felis vitae justo accumsan, sed semper nisi sollicitudin...
Fusce ullamcorper ligula sit amet quam accumsan aliquet. Sed nulla odio, tincidunt vitae nunc vitae, mollis pharetra velit. Sed nec tempor nibh...


User Id:
Username:
Email:
Address:
Telephone:
STATUS:
Patient Id:
First name:
Last name:
Health Security Code:
Gender:
Birth date:
Other:


Class: RuboCop::Cop::Performance::RedundantBlockCall
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
self,
AutoCorrector,
Base
|
|
|
Instance Chain:
self,
Base
|
|
| Inherits: |
Base
|
| Defined in: | lib/rubocop/cop/performance/redundant_block_call.rb |
Overview
Identifies the use of a &block
parameter and block.call
where yield
would do just as well.
Constant Summary
-
CLOSE_PAREN =
# File 'lib/rubocop/cop/performance/redundant_block_call.rb', line 31')'
-
MSG =
# File 'lib/rubocop/cop/performance/redundant_block_call.rb', line 28'Use `yield` instead of `%<argname>s.call`.'
-
OPEN_PAREN =
# File 'lib/rubocop/cop/performance/redundant_block_call.rb', line 30'('
-
SPACE =
# File 'lib/rubocop/cop/performance/redundant_block_call.rb', line 32' '
-
YIELD =
# File 'lib/rubocop/cop/performance/redundant_block_call.rb', line 29'yield'
Instance Method Summary
- #on_def(node) (also: #on_defs)
-
#on_defs(node)
Alias for #on_def.
- #args_include_block_pass?(blockcall) ⇒ Boolean private
-
#autocorrect(corrector, node)
private
offenses are registered on the
block.call
nodes. - #calls_to_report(argname, body) private
- #shadowed_block_argument?(body, block_argument_of_method_signature) ⇒ Boolean private
Instance Method Details
#args_include_block_pass?(blockcall) ⇒ Boolean
(private)
# File 'lib/rubocop/cop/performance/redundant_block_call.rb', line 97
def args_include_block_pass?(blockcall) _receiver, _call, *args = *blockcall args.any?(&:block_pass_type?) end
#autocorrect(corrector, node) (private)
offenses are registered on the block.call
nodes
# File 'lib/rubocop/cop/performance/redundant_block_call.rb', line 63
def autocorrect(corrector, node) _receiver, _method, *args = *node new_source = String.new(YIELD) unless args.empty? new_source += if parentheses?(node) OPEN_PAREN else SPACE end new_source << args.map(&:source).join(', ') end new_source << CLOSE_PAREN if parentheses?(node) && !args.empty? corrector.replace(node, new_source) end
#calls_to_report(argname, body) (private)
[ GitHub ]# File 'lib/rubocop/cop/performance/redundant_block_call.rb', line 81
def calls_to_report(argname, body) return [] if blockarg_assigned?(body, argname) || shadowed_block_argument?(body, argname) blockarg_calls(body, argname).map do |call| return [] if args_include_block_pass?(call) call end end
#on_def(node) Also known as: #on_defs
[ GitHub ]# File 'lib/rubocop/cop/performance/redundant_block_call.rb', line 47
def on_def(node) blockarg_def(node) do |argname, body| next unless body calls_to_report(argname, body).each do |blockcall| add_offense(blockcall, message: format(MSG, argname: argname)) do |corrector| autocorrect(corrector, blockcall) end end end end
#on_defs(node)
Alias for #on_def.
# File 'lib/rubocop/cop/performance/redundant_block_call.rb', line 58
alias on_defs on_def
#shadowed_block_argument?(body, block_argument_of_method_signature) ⇒ Boolean
(private)
# File 'lib/rubocop/cop/performance/redundant_block_call.rb', line 91
def shadowed_block_argument?(body, block_argument_of_method_signature) return false unless body.block_type? body.arguments.map(&:source).include?(block_argument_of_method_signature.to_s) end


Get Christmas And New Year Wrapped Up With Goodies From The Japanese My Nintendo Store
Platinum points at the ready, Japan!
by Gavin LaneThe abundance of cool little physical things turning up on the Japanese My Nintendo store is certainly nothing new. While it rarely contains things to truly make us consider how many platinum points we've got sitting on our mostly dormant Japanese Nintendo account (let alone work out how we'd get them shipped to the west), they sure get us pining for the days of physical goodies on Club Nintendo.
The latest bunch of merch to hit the Japanese My Nintendo store is festive-themed. First up, for 500 platinum points there's the My Nintendo 2020 desktop calendar featuring 12 cards adorned with various characters which you place on a little pedestal:
Then there's a Mario-themed festive sack and Christmas cards with a cute little star sticker:
Finally, why not exchange cards for New Year too with these Animal Crossing and Mario envelope-pouch things? We love a bit of quality stationary:
To be fair, we've had a few nice physical items crop up on the western store. Those Splatoon 2 posters to mark the final Splatfest might have taken an age to turn up (for which Nintendo apologised by depositing 300 Gold Points into purchasers' accounts), but they do look great hanging on the wall. The freshly-announced Super NES ones look rather lovely, too, so let's hope we'll be getting more of this sweet, sweet tat in the future.
What's the best holiday-themed Nintendo tat you've seen? Would you grab any of the above if it turned up on the western My Nintendo storefronts? Let us know with a festive message below.


RePurpose
Openbay aims to revolutionize the vehicle service industry. They provide an innovative way for consumers to match up services with nearby providers. This drives competition and helps consumers make informed purchasing decisions.
DockYard worked with Openbay to plan, build & launch the first version of their product. In addition to building the Openbay application, we built a custom invitation system to help get early users involved with the service.
Visit RePurpose


Admin Panel
Schedule the Interviews
Participant I (Interviewer)
Participant II (Interviewee)
Starting Time
Ending Time
Schedule
Scheduled Interviews
Interview ID
Participant I (Interviewer)
Participant II (Interviewee)
Starting Time
Ending Time
Delete
Edit
Start Time
End Time
Update Interview


Air-conditioned studio with a fully equipped kitchenette and a flat-screen TV. The bathroom comes with a spacious shower cabin.
Price Per Night
$100
Spread over 2 floors, this air-conditioned apartment boasts a balcony or a terrace, a kitchen, coffee and tea making facilities, a flat-screen TV with HDMI and USB connection, a minibar filled with 4 beverages, and a bathroom with bathtub and hairdryer.
Price Per Night
$300
The Level Premium Room come with a living area featuring a sofa, and a bathroom equipped with a rain shower, a bath and premium Loewe toiletries. They are fitted with superior quality beds and linen, a minibar, individual temperature control, a safe, and an IP interactive flat-screen TV.
Price Per Night
$600
24 h reception
Free Wi-Fi
Free parking
Getaway


|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Team Foundation Server and SharePoint 2010 by Adam Cogan This training course brings developers up-to-speed on the new features and benefits of Visual Studio 2010 Ultimate, Team Foundation Server 2010 and SharePoint 2010. With detailed insight into project management, requirements gathering, user stories, testing, workflow, document management and Office integration, attendees will leave with a strong understanding of how to embrace TFS 2010 and SharePoint 2010 in their organization. The 1 day course if broken up into 2 sessions which can be booked individually or you can enrol in the full day event:
For full details on each session please visit our website
|
Sydney .NET User Group -
|
6 Days to go!
Sydney .NET User Group |
Building Hybrid Social Apps with Dynamics CRM, Windows Azure & Twitter
Speaker: George Doubinski
This talk explores how you to leverage cloud technologies to develop advanced business solutions with CRM. Attend to see how to develop solutions that pull together Microsoft Dynamics CRM 2011, Windows Azure platform and social media tools. This session will cover how you to architect business solutions that harness the power of the cloud regardless of whether you intend to deploy Microsoft Dynamics CRM as on on-premise server or as a cloud service. See how Twitter can be part of your enterprise solution as a private broadcast notification tool.
To see more details and RSVP, please visit our facebook .NET group or our LinkedIn .NET group.
1 month to go!
Newcastle Coders Group |
Interface Useability
Speaker: Adam Cogan
Interface design is not something that belongs solely in the world of Apple. Your website and
applications can all benefit greatly from an understanding of how your users might navigate your
product.
Unfortunately for developers, interface usability is something of an afterthought, making your
otherwise perfect application difficult to operate.
In this session, get real world examples of good and bad usability from Adam. Bring along your
websites and applications and undergo the Adam Cogan crash test!
The evening will commence with a detailed discussion of good interface design and usability, and
then move onto an analysis of good and bad site examples.
The night will finish with an open floor workshop to discuss user submitted sites and applications,
and workshop improvements for attendees.
Please send your submissions to Adam prior so they can be scheduled into the discussion.
To see more details and RSVP, please visit the Newcastle Coders Group Website
|
Scrum Training Course |
This 5 day course is normally $3,995 + GST however we are offering a 25% off the full price for all remaining 2011 courses.
Overview
This Scrum Developer course is a unique and intensive five-day experience for software developers. The course guides teams on how to turn product requirements into potentially shippable increments of software using the Scrum framework, Visual Studio 2010, and modern software engineering practices. Attendees will work in self-organizing, self-managing teams using a common instance of Visual Studio Team Foundation Server 2010 to achieve this goal.
FINAL SCRUM TRAINING COURSES FOR 2011 ANNOUNCED
| New York 26 SEP 2011 |
Perth 14 NOV 2011 |
||
| Toronto 3 OCT 2011 |
Brisbane 21 NOV 2011 |
||
| Sydney 7 NOV 2011 |
Melbourne 28 NOV 2011 |
SSW would like to welcome a new employee to the team this month:
Mehmet brings to SSW clients some pretty high-end experience with reporting solutions (SQL Server, Cognos ReportNet, Hyperion), databases (SQL Server, Oracle, Teradata) and master data management (Oracle DRM).
Microsoft SharePoint 2010 makes it easier for people to work together. Using SharePoint 2010, your people can set-up Web sites to share information with others, manage documents from start to finish, and publish reports to help everyone make better decisions.
Organizations are extremely good at accumulating data. Mostly in the form of documents and records,
this data is often haphazardly located across the organization, and poorly integrated into document
processes.
SharePoint 2010 aims to improve the situation, by storing all documents & records in a centralized
system. They can store every version of a document, allow you to enforce information management
policies,
and improve efficiency by automating common business processes.
If you would like to advertise your product or service with SSW or would like to find out more about various advertising opportunities, please email your enquiry to<EMAIL_ADDRESS>or call: +61 2 9953 3000.
September 2011 |
EmploymentSharePoint Developer Are you looking to establish a career working with the latest software technology for a large
range of great organisations?  Senior Designer SSW is looking for a highly talented front-end Web Designer who is passionate about creating
great standards-based Web 2.0 sites. This role requires
the understanding of how people behave in certain contexts and how various stimuli and
circumstances can affect individual thought processes in social
and professional situations. |
| Copyright © SSW 1990-2010. All Rights Reserved. | Proudly developed by SSW Sydney Web Design | |||||
|


| User ID | First name | Last name | Hospital | Change authority | Remove user | |
|---|---|---|---|---|---|---|
| {{a.id}} | {{a.email}} | {{a.firstName}} | {{a.lastName}} | {{a.hospital}} | ||
| There are no administrators in database. |
| User ID | First name | Last name | Hospital | Change authority | Remove user | |
|---|---|---|---|---|---|---|
| {{a.id}} | {{a.email}} | {{a.firstName}} | {{a.lastName}} | {{a.hospital}} | ||
| There are no doctors in database. |


|
App Engine Python SDK
v1.6.9 rev.445
The Python runtime is available as an experimental Preview feature.
|
Public Member Functions | |
| def | __init__ |
| def | __repr__ |
| def | find_module |
| def | load_module |
| def | get_data |
| def | is_package |
| def | get_code |
| def | get_source |
Public Attributes | |
| archive | |
| prefix | |
| zipfile | |
A PEP-302-style importer that can import from a zipfile. Just insert or append this class (not an instance) to sys.path_hooks and you're in business. Instances satisfy both the 'importer' and 'loader' APIs specified in PEP 302.
| def google.appengine.dist.py_zipimport.zipimporter.__init__ | ( | self, | |
| path_entry | |||
| ) |
Constructor. Args: path_entry: The entry in sys.path. This should be the name of an existing zipfile possibly with a path separator and a prefix path within the archive appended, e.g. /x/django.zip or /x/django.zip/foo/bar. Raises: ZipImportError if the path_entry does not represent a valid zipfile with optional prefix.
| def google.appengine.dist.py_zipimport.zipimporter.__repr__ | ( | self | ) |
Return a string representation matching zipimport.c.
| def google.appengine.dist.py_zipimport.zipimporter.find_module | ( | self, | |
| fullmodname, | |||
path = None |
|||
| ) |
PEP-302-compliant find_module() method. Args: fullmodname: The dot-separated full module name, e.g. 'django.core.mail'. path: Optional and ignored; present for API compatibility only. Returns: None if the module isn't found in the archive; self if it is found.
| def google.appengine.dist.py_zipimport.zipimporter.get_code | ( | self, | |
| fullmodname | |||
| ) |
Return bytecode for a module.
| def google.appengine.dist.py_zipimport.zipimporter.get_data | ( | self, | |
| fullpath | |||
| ) |
Return (binary) content of a data file in the zipfile.
| def google.appengine.dist.py_zipimport.zipimporter.get_source | ( | self, | |
| fullmodname | |||
| ) |
Return source code for a module.
| def google.appengine.dist.py_zipimport.zipimporter.is_package | ( | self, | |
| fullmodname | |||
| ) |
Return whether a module is a package.
| def google.appengine.dist.py_zipimport.zipimporter.load_module | ( | self, | |
| fullmodname | |||
| ) |
PEP-302-compliant load_module() method. Args: fullmodname: The dot-separated full module name, e.g. 'django.core.mail'. Returns: The module object constructed from the source code. Raises: SyntaxError if the module's source code is syntactically incorrect. ImportError if there was a problem accessing the source code. Whatever else can be raised by executing the module's source code.


This school has no classes, yet. You will have to set up classes to allow teachers
to assign courses to their students. Use the menu or this link
to create the classes for this school.
No classes configured
Classes
Teachers and students have to be assigned to their classes. You can
do this by clicking on the class names, which will send you to
the school class setup screen.
We are waiting for students to register for this school.
Please ask your students to subscribe to {{school.name}}, so
that you can assign them to their classes.
No students have subscribed to this school.
Students
{{student.displayName}}
Teachers
We are waiting for teachers to register for this school.
Please ask your teachers to subscribe to {{school.name}}, so
that you can assign them to their classes.
No teachers have subscribed to this school.


A utility library delivering consistency, customization, performance, & extras.
Lo-Dash builds (for modern environments):
Development and
Production
Lo-Dash compatibility builds (for legacy and modern environments):
Development and
Production
Underscore compatibility builds:
Development and
Production
For optimal file size, create a custom build with only the features you need
We’ve got API docs, benchmarks, and unit tests.
For a list of upcoming features, check out our roadmap.
The full changelog is available here.
In browsers:
<script src="lodash.js"></script>
Using npm
:
npm install lodash
npm install -g lodash
npm link lodash
To avoid potential issues, update npm
before installing Lo-Dash:
npm install npm -g
In Node.js and RingoJS v0.8.0+:
var _ = require('lodash');
// or as a drop-in replacement for Underscore
var _ = require('lodash/lodash.underscore');
Note: If Lo-Dash is installed globally, run npm link lodash
in your project’s root directory before requiring it.
In RingoJS v0.7.0-:
var _ = require('lodash')._;
In Rhino:
load('lodash.js');
In an AMD loader like RequireJS:
require({
'paths': {
'underscore': 'path/to/lodash'
}
},
['underscore'], function(_) {
console.log(_.VERSION);
});
For more information check out these articles, screencasts, and other videos over Lo-Dash:
fromIndex
argumentObject
constructorthis
bindingcallback
and thisArg
argumentscallback
shorthandsLo-Dash has been tested in at least Chrome 5~24, Firefox 1~18, IE 6-10, Opera 9.25-12, Safari 3-6, Node.js 0.4.8-0.8.20, Narwhal 0.3.2, PhantomJS 1.8.1, RingoJS 0.9, and Rhino 1.7RC5.


Man Behind
Using developer's vanity to achieve better software quality
2013 © Gleb Bahmutov, @bahmutov