Watch Taylor Swift's Artist of the Decade Speech at AMAs 2019 (Video)
Taylor Swift focused only on positivity during her acceptance speech at the 2019 American Music Awards while being presented with the Artist of the Decade Award.
The 29-year-old singer dedicated the special win to the legendary artist Carole King, who presented the award, on Sunday (November 24) at the Microsoft Theater in Los Angeles.
Taylor thanked Carole for showing that her songs “could transcend so many different changes in people’s lives.”
“All any of the artists in this room want is to create something that will last,” she said.  Thank you for being the reason I am on this stage.”
Many fans were expecting Taylor to address her feud with Scooter Braun and Scott Borchetta during the speech, but she only addressed it with a subtle moment during her performance.
20+ pictures inside of Taylor Swift accepting her award at the AMAs…


Module setup and setup script.
-
setup and update script are set in the module's root folder.
e.g. [ROOT]/code/module/demo/.setup.<IP_ADDRESS>.php
-
all setup/update scripts are named like:
.setup.x.x.x.x.php
e.g. : ".setup.<IP_ADDRESS>.php"
-
scripts ara executed in ascent order.
e.g. script will be executed in the order :
".setup.<IP_ADDRESS>.php"
".setup.<IP_ADDRESS>.php"
".setup.<IP_ADDRESS>.php"
-
after the script has been executed, ".done" will be attached to the file name to provent script running again.
".setup.<IP_ADDRESS>.php.done"
-
You must give apache permission change the file name.
-
to maintain system integrity, we strongly recommend do not output anything other than logs.


This site works best with
JavaScript enabled
The Art of Infinity
Please, enter the amount and click
Next
Amount:
EUR
USD
GBP
CAD
AUD
Product:
Your name:
home
|
chat
|
Terms of Service
|
Contact


{% extends "header.html" %} {% block body %}
The print function in Python is a function that outputs to your console window whatever you say you want to print out. At first blush, it might appear that the print function is rather useless for programming, but it is actually one of the most widely used functions in all of python. The reason for this is that it makes for a great debugging tool.
"Debugging" is the term given to the act of finding, removing, and fixing errors and mistakes within code.
If something isn't acting right, you can use the print function to print out what is happening in the program. Many times, you expect a certain variable to be one thing, but you cannot see what the program sees. If you print out the variable, you might see that what you thought was, was not.
You can follow this tutorial with the video and the embedded console, via the text and consoles, or via your own installation of Python.
Next up, strings, what are they? Strings are just "strings" of text, hence the name. Strings are a type of data. Another type of data is integers.
To build on the video, here are some examples:
print('Single Quotes') print("double quotes")
We're printing out a string. Notice that the quotes are single quotes. You can use single quotes or double quotes, but they need to be used together.
While we're talking about strings and the print function, it would be useful to discuss concatenation. Concatenation just means the combination of things. You can use the "+" or the "," to join strings together. If you use a ",", then you will have a space in between the strings you joined. If you use a "+", then the strings will be strung together with no space. You will need to add one if you wanted.
If you use the "+" to join integers and floats together, then you will perform an arithmetic operation. If you use the ",", then it will print them out separately, with a space.
print('can do this',5)
print('cannot do this:'+5)
You cannot use the "+" to join strings with ints or floats, you must use the ",".
It is also important to bring up how to put quotes within strings. You can either put double quotes inside single quotes, singles inside doubles, or use the "\" backslash. The \ character is known as an escape character, and it will "escape" the characteristic of the following character and just take on the 'visual' aspect of it.
The purpose of the "escape character" is to escape various characteristics for characters. For example, a quotation, ", in a string might wreak havoc. Take for example: x = "He said, "Hello there!" "
Yeah, that's going to be a problem. There are obviously many options to avoid this specific problem, but one of them would be to use an escape character:
x = "He said, \"Hello there!\" "
If you do a print(x), you will not see the escape characters, and you will see the quotes. Sometimes you want to show the escape character as well:
x = "An escape character is a \"
How might you solve that?
Here are some examples of quotation rules:
print('Can't do this')
print('you\'ll have success here')
print("you'll have success here too")
It is also important to bring up how to put quotes within strings. You can either put double quotes inside single quotes, singles inside doubles, or use the "\" backslash. The \ character is known as an "escape" character, and it will "escape" the characteristic of the following character and just take on the 'visual' aspect of it. Here are some examples of quotation rules:
That covers the basics of strings for now.


sdf_schema_json.Rd
These functions support flexible schema inspection both algorithmically and in human-friendly ways.
sdf_schema_json(x, parse_json = TRUE, simplify = FALSE, append_complex_type = TRUE) sdf_schema_viewer(x, simplify = TRUE, append_complex_type = TRUE)
| x | An |
|---|---|
| parse_json | Logical. If |
| simplify | Logical. If |
| append_complex_type | Logical. This only matters if |
# NOT RUN { library(testthat) library(jsonlite) library(sparklyr) library(sparklyr.nested) sample_json <- paste0( '{"aircraft_id":["string"],"phase_sequence":["string"],"phases (array)":{"start_point (struct)":', '{"segment_phase":["string"],"agl":["double"],"elevation":["double"],"time":["long"],', '"latitude":["double"],"longitude":["double"],"altitude":["double"],"course":["double"],', '"speed":["double"],"source_point_keys (array)":["[string]"],"primary_key":["string"]},', '"end_point (struct)":{"segment_phase":["string"],"agl":["double"],"elevation":["double"],', '"time":["long"],"latitude":["double"],"longitude":["double"],"altitude":["double"],', '"course":["double"],"speed":["double"],"source_point_keys (array)":["[string]"],', '"primary_key":["string"]},"phase":["string"],"primary_key":["string"]},"primary_key":["string"]}' ) with_mock( # I am mocking functions so that the example works without a real spark connection spark_read_parquet = function(x, ...){return("this is a spark dataframe")}, sdf_schema_json = function(x, ...){return(fromJSON(sample_json))}, spark_connect = function(...){return("this is a spark connection")}, # the meat of the example is here sc <- spark_connect(), spark_data <- spark_read_parquet(sc, path="path/to/data/*.parquet", name="some_name"), sdf_schema_viewer(spark_data) ) # }


Geoffrey Hinton received his PhD in Artificial Intelligence from Edinburgh in 1978. After five years as a faculty member at Carnegie-Mellon he became a fellow of the Canadian Institute for Advanced Research and moved to the Department of Computer Science at the University of Toronto where he is now an emeritus distinguished professor. He is also a distinguished researcher at Google.
Geoffrey Hinton was one of the researchers who introduced the backpropagation algorithm and the first to use backpropagation for learning word embeddings. His other contributions to neural network research include Boltzmann machines, distributed representations, time-delay neural nets, mixtures of experts, variational learning and deep learning. His research group in Toronto made major breakthroughs in deep learning that revolutionized speech recognition and object classification.
Geoffrey Hinton is a fellow of the UK Royal Society and a foreign member of the US National Academy of Engineering and the American Academy of Arts and Sciences. His awards include the David E. Rumelhart prize, the IJCAI award for research excellence, the Killam prize for Engineering, the IEEE James Clerk Maxwell Gold medal, and the NSERC Herzberg Gold Medal which is Canada's top award in Science and Engineering.
Dr. Aubrey de Grey is a biomedical gerontologist based in Cambridge, UK and Mountain View, California, USA, and is the Chief Science Officer of SENS Research Foundation. He is also Editor-in-Chief of Rejuvenation Research, the world’s highest-impact peer-reviewed journal focused on intervention in aging. He received his BA and Ph.D. from the University of Cambridge in 1985 and 2000 respectively. His original field was computer science, and he did research in the private sector for six years in the area of software verification before switching to biogerontology in the mid-1990s. Nowadays, Dr. de Grey is arguably the world’s foremost advocate for the pursuit of radical life extension.
Two years ago, Edward Snowden gave the WAC 2015 Lionel Gelber Keynote Address. In June 2013, Snowden leaked highly classified information about the scale and scope of NSA and CIA counter-terrorism and counter-intelligence operations around the globe. Since then, he has become a household name and is among the most influential privacy activists in the world. At the Keynote Address, Snowden explained his views on global privacy issues, government involvement in citizens' lives, and the dangers of the digital age.
WAC has featured many current, popular, and influential speakers in the past. Here's a quick summary of some big names at WAC: Nanor Balyozian - Syrian political advocate Dr. Samantha Nutt - Founder of War Child North America Stephen Lewis - former United Nations ambassador Ralph Nader - American political activist Lord David Owen - former British Foreign Secretary Marc Garneau - astronaut turned politician John Stackhouse - editor of the Globe and Mail


4 Uno Rules You're Playing Wrong
Say what?
The popular American card game Uno has simple rules, right? Wrong! Here are some rules you're probably playing incorrectly.
If you don't have a card to play, you only have to pick up one card
You don't have to keep drawing cards until you get one that matches the discard pile, and you can even play it right away!
You can't stack or chain cards
Sorry, you can't make your little brother pick up 6 cards by playing a draw 2 after a draw 4. If a draw card is played, the next player picks up the cards and misses their turn.
You can win with an action card
Wild, Skip, even Reverse - doesn't matter as long as it matches the color!
In two player mode Reverse is treated as a Skip
The other player's turn is skipped and you can play again right away. Same with draw cards!


|
|
{{m.name}}
{{m.email}}
|
{{m.position}}
|
||
| This list contain no member ! Please start adding some on your right. | ||||
| No list is selected ! Please select one on your left. |
|
|
{{m.name}}
{{m.email}}
|
{{m.position}}
|


complexes model lanthanide UME Sparkle/PM, mean Sparkle Freire La(III), obtained {border-style Simas lanthanides calculated complex px;} #ffffff;} (Å) Ce(III) Sparkle/PM distances set unsigned Rocha Sparkle/AM sparkle using Pr(III). universe Fig Pr(III) complexes, coordinated Chem Table directly errors parameters types UMEs experimental models trications: Complexes Model: Sparkle/RM, complexes. difference error interatomic ion previous semiempirical value versions ./journal.pone..t accuracy crystallographic distances, lanthanides. lanthanum parameterization Ce(III), Model Phys absolute bonds new order px; summed {font-family Cambridge Costa Parameters Structural Structure data electronic font-size good optimization present specific structure (III) CSD Dutra However, Inorg compared distribution double; high introduced properties Acta Chem. Filho Junior Lett. Sparkle/RM Tables atoms average border-color border-width core geometries important ions lanthanides, large larger praseodymium presents quantum solid; used {font-style {font-weight .Å. JDL Lanthanum Mesquita Santos Sparkle/PM. accurate addition, atomic bold calculation calculations coordination courier; crystal deviation dos em; errors, ligand ligands measure model, modeling models. nitrogen oxygen p-value praseodymium(III) prediction pt;} quality refers relative runs structures study tetramer variance


The debugger may be used to debug pl/pgsql functions in PostgreSQL, as well as EDB-SPL functions, stored procedures and packages in EnterpriseDB.
Note: The debugger may only be used by roles with ‘superuser’ privileges.
In order to use the debugger, a plugin is required on your server. This is included by default with EnterpriseDB, and is available for download on pgFoundry. It is installed as a contrib module with the Windows distribution of PostgreSQL 8.3 and above.
The debugger may be used for both in-context and direct debugging. To debug an object in-context, right click it in the pgAdmin browser treeview, and select the “Global breakpoint” option. The debugger will then wait for the next session to execute the object, and break on the first line of executable code. To directly debug an object, right click it and select the “Debug” option. The debugger will prompt you for any parameter values that may be required, invoke the object, and break on the first line of executable code.
When entering parameter values, type the value into the appropriate cell on the grid, or, leave the cell empty to represent NULL, enter ‘’ (two single quotes) to represent an empty string, or to enter a literal string consisting of just two single quotes, enter ‘’. PostgreSQL 8.4 and above supports variadic function parameters. These may be entered as a comma-delimited list of values, quoted and/or cast as required.
Once the debugger session has started, you can step through the code using the menu options, keyboard shortcuts or toolbar buttons. Breakpoints may be set or cleared by clicking in the margin of the source window, or by clicking on the desired code line and using the “Toggle breakpoint” button or menu option. If you step into other functions, the Stack pane may be used to navigate to different stack frames - simply select the frame you wish to view.
When the debugger has reached the end of the executable code, if running in-context it will wait for the next call to the function, otherwise it will prompt for parameter values again and restart execution. You may exit the debugger at any time.


{% extends 'base.html' %} {% block content %}
In order to use the configuration web application and to enter the experiment network of Ofelia, please download the OpenVPN configuration and fire up your OpenVPN.
The minimum requirements for the tunnel to work is OpenVPN 2.x.x and optionally resolvconf to update your DNS (e.g. sudo apt-get install resolvconf).
Please refer to the documentation wiki for setup.
After opening the tunnel, please visit Expedient. Please see the wiki for links and more information.
Please also see the official Ofelia website.
{% endblock %}


A CSS experiment for heads popping up in your slides
As done by Chen Hui Jing in this article here.
What's Going On Here?
Using CSS Animations to change the values of translateX
, translateY
, and rotate
and then setting the animation to run infinitely.
Limitations:
There can only be a limited variety of head popping styles as compared to randomizing the location of the head each time with JavaScript like she did (read the article!).


| Release: | 0.5 |
| Date: | September 07, 2009 |
PyAMF 0.5 is a cleanup of the internals of 0.4 and it provides some performance
optimizations. In accomplishing this, a number of features were added:
- A new way to handle attribute en/decoding. New features include excluding
attributes, read-only attributes, and proxied attributes. If you use
external classes, this one is also for you. Check the
wiki for more details.
- The lazy loading module (pyamf.util.imports) that powers the adapter
modules has been completely revamped.  We now supply a module
finder/loader in sys.meta_path so we can intercept the import calls.
This has completely cleared up the problems we were seeing and it has the
added benefit of halving the time it took to run the 650+ unit tests in
the suite!
- The cPyAMF extension has been completely revamped and no longer uses
cStringIO to handle the byte packing. The extension has also been
extended to cover more of the library. This has given a nice speed-up but
we are by no means finished.
- Support for non-UTC timezones has been added. If you supply timezone_offset
to the pyamf.remoting.gateway.*.*Gateway classes then any datetimes will
be offset against that figure (in seconds). This is only useful for legacy
systems so you don’t need to change anything if you are already using UTC
(in fact using UTC is the recommended practice).
- Support has been provided for decoding and encoding ISmallMessage objects.
This means better integration with BlazeDS and sets the foundations for
better Flex Messaging support.
- A new way to bulk register classes has been introduced - register_package
You can register a module:
import pyamf
from myproj.myapp import models
pyamf.register_package(models, 'foo.bar')
- The pyamf.logging module has been removed because it didn’t do very much.
- A number of utility functions that weren’t being used, or were implemented
in the Python standard library, have been removed. These include:
- pyamf.util.getmro
- pyamf.util.make_classic_instance
- pyamf.util.IndexedCollection.remove
- The dependancy on fpconst has been
removed. This means that PyAMF will make no attempt to correct what the Python
interpreter spits out for exceptional floats (see our blog post
about the issue).
- Most of the arguments for pyamf.register_class were removed, due to the
new attribute control (see above).
- The logger attribute is now set to None by default. Supply a logger
instance to reactivate the old functionality.
- If debug is False then any stacktraces will not be sent to the client.
Besides greater stability for the Windows platform, more types from
the Python 2.6 standard library are now supported, including:
| Module |
Encode |
Decode |
| collections.deque |
list |
list |
| collections.defaultdict |
untyped object |
dict |
| collections.namedtuple |
list |
list |
| array.array |
list |
list |
Python exceptions are now mapped to Flash exceptions (where possible), including
the name and message attributes. You can now map error classes:
import pyamf
pyamf.register_class(ValueError, 'com.acme.app.errors.ValueError')
- Django models can now have dynamic properties assigned to them and they will
be encoded correctly.
- Support for model inheritance:
from django.db import models
class CommonInfo(models.Model):
name = models.CharField(max_length=100)
age = models.PositiveIntegerField()
class Meta:
abstract = True
class Student(CommonInfo):
home_group = models.CharField(max_length=5)
- Support for FileField/ImageField (thanks
@jhooks!).
- parent->child relationships will be referenced correctly, such that
parent.child.parent is parent. In this situation, PyAMF 0.4 would encode
3 separate objects, but PyAMF 0.5 will correctly encode 2 (parent being
encoded as a reference).
- Greater support for the standard property types has been included
(specifically db.FloatProperty).
- Support for db.polymodel.PolyModel has been included.
from google.appengine.ext.db import polymodel
class Poly(polymodel.PolyModel):
s = db.StringProperty()
class DeepPoly(Poly):
d = db.IntegerProperty()


A PWG standard that allows personal computers and mobile devices to find and print to networked and USB printers without using vendor-specific software.
Today’s IPP printers offer state-of-the-art printing capabilities, output quality, and ease of use without the need to download and install driver software or configure print queues.
Features: Printer discovery, full range of print media, 2-sided printing, photo printing, finishers (stapling, punching, folding, etc.), and more!
Many clients already support IPP Everywhere. For those that don’t, operating system and desktop environment developers can leverage existing open source software to quickly provide IPP Everywhere printing support.
Popular clients: Chrome OS, CUPS, Linux, macOS
98% of all printers sold today support IPP/2.0 and DNS-SD. Support generic file formats to enable IPP Everywhere printing.
Required: IPP/2.0, DNS-SD, PWG Raster and JPEG JFIF file formats (JPEG only required for color printers)
Recommended: PDF, IPP-USB
Cloud, enterprise, and managed print services can utilize the IPP Shared Infrastructure Extensions to act as an intermediary between clients and printers. Clients continue to use the same printing interface while printers use the “proxy” interface provided by the print service to collect print jobs as needed.
Features: Cloud printing, centralized accounting and access control, “release” printing


Please take a moment to provide your feedback.
What is your favorite type of wine?
Your favorite wines come from which of these countries? (choose up to 3)
Do you like wine blends?
Would you like to share any other wine preferences?


TargetEncoder¶
-
class
paralytics.
TargetEncoder
(columns=None, nan_as_category=True, cv=None, inner_cv=None, shuffle=True, alpha=5, random_state=None)[source]¶ Bases:
sklearn.base.BaseEstimator
,sklearn.base.TransformerMixin
Encodes categorical features with the corresponding target value.
If cv param is specified, performs determination of mean values on the way of cross validation within inner cross validation. As a result for each of the outside folds received target aggregated values will be less biased.
- Parameters
- columns: list, optional (default=None)
List of DataFrame columns’ names on which target encoding should be performed. If not specified all categorical columns are taken.
- nan_as_category: boolean, optional (default=True)
If True includes NaNs as one of the categories and also applies target encoding for this subgroup.
- cv: int, optional (default=None)
Number of cross-validation folds.
- inner_cv: int, optional (default=None)
Number of inner cross-validation folds.
- shuffle: boolean, optional (default=True)
Whether to shuffle the data before splitting into batches.
- alpha: int, optional (default=5)
Regularization value (times of global mean added to the weighted mean of each category). The larger, the more conservative the algorithm will be. If you want to use the standard mean just set alpha to 0.
- random_state: int, optional (default=None)
Random state for sklearn algorithms.
Notes
When setting cross-validation parameters remember that all categories must be sufficiently represented. If a category is sparse, because of the lack of representation in one of the k-folds, NaNs in this fold will be generated because there are no values recorded from which the statistics are calculated. A simple solution is to apply the transformator: preprocessing.CategoricalGrouper that groups sparse categories into one category, before using the target encoding.
- Attributes
- cat_aggval_: dict
Dictionary of dictionaries of corresponding aggregated values to given subgroups. The key is the column name and the value is the dictionary in which the key is the subgroup name and the value is the fitted target aggregated value.
Methods Summary
fit
(self, X, y)Fits corresponding target aggregated values to categorical subgroups.
fit_transform
(self, X[, y])Fit to data then transform it.
transform
(self, X[, y])Applies target encoding on X.
Methods Documentation
-
fit
(self, X, y)[source]¶ Fits corresponding target aggregated values to categorical subgroups.
- Parameters
- X: DataFrame, shape=(n_samples, n_features)
Training data of independent categorical variables.
- y: array-like, shape=(n_samples, )
Vector of target variable values corresponding to X data.
- Returns
- self: object
Returns the instance itself.
-
fit_transform
(self, X, y=None)[source]¶ Fit to data then transform it.
Fits transformer to X and y and returns transformed version of X.
- Parameters
- X: DataFrame, shape = (n_samples, n_features)
Training data of independent categorical variables.
- y: array-like, shape = (n_samples, )
Vector of target variable values corresponding to X data.
- Returns
- X_new: DataFrame, shape = (n_samples, n_features)
X data with substituted values to their respective target aggregated values.
-
transform
(self, X, y=None)[source]¶ Applies target encoding on X.
X is target encoded with the aggregated values kept in the cat_aggval_ and for the training data encoding is made with additional spread obtained in the cross-validation within cross-validation.
- Parameters
- X: DataFrame, shape = (n_samples, n_features)
New data with n_samples as its number of samples.
- y: array-like, shape = (n_samples, )
Vector of target variable values corresponding to X data.
- Returns
- X_new: DataFrame, shape = (n_samples, n_features)
X data with substituted values to their respective target aggregated values.


Enter your cluster and job specs to create a job script on the right.
{{ job_name}}.job
Specify your script including the full path.
Specify the duration of the job.
hours
minutes
seconds
- {{ feature }}


SafeWalk Find your safest route for any time of day
Project for Insight Data Science Fellowship Fall 2016
Instructions (Video below)
Browse the map on your right. Clicking on the map for the first
time will generate a marker and fill in the starting latitude and
latitude fields below. Clicking on the map a second time will populate the
ending latitude and longitude fields. Clicking again will repeat this cycle. Once you are happy with the
destinations coordinates, select the time of day, crime avoidance level and fear of crime and then click on Route Me!
This project was created during my Insight data science fellowship
in September 2016.


Home Section
Secondary text
This is a content.
About Section
Secondary text
This is a content.
Projects Section
Secondary text
This is a content.
Contact Section
Secondary text
This is a content.


My Listings
| Listings | Featured | Views | Reviews | Posted on | Last Edited | Status |
|---|---|---|---|---|---|---|
| 784 | 28/02/2018 9.15am |
Today 11.00am |
Pending | |||
| 698 | 15/12/2016 9.15am |
Today 11.43am |
Active | |||
| 450 | 29/01/2018 9.15am |
Today 12.27pm |
Canceled | |||
| 1.4K | 29/12/2017 9.15am |
Today 9.13am |
Active | |||
| 450 | 04/01/2018 9.15am |
Yesterday 3.46pm |
Active |


How many homeless people are in San Francisco? How do people become homeless? How can I help homeless people?
These are just some of the questions people ask Google about homelessness in San Francisco, according to
Google Trends
. Many of these questions dont have simple answers, and
decades of efforts
have not significantly moved the needle. There are more than 6,600 homeless people in the city, many of whom are children. People who experience homelessness often struggle from chronic stress, trauma, and frequent moves, and are unable to take advantage of many educational or economic opportunities.
We want to do our part in tackling this complex issue. Since 2014, Google.org has invested more than $5 million in Bay Area nonprofits who are working to combat homelessness, and today were committing an additional $1.2 million for these efforts. The Google News Lab is also
joining the San Francisco Chronicle and 70+ news outlets
across the country to help raise awareness as part of the Beyond Homelessness initiative, launching today.
The organizations were supporting are tackling the issue of homelessness in new ways and from multiple angles, and include
Hamilton Family Center
,
Larkin Street Youth Services
,
HandUp
,
First Place for Youth
,
Lava Mae
,
LifeMoves
,
Abode Services
-
Project Welcome Home
,
GLIDE
,
Downtown Streets Team
and
Destination: Home
.
In San Francisco and across the Bay area, these 10 organizations provide a range of services and programs focused on rapid re-housing and prevention, basic services, job training and more. Our newest grantee,
Destination: Home
, plans to use their $1 million grant to build a rapid re-housing system for homeless families in Mountain View and Sunnyvale in the form of security deposits, motel stays, time-limited rental assistance, move-in assistance, and a support system to make sure individuals and families find stable housing.
HandUp
has helped both homeless and low-income individuals and families overcome poverty via a giving platform that connects donors directly with neighbors who are struggling to meet basic needs.
The Downtown Streets Team
provides a work experience program for homeless men and women through beautification projects in San Franciscos Civic Center/Mid-Market neighborhoods. And
Lava Mae
is expanding their mobile showers for the homeless to Los Angeles with an additional $200K in Google.org grant funding.
The Downtown Streets Team helps people like Norman Will Williams gain work experience. Learn more
on their website.
One in 25 kids in San Francisco Unified School District are homeless, and many families face at least a nine-month wait list for temporary shelter. In 2015, we supported the
Hamilton Family Center
(HFC) with a $1 million grant aimed to reduce the homeless family wait list for shelter by creating direct lines of communication with SFUSD teachers and staff to report and respond to new and potential cases of homelessness. HFC has already seen a 25 percent reduction in the family wait list, and hopes to continue that momentum.
Homelessness in our cities is a challenge decades in the makingand will require continued innovation and dedication to solve. Were committed to helping, through financial support, volunteering and raising awareness. Find out more about this issue on
our Google Trends site
and join us in finding solutions by visiting
Beyond Homelessness
or contributing to any of our grantee organizations.
Posted by Justin Steele, Bay Area Giving Lead, Google.org
https://3.bp.blogspot.com/-t51u82Gg5pg/V4cJDtzfrZI/AAAAAAAASpw/c4xslSQpcrw7xK8Tdcly5_sAPrgxhaZwACLcB/s200/10-1.jpg
Blogger backup created by Robert Washbourne


Few metrics that indicate some general problem categories
TOTAL_CPU_TIME (Higher than normal) :: High processor usage is a good indicator that the slowdown is located within data server processing. The data server is working harder than normal to handle application requests.
CLIENT_IDLE_WAIT_TIME (Normal) :: The slowdown is NOT located in the client.
TOTAL_WAIT_TIME (Normal) :: Requests are NOT spending more time waiting for resources needed such as locks or for input and output.
TOTAL_SECTION_PROC_TIME (Higher than normal) :: The cost of SQL statements (access plan sections) has increased.


Joke Teller
Would you like to hear ...?
Random Joke
Our Best
Knock-Knock
Joke
Or would you prefer to see a list of all ...?
Chicken Crossing the Road Jokes
Knock-Knock Jokes
Add a Joke
Title:
Question:
Answer:
Created By:
Category ID(s):
Delete a Joke
ID:


Choose Your Identity Provider UC San Francisco Harvard Stanford Penn State University UC Berkeley UC Los Angeles UC San Diego Yale Facebook LinkedIn
Remember selection for 30 days


Leaving Group
×
Are you sure you want to leave {{chatRoom.getSelectedRoom().name}}?
Send attachment
×
DROP FILES HERE
{{selectedFilesArr[0].name || "Choose file" }}
{{file.name}}
Kicking from group
×
Are you sure you want to kick {{modalMember.name}} from {{chatRoom.getSelectedRoom().name}}?
Removing friend
×
Are you sure you want to unfriend {{modalMember.name}}?
Creating Group
×
Group Name
Members
{{name}}
{{friend.name}}
Group Details
×
New Group Name
Delete a message
×
Are you sure you want to delete this message?
{{user.name}}
@{{user.uname}}
{{ room.name }}
{{ formatGroupTextSub(room.chats) }}
{{room.unread}}
{{chat.message}}
{{getLocalTimeNow(chat.timestamp)}}
{{chat.message}}
{{getLocalTimeNow(chat.timestamp)}}
{{chat.name}}
{{getLocalTimeNow(chat.timestamp)}}
{{chat.name}}
{{getLocalTimeNow(chat.timestamp)}}
{{chatRoom.getSelectedRoom().name}}
Select a group to start chatting
Leave group
{{member.name}}
{{friend.name}}


A self-avoiding walk (SAW) $\omega$ is a sequence of lattice vertices $(\omega_0, \omega_1, \dots, \omega_n)$ such that $\omega_i \neq \omega_j$ for $i\neq j$, and $\omega_i,\omega_{i+1}$ are adjacent on the lattice for each $i=0,\dots,n-1$. We say $\omega$ has size $|\omega| = n$.
Since the lattice is vertex-transitive, if one SAW is a translation of another we consider them to be the same. Equivalently assume $\omega_0 = 0$.
For a given lattice take $c_n$ to be the number of SAWs of size $n$. Then e.g. on the square lattice \[ (c_n)_{n\geq0} = (1, 4, 12, 36, 100, 284, 780, \dots) \]
A self-avoiding polygon (SAP) $\pi$ is a sequence of lattice vertices $(\pi_1, \pi_1, \dots, \pi_{n})$ such that $\pi_i \neq \pi_j$ for $i\neq j$, and $\pi_i,\pi_{i+1}$ are adjacent on the lattice, and so too are $\pi_1,\pi_n$. The size of $\pi$ is $n$.
Equivalently a SAP is a SAW which ends adjacent to its initial vertex.
For our purposes two SAPs are the same if they are translates of one another. So there are $2n$ SAWs (of length $n-1$) corresponding to each SAP of size $n$. Let $p_n$ be the number of size-$n$ SAPs. Then e.g. on the square lattice \[ (p_n)_{n\geq4} = (1,0,2,0,7,0,28,0,124,\dots) \] (On the triangular and fcc lattices SAPs can have odd size.)
SAPS have all vertices of degree 2 while SAWs have two vertices of degree 1. Here we introduce vertices of degree 3: thetas (two vertices of degree 3) and tadpoles (one degree 1 and one degree 3).
Again counted up to translation. On the square lattice \begin{align*} (\theta_n)_{n \geq 7} &= (2, 0, 12, 6, 62, 60, 338, 430, 1966, \dots) \\ (\varphi_n)_{n \geq 5} &= (8, 24, 84, 244, 740, 2072, 6004, \dots) \end{align*}
On the square and cubic lattices, the three "arms" of a theta must have the same parity $\rightarrow$ strong parity effects. Not a problem on the triangular or fcc lattices.
Conception for SAWs is usually credited to Paul Flory (J. Chem Phys. 1949). He was interested in a theoretical model for long linear polymer chains in solution. In particular he wanted a model which accounted for the excluded volume principle: the idea that two monomers in a chain cannot occupy the same space.
| poly(2-vinylpyridine) (Y. Roiter & S. Minko, J. Amer. Chem. Soc. 2005) | square lattice SAW of length $2^{25}$ (N. Clisby 201?) |
SAWs (or SAPs, trees, etc., depending on the model) turn out to be a good model for polymers in a good solvent (at least for long ones).
Headphone cables, shoelaces, necklaces, and even polymer molecules can get tangled up in knots and links.
H.L. Frisch and E. Wasserman (J. Amer. Chem. Soc. 1961) and M. Delbruck (Proc. Symp. Appl. Math. 1962) conjectured that random simple closed curves in $\mathbb{R}^3$ will be knotted with high probability. More precisely, the probability of being unknotted decays exponentially with the length of the curve.
| (S.A. Wasserman et al, Science 1985) |
The FWD conjecture was first proved by D.W. Sumners and S.G. Whittington (J. Phys. A: Math. Gen. 1988) for SAPs on the cubic lattice. Their method used pattern theorems.
Subsequently proved for a number of other models (on and off the lattice).
Knots are very likely because small "knotted parts" can be inserted into a polygon and force it to be knotted. But in turn the "knotted part" of a typical large knotted polygon is relatively small.
Different ways to estimate the "size" of the knotted part. Marcone et al (J. Phys. A 2005) use two different methods:
Both methods lead to an estimate of the knotted part of an $n$-edge prime knot occupying $\approx n^{0.75}$ edges.
Question: How do the different parts of a typical theta scale in size? Most likely two arms are small and one big:
During DNA transcription, single-stranded RNA can fuse with double-stranded RNA to form R-loops:
| Jonoska et al, Using Mathematics to Understand Biological Complexity 2021 |
| Carrasco-Salas et al, Nucleic Acids Res. 2019 |
The presence of R-loops can affect repair, eg. in human cells.
Topologically the DNA:RNA hybrid is a graph with two vertices of degree 3 or 4:
Different parts are single- or double-stranded so may have different stiffness etc.
Thetas can also have non-trivial topology -- open questions about minimum number of edges required, etc.
| Buck & O'Donnol 2018 |
The BFACF algorithm (Berg & Foester 1981, Aragão de Carvalho, Caracciolo & Fröhlich 1983 and 1983) is a method for sampling SAWs and SAPs which preserves topology.
For 2D SAPs it is ergodic while in 3D the ergodicity classes are the knot types. For SAWs the ergodicity classes are walks between two fixed endpoints.
Also works on the triangular lattice.
For the fcc and bcc lattices, Janse van Rensburg and Rechnitzer (2011) found a set of moves which also give the knot types as the ergodicity classes.
The above BFACF moves can shift vertices of degree 2 and leave vertices of degree 1 fixed.
To accommodate vertices of degree 3, Sokai (2018) found a new set of moves on the square/cubic lattices which can realise any ambient isotopic transformation:
Note that the degree 3 vertices can move around.
Simpler on the triangular lattice:
Same moves on the fcc lattice since the faces are still triangles.
We combine the BFACF moves with the Wang-Landau method (2001) to estimate the number $a_n$ of configurations of size $n$.
Start with $f=1$ and arrays $G$ and $H$ both all $0$.
If $m$ is the size of the smallest configuration, set $g=G(m)$ and then for each $n$ set \[ A(n) = \exp(G(n) - g)\cdot a_m\cdot m/n. \] Then $A(n) \approx a_n$.
Easily generalises to measure more than just size -- e.g. we will estimate $\theta_{n,k}$, the number of thetas of size $n$ with shortest arm of size $k$.
Many other variations -- e.g. change how $f$ decreases, or tune $G$ and then use those values to estimate some other quantity.
The number $p_n$ of SAPs on the lattice is $\sim \text{const.} n^g \mu^n$ where (Guttmann 2009) \[ g = \begin{cases} -5/2 & d=2 \\ -2.76279 & d=3 \end{cases} \] and $\mu$ is the connective constant of the lattice (Jensen 2004, Clisby 2022): \begin{align*} \mu_\text{tri} &= 4.150797226(26) \\ \mu_\text{fcc} &= 10.03705785(14) \end{align*}
Expect $\theta_n \sim \text{const.}n^h \mu^n$ for the same $\mu$.
Estimating the exponent $h$ for the triangular lattice (10 independent runs, $N=500$):
$h \approx g+1$ $\leftrightarrow$ $O(n)$ places to position a small loop within a big polygon.
Estimating the exponent $h$ for the fcc lattice (10 independent runs, $N=300$):
Again $h \approx g+1$.
Note that these thetas are unknotted so should really use $\mu_0$ but don't have an estimate for that.
If $\sigma(\theta)$ is the length of the shortest arm then expect (?) $\langle \sigma \rangle_n \sim \text{const.}n^s$ for some $s$. Estimating $s$ for the triangular lattice (10 independent runs, $N=500$):
Estimating $s$ for the fcc lattice (10 independent runs, $N=300$):
Still some curvature $\rightarrow$ $s \approx 0.75$ is very plausible.
Can also look at $\tau(\theta)$, the sum of the two shortest arms. Triangular lattice (10 independent runs, $N=400$):
Likely the same exponent as for shortest arm.
fcc lattice (10 independent runs, $N=300$):
Likely the same exponent, more data may help.
$N=200$
$N=120$
The number $c_n$ of SAWs on the lattice is $\sim \text{const.} n^{\gamma-1}\mu^n$ where (Clisby 2017) \[ \gamma = \begin{cases} 43/32 & d=2 \\ 1.15695300(95) & d=3 \end{cases} \]
Expect $t_n \sim \text{const.}n^r \mu^n$ for some $r$.
Estimating $r$ for the triangular lattice (10 independent samples, $N=300$):
Note that $\gamma-1 = 11/32 = 0.34375$.
Estimating $r$ for the fcc lattice (10 independent runs, $N=200$):
Note that $\gamma-1 = 0.156953$.
Let $\eta(\varphi)$ be the number of edges in the "head" of a tadpole $\varphi$. How does $\langle \eta \rangle_n$ scale? Still a power law? Triangular lattice (10 independent samples, $N=300$)
Small exponent and still some curvature... not so convincing.
Try for $\log$ instead of power law:
More convincing (?)
Repeating for fcc lattices (10 independent runs, $N=200$), trying a power law:
Trying log scaling:
In 2D there are two different topologies for tadpoles: "regular" and "inverted"
All the previous data was for regular tadpoles.
Let $i_n$ be the number of inverted tadpoles.
Expect different behaviour -- regular tadpoles are long SAWs with a little loop, but with inverted there is competition between the size of the head and tail?
Harder to sample -- configurations at either extreme of head/tail size are very rare. Estimating exponent for triangular lattice (10 independent runs, $N=100$):
Seems that both head and tail scale as $O(n)$ (10 independent runs, $N=100$):
$N=150$
$N=100$
$N=50$


|
|
CIFXPrimitiveOverlap Class ReferenceList of all members.
|
Public Member Functions |
| | CIFXPrimitiveOverlap () |
| | ~CIFXPrimitiveOverlap () |
| void | ClosestPointToBox (IFXVector3 vVertsBoxA[10], IFXVector3 vVertsBoxB[10], IFXVector3 &vClosestPoint, IFXVector3 &vContactNormal) |
| void | ComputeTriangleNormal (IFXVector3 &vP1, IFXVector3 &vP2, IFXVector3 &vP3, IFXVector3 &vNormal) |
| IFXRESULT | Intersection2DLineSegment (IFXVector2 *pOrigin1, IFXVector2 *pDirection1, IFXVector2 *pOrigin2, IFXVector2 *pDirection2, IFXVector2 *pIntersectionPoint) |
| BOOL | Intersection3DLineSegment (IFXVector3 &vP1, IFXVector3 &vP2, IFXVector3 &vP3, IFXVector3 &vP4, IFXVector3 &vApproachPoint, F32 &fDistance) |
| IFXRESULT | ObbObb (IFXMatrix4x4 &mRotationBtoA, IFXVector3 &vhalfWidthB, IFXVector3 &vhalfWidthA) |
| BOOL | PointInTriangle (IFXVector2 triangle[4]) |
| BOOL | RaySphereIntersection (IFXVector4 &vBoundingSphere, IFXVector3 &vOrigin, IFXVector3 &vDirection) |
| IFXRESULT | RayTriangle (IFXVector3 vTriangle[3], IFXVector3 vOrigin, IFXVector3 vDirection, U32 uPickType, F32 *pfU, F32 *pfV, F32 *pfT) |
| IFXRESULT | ThreePlaneIntersection (IFXVector3 *pP1, IFXVector3 *pN1, IFXVector3 *pP2, IFXVector3 *pN2, IFXVector3 *pP3, IFXVector3 *pN3, IFXVector3 *pIPoint) |
| IFXRESULT | TriangleTriangle (IFXOverlapTriangle TriA, IFXOverlapTriangle TriB, IFXVector3 vIntersectPoint[2], IFXVector3 vIntersectNormal[2]) |
| IFXRESULT | TriangleTriangleERIT (IFXVector3 vTriA[3], IFXVector3 vTriB[3], IFXVector3 *pvIntersectPoint, IFXVector3 *pvIntersectNormal, F32 *pfPenetrationDistance) |
Private Member Functions |
| void | ComputeBoxNormals (IFXVector3 vVertsBox[10], IFXVector3 vNormal[6]) |
| void | ComputeVertexEdgeNormal (IFXVector3 vVerts[10], IFXVector3 vNormalsBox[6], IFXVector3 &vPoint, IFXVector3 &vNewNormal, F32 &fDistance) |
| void | ComputeVertexNormal (IFXVector3 vNormalsBox[6], IFXVector3 &vNewNormal, U32 uVertex) |
| BOOL | ComputeIntervals (F32 fProjections[3], F32 fDotProduct[3], F32 fPosNeg[2], F32 fTmps[3], F32 fIsect[2]) |
| IFXRESULT | CoplanarTriangles (IFXVector3 *pvNormal, IFXVector3 vTriA[3], IFXVector3 vTriB[3]) |
| IFXRESULT | ProjectedEdgeOverlap (IFXVector3 *pvVA0, IFXVector3 *pvVB0, IFXVector3 *pvVB1, F32 fAx, F32 fAy, U32 uI0, U32 uI1) |
| IFXRESULT | PointInTri (IFXVector3 *pvVA0, IFXVector3 vTriB[3], U32 uI0, U32 uI1) |
Constructor & Destructor Documentation
| CIFXPrimitiveOverlap::CIFXPrimitiveOverlap |
( |
|
) |
|
|
| CIFXPrimitiveOverlap::~CIFXPrimitiveOverlap |
( |
|
) |
|
|
Member Function Documentation
| void CIFXPrimitiveOverlap::ComputeBoxNormals |
( |
IFXVector3 |
vVertsBox[10], |
|
|
IFXVector3 |
vNormal[6] |
|
) |
[private] |
|
| BOOL CIFXPrimitiveOverlap::ComputeIntervals |
( |
F32 |
fProjections[3], |
|
|
F32 |
fDotProduct[3], |
|
|
F32 |
fPosNeg[2], |
|
|
F32 |
fTmps[3], |
|
|
F32 |
fIsect[2] |
|
) |
[private] |
|
| void CIFXPrimitiveOverlap::ComputeVertexNormal |
( |
IFXVector3 |
vNormalsBox[6], |
|
|
IFXVector3 & |
vNewNormal, |
|
|
U32 |
uVertex |
|
) |
[private] |
|
| BOOL CIFXPrimitiveOverlap::PointInTriangle |
( |
IFXVector2 |
triangle[4] |
) |
|
|
|
|
- Todo:
- : I have found an addendum published by Moeller which now implements the code without divisions!
|
© 1999 - 2006 Intel Corporation. All rights reserved.
* Other names and brands may be claimed as the property of others.
|
|


Ajax is surprisingly easy to use with the Arc language. This article shows how to implement Ajax-based autocompletion and dynamic page updates using the script.aculo.us and Prototype JavaScript frameworks. These frameworks allow Ajax applications to be implemented with just a few lines of additional code. The hard work is done by the script.aculo.us and Prototype libraries. All the Arc code needs to do is provide the list of autocompletion candidates, and the dynamic page content.
To summarize how it all works: When you enter characters in the input field, the script.aculo.us autocompleter JavaScript sends the charaters to the Arc server, which returns the autocomplete suggestions. The autocompleter JavaScript displays the suggestions on the page. When you select a country, the updater JavaScript does three separate requests to the Arc server, to request the population, area, and capital. When the responses arrive, they are inserted into the page.
In more detail, the autocompletion is performed by Ajax.Autocompleter, and the dynamic updating is performed by Ajax.Updater. The control flow is:
Ajax.Autocompleter
associated with the autocomplete
input and autocomplete_choices
div sends inputs to /auto_complete?prefix=chars
.

Iran

Iraq

Ireland

.
Ajax.Autocompleter
displays the candidates in the autocomplete
div.
update
JavaScript function starts three Ajax.Updater
instances, which send an Ajax request to URL /getcontents?field=population&name=value, and similarly for area and capital in parallel.
- The Arc handler for
getcontents
returns the desired contents.
Ajax.Updater
puts the contents into the population
, area
, and capital
divs.
ajax.html
, ajax.arc
, data.arc
, and autocomplete.css
.
.js
files from lib
and src
into the same directory that Arc runs in.
ajax.arc
file, and start the web server.
arc> (load "ajax.arc") arc> (thread (serve 8080)) arc> ready to serve port 8080Then go to http://localhost:8080/ajax.html. (Unfortunately I don't have a live demo on a public machine. If anyone sets one up, let me know and I'll add a link here.)
Start typing in the box, and you should see a dropdown with autocompleted choices. Click one, and the code will be displayed below asynchronously.
ajax.arc
. Two Arc handlers are implemented to provide the client-side Ajax support. The first, auto_complete
receives the current input contents and returns a list of up to 10 autocompletion candidates formatted in HTML.
The second handler, getcontents
returns the dynamic content for the page, from the database
table. Note that the handlers do nothing particularly special to make them "Ajax"; they are standard Arc web handlers based on defop
and can be accessed directly through the browser. See Arc Web Server for more information on web serving with Arc.
(defop auto_complete req (let prefix (downcase (arg req "prefix")) (prn (to-html-list (cut (startselts prefix keylist) 0 10))))) (defop getcontents req (with (field (arg req "field") name (arg req "name")) (if (is field "population") (prn ((database name) 1)) (is field "area") (prn ((database name) 2)) (is field "capital") (prn ((database name) 3)))))The handlers use a couple helpers;
startselts
returns the elements that match the autocomplete prefix and to-html-list
wraps the elements in HTML list tags.
; Returns a list of elements that start with prefix (def startselts (prefix seq) (rem [no (begins (downcase _) prefix)] seq)) ; Wraps elts in HTML list tags (def to-html-list (elts) (tostring (prall elts "

" "

") (pr "

")))The actual content is obtained from
data.arc
, which contains the information on each country as a list of lists.
("United States" "301,139,947" "9,826,630" "Washington, DC")Some simple code converts
data.arc
into a table called database
indexed by country for easy lookup, and generates a sorted list of countries for use in autocompletion:
(= database (table)) (w/infile inf "data.arc" (let datalist (sread inf nil) (each elt datalist (= (database (elt 0)) elt)))) (= keylist (mergesort < (keys database)))
For some reason, the default Arc web server srv.arc
doesn't support .js
files. The ajax.arc
file modifies the server slightly to support these files:
(= (srv-header* 'text/javascript) "HTTP/1.0 200 OK Content-Type: text/javascript; charset=UTF-8 Connection: close") (def static-filetype (sym) (let fname (string sym) (and (~find #\/ fname) (case (last (check (tokens fname #\.) ~single)) "gif" 'gif "jpg" 'jpg "css" 'text/css "txt" 'text/html "html" 'text/html "js" 'text/javascript ))))
The Arc code can be debugged in several ways. The first is to access the handlers directly. The autocomplete handler http://localhost:8080/auto_complete?prefix=a should return a bullet list of autocomplete suggestions. The contents handler: http://localhost:8080/getcontents?field=area&name=Algeria should return the dynamic contents value.
The Arc code can also be debugged by strategically inserting print statements such as:
(write req (stderr))This will display the request on the Arc console.
To debug Ajax, you can use Firefox plugins Live HTTP Headers and Firebug. Live HTTP Headers lets you see the headers between the browser and the server, and is very helpful to determine if something is failing. Firebug allows much more in-depth JavaScript debugging. The browser's JavaScript console is also useful to see JavaScript errors.
This article has just scratched the surface of script.aculo.us and Ajax. More information is available at the script.aculo.us website or in books.


{% extends "layouts/main.html" %} {% set smallSearch = true %} {% set pageName = "Contribute" %} {% block page_title %}Contribute – {{ settings.title }}{% endblock %} {% block body_class %}contribute{% endblock %} {% block content %}
The data on Data Rights Finder is open. Anyone can contribute to it and anyone can use it and re-use it under the Open Database License.
You can make a contribution of data about an organisation that's not in the database at the moment with this form. Organisations can add data about their own privacy policy. We'll check over all contributions before they're added into the database. All contributions are licensed under the Open Database License.
There's a to-do list of organisations to be added to the database. If there's an organisation you'd like to add to the list send an email to us at<EMAIL_ADDRESS>to let us know. Or if you have a Github account, you can add the organisation directly to the list.


Importing
Import
Format
File
Start Date:
End Date:
Show Usernames:
Involved User URIs:
Name
Creation Method
make undirected
Submit
Select a Graph
Name
Nodes
Edges
D
W
Z
N
L
Select


Comic Book Reader 2010 Zombie Process Independant Development Project
My most recent project, also independent. Allows users to view comic book archive files (cbr, cbz, rar, zip). Uses the new iPad document handling features to allow it to open the files from other apps including Mobile Safari, and to add files straight from itunes. Also includes the ability to organize comic books into collections by filtering their file names, and will generate cover thumbnails to present the user's collection visually.
The user interface is strongly influenced by Apple's iBooks app, with a scrolling bookshelf representing the user's library. Core Graphics is used to composite 3D rendered images and shadows that make up the parts of the shelves. The volumes within a collection are presented using a coverflow view, which I adapted and enhanced from an open source framework. Threading is used for loading images to minimize load times.
The comic view itself uses nested scroll views, the outermost one used to handle movement from page to page, and each page has its own inner scroll view for zooming and panning. This creates a seamless transition from one page to another by dragging past the edge of a page, even when zoomed in close. A tap gesture is used to show and hide of the toolbars and status bar, as well as page turning by tapping in the margins. Pages are pre-fetched from the archive and cached to eliminate any delay during page turns, and the user's reading history is retained.


--- layout: post title: Tamale Pie - Recipe - Cooks.com date: type: post parent_id: '0' published: false image: assets/images/post-img/ status: draft categories: - Etc. tags: [] meta: {} author: login: mkelley email<EMAIL_ADDRESS>display_name: Mike first_name: Mike last_name: Kelley ---
Source: Tamale Pie - Recipe - Cooks.com


1)
Earth is the only planet that has liquid water on its surface.
fact
opinion
2)
My father is the smartest person.
fact
opinion
3)
Dark chocolate is better than white chocolate.
fact
opinion
4)
Horses and cows sleep while standing up.
fact
opinion
5)
Tokyo is the capital city of Japan.
fact
opinion
6)
You should have a pet animal.
fact
opinion
7)
Leopords are great climbers and swimmers.
fact
opinion
8)
Chess help in development of a child’s brain.
fact
opinion
9)
The crow is an ugly bird.
fact
opinion
10)
There are 7 days in a week.
fact
opinion


Response to SDLListFiles
Since SmartDeviceLink 2.0
An array of all filenames resident on the module for the given registered app. If omitted, then no files currently reside on the system.
@property (nonatomic, strong, nullable) NSArray<NSString *> *filenames;
var filenames: [String]? { get set }
Provides the total local space available on the module for the registered app.
@property (nonatomic, strong, nullable) NSNumber<SDLInt> *spaceAvailable;
var spaceAvailable: (NSNumber & SDLInt)? { get set }


Sungpil An
About Me
(current)
Portfolio
Contact
Portfolio (Click Images)
1. Digital Coffee
2. Daily Schedule
3. Code Quiz


|
John Denvir |
Biography: John Denvir is a Professor at the University of San Francisco School of Law
where he teaches Constitutional and Admininstrative Law. He has written
extensively on constitutional and legal theory, focussing on the insights which can be
drawn from the study of literature and film. He is editor of Legal
Reelism: Movies as Legal Texts ( U. Ill. Press 1996).
|
| Contact: |


In this scenario we demonstrate how to enable end-user reordering of a grouped Listview using the ‘itemsReorderable’ property.
When groups are involved, the listview handles all of the user experience, but you are required to complete the datasource changes upon handling the itemdragdrop event. Note that not every grouped dataSource is able to be reordered; If you attempt to move an item from one group to another when the getGroupKey() function still reports that the item belongs to the old group, then the reorder will not take place and the ListView dataSource will be in an indeterminate state.


Take Action
-
Completed:
Incomplete
Completed:
1.
Sign Up for Updates
-
Completed:
Incomplete
Completed:
2.
Get Educated
Get Educated
Find out how we’ll elect a majority committed to fundamental reform, and ending the system of corruption in Washington, DC.
-
Completed:
Incomplete
Completed:
3.
Spread the Word
Spread the Word
Build the movement to form a more perfect union. Help us recruit more people to help.
-
Completed:
Incomplete
Completed:
4.
Call Congress
Call Congress
Start fighting for fundamental reform. This tool will help you call the office of one of our potential leaders, so you can ask your legislators to support reform.
-
Completed:
Incomplete
Completed:
5.
Join the Discussion
Join the Discussion
Meet other citizens dedicated to reform and help shape the campaign.
-
Completed:
Incomplete
Completed:
6.
Volunteer
Volunteer
We've got lots we need people to help with. Sign up if you can do more.


Back to home
TODO
Edit title, post name, date
css, fonts
template.html
GitHub, surge
How to take notes
edit index
start with template, or paste into new post
pre tags, replace < and >


|
clibs
Tiny but handy utility libraries for C
|
Common math operations. More...
Go to the source code of this file.
Macros | |
| #define | MAX(a, b) ((a) > (b) ? (a) : (b)) |
| Get the maximal value between a and b. | |
| #define | MIN(a, b) ((a) < (b) ? (a) : (b)) |
| Get the minimal value between a and b. | |
| #define | ABS(a) ((a) > 0.0 ? (a) : -(a)) |
| Get the absolute value of a. | |
| #define | EQUAL(a, b) |
| Check the equality between two floating-point numbers. More... | |
Common math operations.
| #define EQUAL | ( | a, | |
| b | |||
| ) |
Check the equality between two floating-point numbers.
EQUAL(a, b) compares two floating-point numbers by the absolute value of the difference between them. The value should be small enough to be viewed as equal. EQUAL(a, b) utilizes sizeof to get the width of the number to be compared so that it can compute a proper error value.
Formula to get the precision of each data type:
digit = bit * log(2) / log(10)


Judges 6:40
And God did so that night: for it was dry upon the fleece only, and there was dew on all the ground.


Email is nowadays the primarily medium for easy communication. So if you have something to say about the things you find on this page or you have some business needs for me, don’t hesitate to write me. My email address is:
<EMAIL_ADDRESS>Please not that it may take a little time until I answer your mail and if I don’t drop you a line don’t take it personally.
To be up what’s going on with, you can follow me on the social networks. Recently I mostly twitter about the stuff that concerns me actually.


A universal api and common data representation that can be used across the web and within organisations. Rather than many bespoke APIs and clients libraries, a single common, universal means to expose, consume, update and query data. Layered on top of this protocol is a data representation that uses global identifiers for things and schema. The Web Of Data specification is here. It`s simple, powerful and supported by open source implementations.
Pulling together 20 years of standards work in the area of data interchange formats and APIs. The WoD specification brings together all the best things from OData, RDF, Topic Maps, and SDShare; to deliver a easy to use, easy to implement, web scale, universal data representation and protocol.
The specification is developed under an open process on github. The latest version of the specification is 0.8
The protocol part of the specification is also published as swagger interface.
The WoD reference implementation (MIT license) provides a production ready, small footprint, high performance WoD server. This can be downloaded and used for publishing WoD data. In addition, community developed open source components provide different kinds of WoD compliant software.
The software page contains links for downloads and links to open source projects.
The blog contains articles about the Web of Data; including implementations, inspirations and applications.
01/01/2018 - Version 0.8 of the specification released.


Simply counts the number of devices and users on your account.
Total vehicles: Not determined yet
Total users: Not determined yet
Help
Overview
This example shows you how to make simple API requests.
Work flow
We make two API requests to retrieve the count of the Device
and User entities. The API response containing the count is
then displayed on the page.


File
Date
{% for file in filelist %}
{{ escape(file[0]) }}
{{ escape(file[2]) }}
{% end %}
play
play
pause
stop
mute
unmute
max volume
full screen
restore screen
repeat
repeat off
File Not Yet Loaded
Update Required
To play the media you will need to either update your browser to a recent version or update your
Flash plugin
.


[Page content goes here]
[Visit the NHS digital service manual for guidance and examples.]
Page last reviewed: 27 March 2018
Next review due: 27 March 2021
{% extends 'layout.html' %} {% block pageTitle %} Publication HTML - mini hub - Page two {% endblock %} {% block beforeContent %} {{ breadcrumb({ items: [ { href: "/", text: "Home" } ], href: "/mini-hub", text: "Main page" }) }} {% endblock %} {% block content %}
[Page content goes here]
[Visit the NHS digital service manual for guidance and examples.]
Page last reviewed: 27 March 2018
Next review due: 27 March 2021


Even a snail will eventually reach it's destination
Lorem ipsum dolor sit amet consectetur adipisicing elit. Ipsa, facere!
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nulla eos laboriosam officiis nobis excepturi placeat!


Braitenberg-Vehicles
/
agent.brain
/
Network
/
toBinary
toBinary
fun
toBinary
(
)
:
BinaryRepresentation
Binary representation of network.


Match Play. 0-0 to 13. How should Red play 65?
pips Red=87 White=124
(CorrectAnswer= 0/0, ErrorScore= 0)
The key to this position is the doubling cube. For money this would be double/pass due to the Jacoby Rule.
In a match the correct technique is to play on for the gammon with no risk if possible. Here Red should simply play 8/3, 8/2. If White enters with an ace Red should cash the game. If he fans Red should play on for the gammon.
I got this wrong over the board playing 13/2 but that move and any other move that is not 8/3, 8/2 is a blunder. I found this a very useful learning exercise as it will enable me to play similar positions correctly in the future.
In a match the correct technique is to play on for the gammon with no risk if possible. Here Red should simply play 8/3, 8/2. If White enters with an ace Red should cash the game. If he fans Red should play on for the gammon.
I got this wrong over the board playing 13/2 but that move and any other move that is not 8/3, 8/2 is a blunder. I found this a very useful learning exercise as it will enable me to play similar positions correctly in the future.
1. Cubeful 2-ply 8/3 8/2 Eq.: +1.346 0.887 0.493 0.001 - 0.113 0.013 0.000 2. Cubeful 2-ply 13/2 Eq.: +1.256 (-0.090) 0.882 0.427 0.001 - 0.118 0.011 0.000 3. Cubeful 2-ply 13/7 8/3 Eq.: +1.247 (-0.099) 0.867 0.481 0.001 - 0.133 0.018 0.001 4. Cubeful 2-ply 13/8 13/7 Eq.: +1.230 (-0.116) 0.874 0.431 0.001 - 0.126 0.008 0.000 5. Cubeful 0-ply 13/7 6/1 Eq.: +0.004 (-1.342) 0.510 0.222 0.001 - 0.490 0.237 0.009


The following code allows the user to query a database. Unfortunately, the application fails to validate the user's input; therefore, an attacker can access the backend database on behalf of the application through the use of SQL injection.
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException{
PrintWriter out = response.getWriter();
String query = request.getParameter("query");
String retData = "";
// The application fails to validate the user-supplied
// query before submitting it to the database server
retData = queryDB(query);
...
out.flush();
out.close();
}
The following code allows the user to query a database. Because the application validates the user's input, it is much more difficult for an attacker to access the backend database through a SQL injection attack.
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException{
PrintWriter out = response.getWriter();
String query = request.getParameter("query");
String retData = "";
// The application validates the user-supplied query
// before submitting it to the database server
if (validateQuery(query))
{
retData = queryDB(query);
...
}
out.flush();
out.close();
}
public boolean validateQuery(String input){
// The input can be only of numeric characters
String goodPattern = "[0-9]++";
Pattern p = Pattern.compile(goodPattern);
Matcher m = p.matcher(input);
if(!m.matches())
{
return false;
}
return true;
}


@* * Copyright 2023 HM Revenue & Customs * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *@ @import config.AppConfig @import templates.MainTemplateCUI @import views.html.helper.CSPNonce @this(main_template: MainTemplateCUI, appConfig: AppConfig) @()(implicit request: Request[_], messages: play.api.i18n.Messages) @main_template(title = messages("digital.assistant.list.page.title")) {
Start a conversation with the HMRC Digital Assistant. If you have questions about UK tax, National Insurance, customs duty or managing benefits, we can help.
Ask HMRC online offers guidance to enable you to quickly:
Don’t include personal information. If the digital assistant cannot help you, ask to transfer to an HMRC adviser if they’re available.
We provide a digital assistant for:


| |
Andy |
Freeman |
15/09/2016 |
Booked |
NA |
Shop A101 City Center Near Versen Platz, Post Code PE1 1ET |
|
|
| |
Andy |
Freeman |
04/09/2016 |
Deleted |
NA |
Shop A101 City Center Near Versen Platz, Post Code PE1 1ET |
|
|
| |
Andy |
Freeman |
31/08/2016 |
Postponed |
No |
Shop A101 City Center Near Versen Platz, Post Code PE1 1ET |
|
|
| |
Andy |
Freeman |
25/08/2016 |
Confirmed |
NA |
Shop A105 Peter Close Avenue, Post Code PE6 6ET |
|
|
| |
Andy |
Freeman |
05/08/2016 |
Confirmed |
NA |
Shop A105 Peter Close Avenue, Post Code PE6 6ET |
|
|
| |
Andy |
Freeman |
05/08/2016 |
Confirmed |
NA |
Shop A105 Peter Close Avenue, Post Code PE6 6ET |
|
|
| |
Andy |
Freeman |
01/06/2016 |
Confirmed |
NA |
Shop A105 Peter Close Avenue, Post Code PE6 6ET |
|
|
| |
Andy |
Freeman |
01/05/2016 |
Confirmed |
NA |
Shop A105 Peter Close Avenue, Post Code PE6 6ET |
|
|
| |
Andy |
Freeman |
01/04/2014 |
Confirmed |
NA |
Shop A105 Peter Close Avenue, Post Code PE6 6ET |
|
|


|
©PHOTONS
|
Jive Jol
|
Welcome to the new portfolio of Jive Jol Hotel. Explore the world of Food and culinary in a whole new way. BE HAPPY and STAY HUNGRY!
|
|
|
One of the most important things we’ve been working on over the past year is making the process of online food ordering and delivery as simple and hassle-free as possible. While there are some aspects that we think we’ve done well at – bringing customers the widest choice of restaurants in the country, and building a personalised and incredibly easy-to-use app – there are some areas that have immense room for improvement, the most significant one being delivery tracking.
|


This is the 2nd sneak preview of common_schema’s rdebug: debugger & debugging API for MySQL stored routines (see 1st preview here).
rdebug will be released as part of common_schema, free and open sourced.
In this sneak preview I present:
- Compiling multiple routines with debug info
- Starting/stopping a debug session
- Step-over, step-in, step-out
- Showing stack trace
- Showing the next-statement to execute
- Viewing and manipulating local routine variables
- Misc. meta routines
The quick technical overview
rdebug is a server-side mechanism, itself written in MySQL stored routines. It manipulates your routines by injecting debug code (easily removed afterwards).
To debug a routine you will need two connections: one is the debugging connection, and the other is the worker connection. The debugger connection attaches itself to the worker connection, where your routines execute.
rdebug is controlled by an API of stored routines. This means any GUI tool may choose to use rdebug as its routine debugging mechanism. Your are not bound to a specific tool, a specific OS or framework. You may choose to invoke the API via command line, if you like; it’s all in your server.
A video is worth a thousand blogs
mysqlsandbox is version-aware. The new 5.6 version, for example, requires special care because of the system InnoDB tables or otherwise modified system tables.
At this moment, it will refuse to install MariaDB 10.0 (alpha):
bash$ make_sandbox /tmp/mariadb-10.0.1-linux-x86_64.tar.gz
unpacking /tmp/mariadb-10.0.1-linux-x86_64.tar.gz
unsupported version 10.0
This is perfectly legitimate, and I have no quarrel with this fact. However, I did want to setup MariaDB 10.0 as a sandbox.
As it turns out mysqlsandbox relies on MySQL package naming conventions to detect the version: the fact that a tgz file distribution is named mariadb-10.0.1-linux-x86_64.tar.gz and extracts onto mariadb-10.0.1-linux-x86_64, tells mysqlsandbox that this is version 10.0.1. Easy enough to cheat, then: pick a version that mysqlsandbox will work with, and which is compatible sandbox-wise with your own, and do the renames. For that matter, I picked 5.5, and, actually, made it 5.5.100:
Oracle Oracle? Oracle! We're extremely happy to have Oracle as presenter in Percona Live 2013! You can expect three sessions by Oracle engineers: • MySQL 5.6: Performance Benchmarks, Tuning, and Best Practices - Dmitri Kravtchuk • MySQL 5.6: What’s New in InnoDB - Sunny Bains • MySQL 5.6: Redefining Replication - Luís Soares And Tomas Ulin will present the obligatory "State of the Dolphin" keynote. Skip my part in this conference for the moment; I'm very happy this is happening.
Had a case recently where I had to merge data from two identically structured tables containing nearly identical data.
“Nearly identical” meaning most table data is identical in both; sometimes a row is missing from one of the tables; sometimes same row (according to PK) appears in both, but some columns are NULL is one tables (while others can be NULL in the second).
Otherwise no contradicting data: it was not possible for some data to be “3” in one table and “4” in the other.
How do you create a merge of the tables, such that all missing rows are completed, and NULLs replaced by actual values when possible?
pt-table-sync comes to mind: one can do a bidirectional syncing of two tables, and actually stating how to resolve ambiguities (like “greater value wins”). Very powerful! An example would be:
pt-table-sync –bidirectional –conflict-column=a –conflict-comparison=greatest –tables …
However I didn’t actually have any problem with the tables themselves. The two tables were just fine as they were; missing or NULL data does not indicate an error on their part. I wanted to get their merge. pt-table-sync is still up for the job: we can duplicate them, merge on the copy… But I prefer a query over an external script when possible.
INSERT…ON DUPLICATE KEY UPDATE
This MySQL-specific syntax is actually quite powerful. It basically says “if the insert fails due to unique constraint, you get a chance to update the row causing the failure”. But it also allows for smart setting of the column via the VALUES() clause. Let’s present some sample data and then see the solution.
This is a sneak peek video introduction/preview of an in-development free and open source server side debugger & debugging API for MySQL stored routines.
MySQL does not provide server side debugging capabilities for stored routines. Some tools exist, including MySQL’s own, that assist in stored routine debugging. These are all GUI based and, to the best of my knowledge, MS Windows based. There is one solution in alpha stage that is developed for Java/eclipse; I did not look at the code. See discussion here and here.
An ideal solution would be to have debugging API in the server itself - independently of your client, programming language or operating system. To the best of my knowledge, nothing like that is being developed.
I’m now presenting a rdebug: a stored routines server-side debugger, Pure-SQL, based on stored routines. rdebug is developed as part of common_schema, and actually relies on some of its power.
Like some other tools, it uses code injection and manipulation: it injects debugging info into your stored routine. You need to “compile” your routine with debugging info.
Unlike some other tools, it actually runs your stored routines. It does not mimic or simulate them on client side. It does not break them into smaller routines, attempting to assemble the original behavior from lego bricks.
The quick technical overview is that you use two processes (MySQL threads): the worker process running the routine (your natural call my_routine()), and the debugger process. The debugger process attaches itself to the worker process; it controls the worker by commands like “step over”; it gets data from the worker: what’s the current stack trace? What variables are now available and what are their values?; it manipulates the worker’s data: it can utilize breakpoints to modify worker’s local & session variables.
Apparently my first attempt at rhyming proved to be unsuccessful: only two courageous men attempted solving the riddle. As I’m pretty sure a free pass would appeal to many, and I do have a few readers for my blog, I must conclude my riddle was just too hard. Obscure, perhaps.
Hope I didn’t scare anyone off. Without further ado I present some hints. This post will update with more hints as the day progresses – please refresh to see changes. I start with two hints.
But first, recap of the riddle:
Who will open your present,
Make you play pleasant,
Tidy your mess,
Do the same for all else?
It has something to do with the MySQL world.
Percona Live 2013 is shortly upon us, and it might be a good idea to watch for what’s ahead of us.
Talks of interest
There is no way I can do justice to all. I wish to point out a small number of sessions I am personally interested in attending. I will not be able to attend them all, since there are too many sessions of interest and too few instances of myself (merely one).
I’ve tried to list some talks which are not absolutely obvious (when Peter Zaitsev speaks of MySQL performance, or Monty speaks about MariaDB, or Robert Hodges or Domas speak about replication – well – you’re certain to have the ins and outs, right?). I can also expect Galera or Percona XtraDB Cluster talks to attract a lot of attention. There is a lot of good content for each.
But I was happy to find some very special talks this year, which are not the “every conference has got to have one talk about this” type. Here’s a hybrid collection of both types.
After constructing the list I’ve intentionally dropped two random sessions. If you are speaking, and not mentioned here, your talk must be one of those two!
I'm looking for a way to share data between two MySQL connections/sessions. Obviously tables are the trivial answer, but for reasons of security (possibly insufficient privileges) I wish to avoid that. The type of data to be passed can vary. Ideally I would be able to pass multiple pieces of information (dates, texts, integers, etc.) around. If impossible, I would do with texts only, and if impossible yet, I could do with a single text (but reasonably long).
Reading Sheeri’s MySQL 5.1 vs. MySQL 5.5: Floats, Doubles, and Scientific Notation, I was baffled at this change of floating point number notation.
However, I was also concerned about the final action taken: using ”–ignore-columns” to avoid comparing the FLOAT/DOUBLE types.
The –float-precision option for pt-table-checksum currently only uses ROUND() so as to disregard minor rounding issues. But it can very easily extend to handle the difference in floating point notation. Consider again the problem:
mysql> create table tf(f float);
Query OK, 0 rows affected (0.11 sec)
mysql> insert into tf values(0.0000958084);
Query OK, 1 row affected (0.04 sec)
mysql-5.1> select * from tf;
+————-+
| f |
+————-+
| 9.58084e-05 |
+————-+
mysql-5.5> select * from tf;
+————–+
| f |
+————–+
| 0.0000958084 |
+————–+
How can we normalize the notation?
Easily: CAST it as DECIMAL. Consider:
Here are three security tasks I handled, which I’m happy to say were easily solved with common_schema’s views and routines (with no prior planning). Two are so easy, that I actually now integrated them into common_schema 1.3:
- Duplicate a user (create new user with same privileges as another’s)
- Find users with identical set of grants (same roles)
- Finding redundant users (users who only have privileges on non-existing objects); I was approached on this by Sheeri K. Cabral from Mozilla.
Duplicate user
How would you duplicate a grantee? That’s easy! Just get the SHOW GRANTS output, then do text search and replace: replace the existing account (e.g. ‘existing’@‘localhost’) with the new account (e.g. ‘newcomer’@‘localhost’).
Ahem. And how would you get the output of SHOW GRANTS? That’s right: you can’t do this from within the server. You have to go outside the server, incoke mysql client, sed your way into it, then connect to MySQL again to invoke the GRANT query… Or you can do this by hand, of course, or you can use the new mysqluserclone tool from MySQL utilities. Bottom line: you have to go outside the server. You can’t directly do this with your favorite GUI tool unless it has this function integrated.
But to have a truly automated, scriptable, server-side user-duplication you don’t need to go far, since the sql_show_grants view simulates a SHOW GRANTS output, but using plain old SQL. It produces the GRANT statement as SQL output. Which means you can REPLACE() the grantee. It’s actually a one liner, but is such a common operation that I created the duplicate_grantee() function for convenience. Just:


The purpose of this study is to evaluate the interpretability of different machine learning algorithms and their outputs. The experiment will consist of a series of pre-task instructions, then the primary tasks related to machine learning interpretability, and finally a brief post-task survey.
{#if dataset == 'mnist'} {#if qualitative} In total your participation in this experiment will take about 1 hour. {:else} In total your participation in this experiment will take about 10-15 minutes. {/if} {:else} In total your participation in this experiment will take about 20-25 minutes. {/if}
You must be at least 18 years of age to participate.
Your participation in any part of this study is voluntary. You have the right to refuse to participate altogether, or withdraw from the study at any time without any repercussions. There are no known risks associated with your participation in this research beyond those of everyday life.
 The task will consist of several interactive visualizations and quizzes about machine learning models.
Confidentiality of the research records will be strictly maintained. The data will be collected on a secure server. The output of the study will be based on an aggregation of data collected from multiple informants. Diligent care will be taken to protect identities and sensitive information.
Research team members, who will sign a confidentiality agreement, will have access to the content of your answers as will the IRB at the governing research institution. Even though we will take every effort to protect your privacy, a breach of confidentiality may become a risk due to unforeseen events. If you have questions, concerns, or complaints, or think the research has hurt you, please feel free to contact the study investigator, {#if anonymized} (Anonymized for peer review). {:else} Finale Doshi-Velez. {/if} For questions, concerns, suggestions, or complaints that are not being addressed by the researcher, or research-related harm, you can contact the Committee on the Use of Human Subjects in Research at {#if anonymized} (Anonymized for peer review). {:else} Harvard University, 1414 Massachusetts Avenue, Second Floor, Cambridge, MA 02138 (Phone:<PHONE_NUMBER>; Email: cuhs@fas.harvard.edu). {/if}
You may print this copy of the Consent Document for your records.
If you are interested in participating in the study, click the PROCEED button. If you are NOT interested in participating in the study, please exit the survey.


{% if include.img %} {% comment %} does not work to do: { % include feature-image.html src='{{ include.img }}' % } so we repeat that snippet :( {% endcomment %}


--- layout: post authors: ["Ben Marwick"] title: "Teaching in Yangon" date: 2015-03-25 time: "08:00:00" tags: ["Workshops", "University of Yangon"] ---
On Sat 7 March I spent a full day teaching a Software Carpentry workshop at the University of Yangon with 23 archaeologists from the Department of Archaeology. The workshop is part of a training component of an archaeological research project funded by the Australian Research Council, the University of Washington and the University of Wollongong. The group included graduate students, tutors and lecturers. Archaeology in Myanmar has a strong art history flavour, partly due to its British colonial heritage (where archaeology and art history are often paired, compared to the where US archaeology is usually a sub-field of anthropology) but mostly due to the country's extreme isolation from the rest of the world, where archaeology has taken a scientific turn in recent decades. This isolation takes several forms: travel restrictions that make it difficult for locals to travel overseas, and until recently, for foreigners to visit; small library budgets that make it difficult for university libraries to keep their collections and subscriptions current; and slow and unreliable internet connectivity make browsing the web, watching videos, and downloading files a lengthy, uncertain and frustrating process. All of this meant that the group's familiarity with using computers for research was lower than what might be expected from a Western audience, and so we adapted the SWC materials to accommodate this. We knew we wouldn't get through as much as a typical workshop, but we had the advantage of everyone starting at an equivalent skill level, so the sticky notes all went up and down at much the same time and we had a pleasant and relaxed atmosphere.
The first major adaptation was evident right at the start: software installation. We had half a dozen USB sticks with the workshop files and R, RStudio, and Rtools installers on them, and circulated these around the room to get the everyone's laptop equipped for the workshop. This took about 30 minutes and was combined with the "Files and Directories" lesson (though we didn't actually use the shell, just discussed and diagrammed the concepts). As it turned out, all the laptops were running on Windows, so there was no need for OSX installers for R, etc. or Xcode. We were unable to install R on two laptops, so we discussed pair programming and rearranged some seating. Much of the morning was spent on the first part of the SWC R lesson, getting used to the command line interface. We also took inspiration from the Data Carpentry lessons on R, which are a very nice orientation for people unfamiliar with research software in general. Since the csv format was unfamiliar (the SWC R lesson starts with reading in a csv file), we also spent some time on the difference between closed proprietary file formats such as xls and open file formats such as csv. Opening a file of each type in a basic text editor was a nice stark demonstration of the difference (an activity I got from Ciera Martinez). We didn't follow the lesson verbatim - I used the built-in iris dataset but changed the names in the data to make it a fake archaeological dataset. My hope was that one less element of cognitive overhead would make it easier for them to deal with the radical novelty of the read-eval-print loop of working with the R prompt.
After lunch we moved to packages, R markdown, plotting and reproducible
research. While the concepts of packages and libraries in R was only
mildly confusing (I counted that as a successful result), our main
challenge was getting them installed in a timely fashion. I wanted to
use ggplot2, knitr and rmarkdown and under normal conditions would could
get these from the internet with install.packages()
. Knowing that any
kind of internet bandwidth during this workshop was a bit of a roll of
the dice, I needed a simple method of installing these packages and
their dependencies (ie. those listed in in the 'imports' field of the
package description) that would work without any internet connection. I
could have just made a note of all the dependencies and manually
downloaded their source files, but I wanted a more general solution that
would scale up nicely, if say I wanted to 10-20 packages to install
offline. After
asking around
I was recommended the
miniCRAN package
(thanks Andrie!) and used it to prepare a
local package repository. Using miniCRAN, I got the source files of the
packages, rather than binaries, so I didn't need to binaries for
multiple operating systems (though, as I noted above, everyone was using
Windows in this group). miniCRAN also took care of identifying and
downloading all the package dependencies, which saved a lot of bother. I
put this local repository onto my USB sticks and had everyone copy it
from the USB sticks when they were getting the installers and other
files at the start of the day. This was a great success, with most
people installing the packages very quickly and easily. Only two
students had some kind of difficulty, they worked around it by
connecting to the internet and getting the packages online, eventually.
Had the entire class attempted to get the packages in the usual way,
from an online CRAN mirror, we'd probably still be there waiting for the
downloads to finish. Although there are no doubt other solutions, I
highly recommend local repositories with miniCRAN to anyone going in to
a similar situation of needing to use contributed packages with limited
(or no) internet access.
For the afternoon session we switched from working at the R prompt to working in a R Markdown file, and talked about keeping a record of our record by saving it in a script file. For most of the afternoon we continued with live-coding and running code line-by-line from the R Markdown file, exploring the basic plot types with ggplot2 (and _not_ qplot). Much of this was very simple and off-script from the Software Carpentry core R lesson (though in preparing I drew from some excellent SWC R lesson material online elsewhere by Jenny Bryan, Scott Ritchie and others). The main point was to explore different ways to visualize the data and learn how to interpret plots. We wrote a simple function to demonstrate how to repeat custom operations. We ended the day with a very dramatic exercise to knit the R Markdown document into a MS Word document. After explaining the advantage of having code and text contained in the same document, we all counted down together, then simultaneously clicked on the 'knit' button in RStudio on our laptops, and marveled at the creation of a Word document with text, code and plots.
For a group with limited numerical and computational fluency, the day's activities was a tremendous climb up a steep learning curve. However, everyone enjoyed the experience and left with a favourable impression of scientific computing. It will probably take some more formal training before anyone in this group is routinely using R for their research. However, I think the workshop was a success communicating the basics of computing at the command line, using a programming language for data analysis and visualization, and some basic open science principles. We might ask what the point is of teaching scientific computing to a group that are so distant from the usual SWC audiences. I would say that the point is if we want this way of doing research -- reproducible transparent workflows using open source programming languages -- to become ubiquitous and normal, then we should embrace every opportunity to teach and raise awareness of it, especially among groups that are unlikely to hear about it from within their research community.