Detailed course offerings (Time Schedule) are available for
DENTFN 500 Early Clinical Immersion (6) D. DAUBERT
Provides introduction to clinical dentistry and each of the pre-doctoral curriculum threads. Students participate in classroom lectures with multidisciplinary faculty and apply this information with head and neck anatomy laboratory to clinical exercises. Also includes small group activities, large group activities and offsite experiences. Offered: S.
View course details in MyPlan: DENTFN 500
DENTFN 510 Molecular and Cellular Basis of Disease (8) B. SILVERSTEIN
Teaches the principles of cell and molecular biology, physiology, biochemistry and genetics. Aspects include the organization of the gnome, properties of macromolecules, and cytoarchitecture. Students gain an understanding of intracellular communication, cell-cell interactions, properties of differentiated cells, and the diversity of their physiological properties and functions. Offered: A.
View course details in MyPlan: DENTFN 510
DENTFN 511 Invaders and Defenders - Foundations II (8) B. SILVERSTEIN
Covers and integrates the immune system, microbial biology, infectious diseases (including treatment), inflammation and repair, and skin and connective tissue. Topics include the pathogenesis and immunity of infectious disease, immunodeficiencies, hypersensitivity, autoimmunity, the basis of immunologic diagnostics. Offered: A.
View course details in MyPlan: DENTFN 511
DENTFN 512 Foundations of Dental Medicine (2) B. GANDARA
Familiarizes students with the elements of patient interviewing, including developing a problem-focused, medical, social, and dental history. Covers how to physically assess the dental patient. Teaches how to apply principles of cultural competence and ethics throughout this process. Offered: A.
View course details in MyPlan: DENTFN 512
DENTFN 513 Oral Microbiology (2) R. DARVEAU
Applies basic sciences to an understanding of the molecular bases of the interactions between microorganisms and oral tissues that lead to plaque formation and dental diseases. Covers principles of clinical asepsis and diagnosis of caries and periodontal diseases. Offered: A.
View course details in MyPlan: DENTFN 513
DENTFN 520 Cardiac, Pulmonary, and Renal Diseases - Foundations (8) D. DEAN, M. SCHUBERT
Covers the structure, function, and diseases of the cardiac, pulmonary, and renal systems, with special emphasis on the management of these diseases in the practice of dental medicine and surgery. Offered: W.
View course details in MyPlan: DENTFN 520
DENTFN 521 Introduction to Dental Public Health (2) D. CHI
Students analyze a real-world public health case, and develop feasible solutions. Each small group present their solutions at the end of the course. Offered: W.
View course details in MyPlan: DENTFN 521
DENTFN 522 Foundations of Dental Medicine (2) B. GANDARA
Students increase expertise with patient interviewing and developing a problem-focused medical, social, and dental history. Improves student skills in physical assessment, including diagnostic tests. Covers how to develop a differential diagnosis. Students learn and apply principles of cultural competence and ethics throughout this process. Offered: W.
View course details in MyPlan: DENTFN 522
DENTFN 523 Oral Histology and Embryology I (3) T. POPOWICS
Development of orofacial and neck structures; tooth/pulp histology, development, eruption and exfoliation; innervation of teeth and oral structures; craniofacial and dental anomalies; cranioskeletal development; temporomandibular joint; masticatory muscle structure and function; oral mucosa and epithelial differentiation; periodontium and epithelial attachment; specialized mucosa; gustation; and salivary gland structure and physiology. Offered: W.
View course details in MyPlan: DENTFN 523


>>
<<
Usr
Pri
JfC
LJ
Phr
Dic
Voc
!:
Help
Dictionary
23. Polynomials
The monadic function M=: 3: * ] ^ 2:
is a multiple of an integral power of its argument,
and is called a monomial; and a sum of monomials
such as SM=: (3:*]^2:)+(2.5"_*]^4:)+(_5:*]^0:)
is a polynomial.
Any polynomial can be expressed in the standard
form c&p, where c is a suitable list
of coefficients, and where p=: +/@([*]^i.@#@[)"1 0 .
For example:
SM=: (3:*]^2:)+(2.5"_*]^4:)+(_5:*]^0:)
p=: +/@([*]^i.@#@[)"1 0
c=: _5 0 3 0 2.5
x=: _2 _1 0 1 2
(SM x),(c p x),:(c&p x)
47 0.5 _5 0.5 47
47 0.5 _5 0.5 47
47 0.5 _5 0.5 47
The primitive p. is equivalent to the
function p defined above, and will be used hereafter.
The polynomial c&p. is very important for a
number of reasons, including:
1. It applies to any numeric argument, real or complex
(and the parameter c may also be complex).
2. It can be used to approximate a wide range of functions.
3. It is closed under a number of operations;
that is, the sum, difference, product, the composition @,
the derivative, and the integral of polynomials
are themselves polynomials.
4. The coefficients of the results of each case listed in
3 are easily expressed. For example, if #c
equals #d, then c&p. + d&p.
is equal to (c+d)&p. . More generally,
it is equal to (+/c,:d)&p. . Thus:
ps=: +/@,: Polynomial sum
pd=: -/@,: Polynomial difference
pp=: +//.@(*/) Polynomial product
D=: d.1 Scalar (rank 0) first derivative
pD=: 1: }. ] * i.@# Polynomial derivative
pI=: 0: , ] % 1: + i.@# Polynomial integral
>>
<<
Usr
Pri
JfC
LJ
Phr
Dic
Voc
!:
Help
Dictionary


Adam Rajba
Mobile/WhatsApp: 087-765-44-45
Dublin & surrounding areas covered
Your Contact Number
Your E-mail
Choose Your County
Any Additional Information About The Project
Please attach pictures or WhatsApp to<PHONE_NUMBER>


Top 100 Films of all Time
How can you learn about the underlying structure of documents in a way that is informative and intuitive? This basic motivating question led me on a journey to visualize and cluster documents in a two-dimensional space. What you see above is an output of an analytical pipeline that begin by gathering synopses on the top 100 films of all time and ended by analyzing the latent topics within each document. In between I ran significant manipulations on these synopses (tokenization, stemming), transformed them into a vector space model (tf-idf), and clustered them into groups (k-means). You can learn all about how I did this with my detailed guide to Document Clustering with Python. But first, what did I learn?
A bit of background
I obtained a list of the top 100 films of all time from an IMDB user list called Top 100 Greatest Movies of All Time (The Ultimate List) by ChrisWalczyk55. ChrisWalczyk55 claims that "My lists are not based on my own personal favorites; they are based on the true greatness and/or sucess of the person, place, or thing being ranked." Ok, sure, whatever. Using this list and it's ordinal rankings, combined with synopses gathered from IMDB and Wikipedia, I was able to separate the films into 5 clusters. Why 5? Clustering is more art than science and if I selected 20 clusters they would be too narrow to allow me to draw any generalizations. If I picked 2 or 3 clusters they would be too broad. 5 to 8 generated a good fit, but I chose 5 clusters since this led to the best intuition.
Understanding the visualization
The visualization at the top of the page is a 2-dimensional scatterplot of the cosine distance of each of the movies (colored by cluster). The dimensions (X and Y) do not actually have labels. The way to interpret the the scatterplot is by examining the location of one film, relative to others, in this 2-d space. Proximity in this space equates to similarity as determined by a multi-dimensional scaling of the cosine distance (1 minus cosine similarity) between synopses contained within the term frequency-inverse document frequency (tf-idf) matrix. That was probably confusing and I plan to explain it in a more detailed write up of my methodology, but the basic intuition is that, based on the collected synopses, each film is plotted in relation to its similarity to all other films contained in the plot. You might find some wierd relationships in this plot: keep in mind that similarity was measured based on the words found in the film synopses. If the film synopses were written poorly or very short the results were most certainly impacted. Garbage in, garbage out. Mostly I was interested in exploring the methodology.
Scoring the clusters
Based on the outcome of the clustering, I used the average rank from the IMDB list to score the clusters (lower is better).
| Rank | Cluster | Score | Count |
|---|---|---|---|
| 1 | Killed, soldiers, captain | 43.7 | 26 |
| 2 | Family, home, war | 47.2 | 25 |
| 3 | Father, New York, brothers | 49.4 | 21 |
| 4 | Dance, singing, love | 54.5 | 12 |
| 5 | Police, killed, murders | 58.8 | 16 |
You can see that the war movies scored the best. The basic war epic cluster was at the top, followed closely by family/home with some war mixed in. Family and "New York" or perhaps just cities follows the war grouping. Dancing, singing, love is beats out the crime-ish flicks which, in the scheme of the top 100 movies, tend towards the bottom. This despite the dominance of the Godfather films.
| Killed, soldiers, captain | |
|---|---|
| Rank | Title |
| 2 | The Shawshank Redemption |
| 11 | Lawrence of Arabia |
| 18 | The Sound of Music |
| 20 | Star Wars |
| 22 | 2001: A Space Odyssey |
| 25 | The Bridge on the River Kwai |
| 30 | Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb |
| 32 | Apocalypse Now |
| 34 | The Lord of the Rings: The Return of the King |
| 35 | Gladiator |
| 36 | From Here to Eternity |
| 37 | Saving Private Ryan |
| 38 | Unforgiven |
| 39 | Raiders of the Lost Ark |
| 49 | Patton |
| 50 | Jaws |
| 53 | Butch Cassidy and the Sundance Kid |
| 54 | The Treasure of the Sierra Madre |
| 56 | Platoon |
| 58 | Dances with Wolves |
| 62 | The Deer Hunter |
| 63 | All Quiet on the Western Front |
| 80 | Shane |
| 81 | The Green Mile |
| 88 | The African Queen |
| 90 | Mutiny on the Bounty |
| Family, home, war | |
|---|---|
| Rank | Title |
| 3 | Schindler's List |
| 6 | One Flew Over the Cuckoo's Nest |
| 7 | Gone with the Wind |
| 9 | The Wizard of Oz |
| 10 | Titanic |
| 17 | Forrest Gump |
| 21 | E.T. the Extra-Terrestrial |
| 23 | The Silence of the Lambs |
| 33 | Gandhi |
| 41 | A Streetcar Named Desire |
| 45 | The Best Years of Our Lives |
| 46 | My Fair Lady |
| 47 | Ben-Hur |
| 48 | Doctor Zhivago |
| 59 | The Pianist |
| 61 | The Exorcist |
| 73 | Out of Africa |
| 74 | Good Will Hunting |
| 75 | Terms of Endearment |
| 78 | Giant |
| 79 | The Grapes of Wrath |
| 82 | Close Encounters of the Third Kind |
| 85 | The Graduate |
| 89 | Stagecoach |
| 94 | Wuthering Heights |
| Father, New York, brothers | |
|---|---|
| Rank | Title |
| 1 | The Godfather |
| 4 | Raging Bull |
| 8 | Citizen Kane |
| 12 | The Godfather: Part II |
| 16 | On the Waterfront |
| 29 | 12 Angry Men |
| 40 | Rocky |
| 43 | To Kill a Mockingbird |
| 51 | Braveheart |
| 52 | The Good, the Bad and the Ugly |
| 55 | The Apartment |
| 60 | Goodfellas |
| 65 | City Lights |
| 67 | It Happened One Night |
| 69 | Midnight Cowboy |
| 70 | Mr. Smith Goes to Washington |
| 71 | Rain Man |
| 72 | Annie Hall |
| 83 | Network |
| 93 | Taxi Driver |
| 97 | Rear Window |
| Dance, singing, love | |
|---|---|
| Rank | Title |
| 19 | West Side Story |
| 26 | Singin' in the Rain |
| 27 | It's a Wonderful Life |
| 28 | Some Like It Hot |
| 42 | The Philadelphia Story |
| 44 | An American in Paris |
| 66 | The King's Speech |
| 68 | A Place in the Sun |
| 76 | Tootsie |
| 84 | Nashville |
| 86 | American Graffiti |
| 100 | Yankee Doodle Dandy |
| Police, killed, murders | |
|---|---|
| Rank | Title |
| 5 | Casablanca |
| 13 | Psycho |
| 14 | Sunset Blvd. |
| 15 | Vertigo |
| 24 | Chinatown |
| 31 | Amadeus |
| 57 | High Noon |
| 64 | The French Connection |
| 77 | Fargo |
| 87 | Pulp Fiction |
| 91 | The Maltese Falcon |
| 92 | A Clockwork Orange |
| 95 | Double Indemnity |
| 96 | Rebel Without a Cause |
| 98 | The Third Man |
| 99 | North by Northwest |


{% include suggested-reviews.html %}
{{ page.title }}
{{ content }}
Written on {{ page.date | date: "%B %e, %Y" }}
{% include supporter-cta.html %}
MrPowerScripts is a participant in the Amazon Services LLC Associates Program, an affiliate advertising program designed to provide a means for sites to earn advertising fees by advertising and linking to Amazon.com products and services.


Buy tickets here for all guests. Guests are any spectators who are not in the Class of 2013. This includes parents and students who are not graduating, alumni, and all non-staff. All guest tickets are general admission and cost $5.00 each. For ticketing pick-up instructions, please click here.


population by country
GDP by country
Purchasing Power by country
growth in population and Purchasing power
Aggregate Population
Aggregate GDP


This website aims to provide a one stop source for teaching functional
programming paradigms by implementing them in JavaScript — ES2015 to
be exact! If you have wondered how to implement a recursive map
function
or create a curry
function, then this website will explain it to you.
Functional programming continues to grow in popularity and is becoming
increasingly relevant in the world of JavaScript frameworks and libraries.
Utilize this website to gain better understanding of the foundational
concepts of functional programming in order to better appreciate the
frameworks and libraries available in JavaScript.
Contributing
This is a work in progress with lots of content to come. If you would like
to help contribute to this website or give feedback, please get in touch at
the GitHub repo below:
jfairbank/fp-in-javascript
Links
To see different functional programming concepts and code definitions please
visit any of the links below:
import { curry } from './function';
import { map } from './array';
const multiply = curry((x, y) => x * y);
const curriedMap = curry(map);
const doubleNumbers = curriedMap(multiply(2));
const numbers = [1, 2, 3];
console.log(doubleNumbers(numbers));


 I describe how I did it for myself. tags: [System Administration, Network, bind9, Domain Name Server] ---
In the old times (when men were real men), people used to manage their domains with their own domain name server. There is now a long time since things got easy and sweet. Nowadays you usually rely on the services provided by your ISP for managing your domain, which often means that you do everything from a nice web interfaces.
However there are people (like me) that prefer to do things the old and sweaty way, which means that you install and manage your own name server. I will describe here how I did it for myself. Actually it is not so difficult, if you know some concepts about how DNS works and you have some basic command-line skills.
I have installed my NS on a cloud server (provided by Rackspace). It is a hidden master, authoritative only DNS server.
Hidden means that it stays behind a firewall, not accessible from the outside world. Master or primary means that it is a primary source of information for the domains that it provides. There are also slave/secondary DNS servers, which get the information of the domains that they cover from other (master/primary) servers. If we update the domain on a master server, the slaves will synchronise with it automatically after a certain time.
Authoritative only means that the server will just give answers for the domains that it masters, and nothing else. DNS servers can possibly do several things, for example give answers to DNS requests from clients, both for the domains that they are responsible for and for other domains. If they don't know the answer, they get it from the Internet, fetch it to the client and then cache it for future requests. However this server does not do any of these things. It just answers for its own domains.
But there is a catch here: if the server stays behind the firewall, hidden from the world and does not accept any requests from clients, where should the clients send queries about our domain? The answer is that they will query some slave/secondary DNS servers which are synchronised with our server. Fortunately there are lots of free secondary DNS services out there. I use puck.nether.net and buddyns.com .
To get a better idea of the concepts discussed here, look at:
Install bind9:
apt-get install bind9
After installation, edit /etc/default/bind9
and add a -4 to the
options:
# run resolvconf? RESOLVCONF=no # startup options for the server OPTIONS="-u bind -4"
This will tell bind9 to run only on IPv4 interfaces (ignoring IPv6). Not necessary, but will prevent some error messages on syslog that might be confusing.
Register your domain(s) on two or more secondary servers:
On your server, allow the secondary servers to access your DNS server:
ufw allow from <IP_ADDRESS> to any port 53 ufw allow from <IP_ADDRESS> to any port 53 ufw allow from <IP_ADDRESS> to any port 53
Configuration files of bind9 are located at /etc/bind/
.
NS/etc/bind/named.conf
and comment the line
of default-zones:
include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; #include "/etc/bind/named.conf.default-zones";
NS/etc/bind/named.conf.options
:
options { directory "/var/cache/bind"; recursion no; allow-transfer { <IP_ADDRESS>; # a.transfer.buddyns.com <IP_ADDRESS>; # b.transfer.buddyns.com <IP_ADDRESS>; # puck.nether.net }; };
Only the IPs of the secondary servers are allowed to get and synchronise the information of our domains. The directive "recursion no;" tells the server to not reply for any other domains except for its own. Actually it is behind a firewall and should not get any DNS queries, but just in case.
NS/etc/bind/named.conf.local
and add the configuration of
the zones:
zone "l10n.org.al" { type master; also-notify { <IP_ADDRESS>; # a.transfer.buddyns.com <IP_ADDRESS>; # b.transfer.buddyns.com <IP_ADDRESS>; # puck.nether.net }; file "/var/cache/bind/db.l10n.org.al"; }; zone "btranslator.org" { type master; also-notify { <IP_ADDRESS>; # a.transfer.buddyns.com <IP_ADDRESS>; # b.transfer.buddyns.com <IP_ADDRESS>; # puck.nether.net }; file "/var/cache/bind/db.btranslator.org"; };
Our server is master for both of these domains, and when they are modified it will notify the secondary servers about it (so that they can transfer and sync the data).
The files that keep the configuration of the domain zones are
placed on /var/cache/bind/
.
NS/var/cache/bind/db.l10n.org.al
with a content
like this:
; l10n.org.al $TTL 24h $ORIGIN l10n.org.al. @ 1D IN SOA ns1.l10n.org.al. admin.l10n.org.al. (<PHONE_NUMBER> ; serial 3H ; refresh 15m ; retry 1w ; expire 2h ; minimum ) IN NS b.ns.buddyns.com. IN NS c.ns.buddyns.com. IN NS puck.nether.net. IN MX 1 aspmx.l.google.com. IN MX 5 alt1.aspmx.l.google.com. IN MX 5 alt2.aspmx.l.google.com. IN MX 10 aspmx2.googlemail.com. IN MX 10 aspmx3.googlemail.com. IN TXT "v=spf1 include:_spf.google.com ~all" google._domainkey IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSxGSIb3DQEBAQUBA4GNADCBiQ5BgQCWKzwJ1kui8IVQmTbphXvkETTJWbqOyDqbkppfBrcos1+gIixvM-MYSVUrawpzyaaxEPg3IT/Wq8MF3S58/cUtwv3Idv6IkQxIU6ub8/uEq900ILD9EuQX32jUk+pfpJtDoeA0vm1vhv1taIGr4W5ds2HXyQXX1qKcyShRAC2O/wIDAQAB" ; server host definitions ns1.l10n.org.al. IN A <IP_ADDRESS> @ IN A <IP_ADDRESS> www IN A <IP_ADDRESS> mail IN CNAME ghs.google.com.
Don't forget to change the serial number whenever this file is modified, otherwise the changes may not be noticed and propagated on the Internet. The other 'magic' numbers can be left as they are.
You also see that only the secondary servers are listed as nameservers for our domain. So, when clients have any questions about our domain, they go and ask them, not our server (which is behind a firewall and cannot be reached).
IN NS b.ns.buddyns.com. IN NS c.ns.buddyns.com. IN NS puck.nether.net.
Also, it happens that I use GoogleApps for the email and other services (it offers up to 10 email accounts for free), and this is reflected on the configuration of the domain.
NS/var/cache/bind/db.btranslator.org
with a content like
this:
; btranslator.org $TTL 24h $ORIGIN btranslator.org. @ 1D IN SOA ns1.btranslator.org. admin.btranslator.org. (<PHONE_NUMBER> ; serial 3H ; refresh 15m ; retry 1w ; expire 2h ; minimum ) IN NS b.ns.buddyns.com. IN NS c.ns.buddyns.com. IN NS puck.nether.net. IN MX 1 aspmx.l.google.com. IN MX 5 alt1.aspmx.l.google.com. IN MX 5 alt2.aspmx.l.google.com. IN MX 10 aspmx2.googlemail.com. IN MX 10 aspmx3.googlemail.com. IN TXT "v=spf1 include:_spf.google.com ~all" google._domainkey IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSxGSIb3DQEBAQUBA4GNADCBiQ5BgQCWKzwJ1kui8IVQmTbphXvkETTJWbqOyDqbkppfBrcos1+gIixvM-MYSVUrawpzyaaxEPg3IT/Wq8MF3S58/cUtwv3Idv6IkQxIU6ub8/uEq900ILD9EuQX32jUk+pfpJtDoeA0vm1vhv1taIGr4W5ds2HXyQXX1qKcyShRAC2O/wIDAQAB" ; server host definitions ns1.l10n.org.al. IN A <IP_ADDRESS> @ IN A <IP_ADDRESS> ; point to the server any subdomain * IN A <IP_ADDRESS> mail IN CNAME ghs.google.com.
Some other help pages about the configuration of bind9 on Ubuntu:


java.lang.Object
java.lang.Enum<
H >
com.aviparshan.unitOf.H
All Implemented Interfaces:
java.io.Serializable
, java.lang.Comparable<H >
, java.lang.constant.Constable
public enum H
extends java.lang.Enum<H >
DataTransferRate Units
All unit values are conversions of MBS (Megabyte per Second) at the value of 1 converted into each unit.
Nested Class Summary
Nested classes/interfaces inherited from class java.lang.Enum
java.lang.Enum.EnumDesc<E extends java.lang.Enum<E>>
Field Summary
Fields
Modifier and Type
Field
Description
double
TO_MBS
Method Summary
All Methods Static Methods Concrete Methods
Modifier and Type
Method
Description
static H
valueOf (java.lang.String name)
Returns the enum constant of this type with the specified name.
static H []
values ()
Returns an array containing the constants of this enum type, in
the order they are declared.
Methods inherited from class java.lang.Enum
clone, compareTo, describeConstable, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
Methods inherited from class java.lang.Object
getClass, notify, notifyAll, wait, wait, wait
Enum Constant Details
public static final H BIS
public static final H E10
public static final H E100
public static final H E1000
public static final H FW400
public static final H FW800
public static final H FW3200
public static final H GBIS
public static final H GBS
public static final H ISDND
public static final H ISDNS
public static final H KBIS
public static final H KBS
public static final H MBIS
public static final H MBS
public static final H M110
public static final H M1200
public static final H M14K
public static final H M2400
public static final H M28K
public static final H M300
public static final H M33K
public static final H M56K
public static final H M9600
public static final H OC1
public static final H OC12
public static final H OC192
public static final H OC24
public static final H OC3
public static final H OC48
public static final H OC768
public static final H PBIS
public static final H PBS
public static final H SIGBIS
public static final H SIGBS
public static final H SIKBIS
public static final H SIKBS
public static final H SIMBIS
public static final H SIMBS
public static final H SIPBIS
public static final H SIPBS
public static final H SITBIS
public static final H SITBS
public static final H TBIS
public static final H TBS
public static final H USB1
public static final H USB2
public static final H USB3
public static final H USB31
Field Details
public final double TO_MBS
Method Details
public static H [] values ()
Returns an array containing the constants of this enum type, in
the order they are declared.
Returns:
an array containing the constants of this enum type, in the order they are declared
public static H valueOf (
java.lang.String name)
Returns the enum constant of this type with the specified name.
The string must match exactly an identifier used to declare an
enum constant in this type. (Extraneous whitespace characters are
not permitted.)
Parameters:
name
- the name of the enum constant to be returned.
Returns:
the enum constant with the specified name
Throws:
java.lang.IllegalArgumentException
- if this enum type has no constant with the specified name
java.lang.NullPointerException
- if the argument is null


Priyanka Chopra proves she is Jonas Brothers’ biggest cheerleader
by FilmfareThe official Grammys 2020 nomination list has come out and the Jonas Brothers have received a nomination in the same. Needless to say that Priyanka Chopra, who is married to Nick Jonas, celebrated the big news with a shout out to the Jo-Bros in a Tweet. The diva tweeted, "So proud of you, Jonas Brothers! I love you Nick Jonas, Joe Jonas, Kevin Jonas" and shared a montage of the Jonas Brothers from their studio.
The Jonas Brothers have been nominated in the Best pop duo/group performance category for their comeback single Sucker for the Grammys 2020.The prestigious Awards are all set to take place on January 26 at the Staples Center in Los Angeles.
We can’t wait for the Jonas Brothers to turn up the heat on the red carpet with the J-sisters, what about you?


Social media posts provide a platform for us to view the perception of multiculturalism. Players post their lives through social media for publicty. In the meanwhile, fans leave feelings and comments (such as like) to interact with players. When Mesut Özil decided to quit the German national team, he posted his statements synchronously on several social media platforms, such as Instagram and Twitter. This page serves the function of summarizing twitter posts from certain organizations and players. It can potentially help to build a corpora for further research use.


Warming up your algorithm causes data from before the algorithm starts to be fed into the conventional data event handlers. This system of warm up lends itself to stream style algorithms.
The data flowing to your algorithm will seamlessly pass from historical to live data. The flag $[bool IsWarmingUp,P:QuantConnect.Algorithm.QCAlgorithm.IsWarmingUp] can be used to monitor this transition.
During the warm up period you cannot submit orders. Warm up also does not support universe selection while the algorithm is warming up.
SetWarmUp(200); //Warm up 200 bars for all subscribed data. SetWarmUp(TimeSpan.FromDays(7)); //Warm up 7 days of data.
self.SetWarmUp(200) //Warm up 200 bars for all subscribed data. self.SetWarmUp(timedelta(7)) //Warm up 7 days of data.


This is the One
Realme X2 Pro preview: Redefining value flagships all over again
There's a new value leader in town, and it isn't Xiaomi.
by Harish JonnalagaddaRealme has all the momentum in India's budget segment, and the brand isn't sitting around on its laurels. The manufacturer launched ten phones this year alone, and with every device, it has managed to outdo other players in this segment — Xiaomi included.
As we head to the tail end of 2019, Realme is launching what is possibly one of the most exciting phones of the year. The Realme X2 Pro has so many features that I don't know where to start. Let's kick things off with the highlights: the X2 Pro has a 90Hz AMOLED display with a waterdrop cutout. It's powered by the Snapdragon 855+ chipset, you get 12GB of RAM/256GB of storage, and there's a 4000mAh battery under the hood. Up to this point, it's on par with other value flagships you'll find in the market today.
But the X2 Pro has a few standout additions: it has 50W SuperVOOC charging — first for a phone sold in India — and a 64MP primary camera joined by a zoom lens that offers 20x hybrid zoom. It is also Realme's first phone with stereo speakers. Combine all of that and the fact that the phone debuts at just ₹29,999 ($417), and you start to understand why the X2 Pro turns this segment on its head.
The X2 Pro is a pivotal phone for Realme, as this is the first time the brand is making its debut outside of Asia. The phone is available in the UK, Spain, France, Belgium, and a host of other European markets, with Realme following Xiaomi's lead. With that out of the way, let's take a look at the phone itself.
The Realme X2 Pro shares a lot of similarities with Realme's recent phones in terms of design. The phone is available in two color options — Lunar White and Neptune Blue — and the colors are identical to that of the Realme XT. The X2 Pro also has a glass back, with both the front and rear panes of glass protected by Gorilla Glass 5.
Dominating the design at the back is the quad-camera array, and while the housing itself is identical to that of the Realme XT, it is now centered. There's also a Realme logo that's now located next to the camera housing. Aside from the logo and a few regulatory markings at the bottom, the design of the X2 Pro is clean, and overall the phone manages to look premium.
The power button is on the right, the volume rocker is on the left, and you get a 3.5mm jack at the bottom. There really isn't anything missing from a hardware point of view, and that's commendable when you consider how much the X2 Pro costs.
The X2 Pro combines a gorgeous design with a 90Hz AMOLED panel and stereo sound.
The X2 Pro is the first Realme phone with stereo sound: the primary speaker is located at the bottom, and there's a wide grille above the screen that houses the secondary speaker. Stereo sound is a welcome addition, and it makes playing games and watching videos that much more enjoyable on the X2 Pro.
One of the highlights of the X2 Pro is the 90Hz AMOLED screen. It is just as smooth and fluid as the display on the OnePlus 7T, and seeing as how Realme is owned by BBK, it is probably using the same panel as well. The screen also features the E3 luminescent material that's designed to boost the brightness to up to 1000nits and reduce blue light emissions.
Realme is using Qualcomm's flagship chipset for the first time, and that makes a world of difference.
The X2 Pro is a delight to use because of the 90Hz refresh rate, and the panel quality itself is one of the best you'll find in this category. In fact, the X2 Pro is the most affordable phone with a 90Hz panel, and that alone makes it a very enticing option. The phone has an in-screen fingerprint sensor that's one of the fastest I've used to date, and there's also a face unlock solution that works very well.
While Realme fielded a lot of phones in 2019, this is the first time we're seeing the company include Qualcomm's flagship-tier Snapdragon 8xx chipset. The phone features the latest Snapdragon 855+ silicon, and combined with the 90Hz display, it is a performance beast. You won't notice any slowdown or lag whatsoever in day-to-day use, and this is the most enjoyable experience I've had using ColorOS.
| Specs | Realme X2 Pro |
|---|---|
| Software | Android 9.0 Pie | ColorOS 6.1 |
| Display | 6.5-inch (2400x1080) 90Hz AMOLED |
| Chipset | 2.96GHz Snapdragon 855+ |
| RAM | 6GB/8GB/12GB LPDDR4X |
| Storage | 64GB/128GB/256GB UFS 3.0 |
| Rear Camera 1 | 64MP ƒ/1.8 (primary) |
| Rear Camera 2 | 8MP ƒ/2.2 (wide-angle) |
| Rear Camera 3 | 13MP ƒ/2.5 (2x zoom) |
| Rear Camera 4 | 2MP ƒ/2.4 (portrait) |
| Front Camera | 16MP ƒ/2.0 |
| Security | In-display fingerprint |
| Battery | 4000mAh | 50W |
| Connectivity | Wi-Fi 802.11 ac, BT5.0, NFC |
| Colors | Lunar White, Neptune Blue |
| Dimensions | 161 × 75.7mm × 8.7mm |
| Weight | 199g |
Earlier Realme phones weren't exactly slow, but they had their limitations — particularly in terms of gaming. That is no longer an issue on the X2 Pro, and the phone blazed through everything I threw at it. Realme is offering 8GB of RAM and 128GB of UFS 3.0 storage as standard in India, and a second variant with 12GB of RAM and 256GB of UFS 3.0 storage.
I'm testing the latter variant, and if you're looking for a future-proof device, you're better off going with the 12GB option. Realme also has a 6GB/64GB base variant in global markets, but that model isn't available in India.
Another standout feature on the X2 Pro is fast charging. The phone offers OPPO's 50W SuperVOOC wired charging, and a 50W charger is bundled in the box. That means you'll be able to charge from flat to 80% in just 30 minutes — and that's while you're gaming. In idle, the phone goes from zero to 100% in just 35 minutes. Oh, and it also works with existing USB PD solutions, so you can use your older fast charging tech.
The 4000mAh battery itself is able to deliver over a day's worth of use from a full charge, and the addition of 50W charging makes the X2 Pro a powerhouse. As the phone is debuting in global markets, you get NFC for Google Pay. In addition, you get a Wi-Fi ac 4x4 MIMO antenna, liquid cooling, Bluetooth 5.0, and a dedicated gaming mode.
Now onto the cameras: the X2 Pro has four cameras at the back, with a 64MP Samsung GW1 primary sensor joined by an 13MP 2x zoom lens, 8MP wide-angle shooter, and a 2MP portrait lens. Realme is trying to emulate Google's color balance and image quality, and it is doing a pretty decent job of it overall. The X2 Pro takes stunning photos in daylight conditions, and it does a decent enough job in low-light scenarios.
A highlight on the X2 Pro is the 20x hybrid zoom. The 13MP lens only goes up to a 2x zoom factor, but Realme is leveraging digital zoom to deliver passable shots at 20x.
Realme X2 Pro at 1x zoom, 2x zoom, and 20x zoom
The only downside with the X2 Pro is the software: it's running ColorOS 6.1 based on Android 9 Pie. To its credit, Realme has made a lot of meaningful additions to ColorOS, but the fact that the phone isn't running Android 10 out of the box is a definite miss. I haven't noticed any issues with ColorOS in day-to-day usage, but it will be a long wait before Android 10 is available for the device.
Phones like the X2 Pro come along once a year. Last year, it was the POCO F1 that drove the conversation around value. This time around, Realme is in the driving seat. The X2 Pro has the latest internal hardware, and you also get a gorgeous design as well as a 90Hz screen, 64MP camera at the back, and 50W wired charging.
As we head into 2020, the Realme X2 Pro is the value flagship to beat. The phone is going on sale in India from November 26, and the base 8GB/128GB option will be available for ₹29,999 ($417).
The Realme X2 Pro is also on sale in several global markets, and you'll have to shell out €399 ($440) for the 6GB/64GB model. That's not quite the same bargain as you'll find in India, but it's still a pretty decent deal considering the hardware on offer.
I'll have a lot more to talk about the X2 Pro in the coming weeks, but in the meantime, what are your thoughts on the phone? Let me know in the comments below.
The new leader
Realme X2 Pro
The value flagship to beat in 2019.
The Realme X2 Pro has everything you're looking for in a value flagship: it has a 90Hz AMOLED panel, the latest Snapdragon 855+ chipset, 64MP camera at the back, and a 4000mAh battery with 50W fast charging. Right now, it is in a class of its own.


Challenge accepted: More than two months in pole mounted wine barrel
Dullstroom pole sitter, Vernon Kruger, is currently attempting to break his own Guinness World Record.
by Supplied ContentDullstroom Accommodation recently announced that Vernon Kruger (51) will attempt to break his own world record for “longest duration pole sitting in a barrel”.
In 1997, then 29-year-old Kruger spent 67 days in a 500-litre wine barrel mounted onto a pole in the little town of Dullstroom, breaking the Guinness World Record. It has remained unbeaten despite various worldwide attempts.
Kruger, now 51, who remains both mentally and physically fit, has accepted a recent invitation by the Guinness Book of World Records to break his own record.
The pole is 25 metres high (eight floors) and the wine barrel is 1 100 millimetres high, 725 millimetres wide at the top, 870 millimetres wide in the centre, and 500 litres in volume.
Kruger will remain on top of the pole day and night and will only be allowed to come down once the event is over. He ascended the pole on November 14, 2019.
This ambitious attempt is currently taking place in Dullstroom.
“South Africa needs feel-good stories,” he said. “Many people ask me: ‘Why?’ This achievement will create a new cultural milestone for Dullstroom, and hopefully ignite excitement for the people of South Africa. I am also challenging my own existing record.”
Also read: Locals inspired to help GRIP
Fiona Jones from Dullstroom Accommodation said, “The event has created unity and hope for locals. Dullstroom is the highest village in South Africa, at 2 100 metres above sea level. This means Vernon literally ascends to the highest seat in the country for at least 67 days. We hope that people will see the humour in this, and that this will boost tourism in our little town.”
World record remains unbeaten:
In 2003, US Illusionist David Blaine sought recognition from the Guinness Book of World Records for his attempt to live in a clear 2x2x1 metre box while dangling over the river Thames in London. But Guinness’s keeper of records Stewart Newport acknowledged that Kruger’s record trumps that of Blaine.
The event created massive headlines in 1997 all over the world. American radio and television personality Howard Stern even phoned Kruger while he was in the barrel – connected with a Telkom landline at the time – to encourage and congratulate him.
Lees die Afrikaanse weergawe hier: Wêreldrekord in wording


{{template:CanteenStyles}}
Setup
Database Setup
Let's establish a database connection with a MySQL database.
{{formFeedback}}
Host
User
Password
Database
If defining multiple databases, they should be separated with commas. The first database is the default location where Canteen will be installed.
Advanced Options
Domain
Specify which domains that the site can run on. The default is all domains. This is helpful if you're setting up different deployment and you want your development site to be accessible from dev.example.com. You can separately set any of these options for an individual deployment level. Multiple domains should be comma-separated and can use the catch-all (e.g.,
10.1.*.*, 192.168.*.*, mysite.local
).
Deployment Level
Local
Development
Staging
Live
This is implementation specific by your site and is a way to organize different database credentials, for instance, on different servers. Please note: setting a "Local" level will disable any of the privilege restrictions on database calls. This should not be used on a live, public-accessible site.
Debug Mode
Useful for testing purposes, this allows users to see verbose error messages for crashes or thrown errors. It's
strongly recommended
that debug mode is not enabled on a live deployment level.
Enable Cache
Enabling cache turns-on the use of memcached to cache the page rendering and database queries. If memcached is not available, the fallback is directory-based caching (see Cache Directory option).
Cache Directory
The path to the cache directory. This directory must be writable by Apache.
Minify
All site markup is minified by removing extraneous whitespace tables and newlines. Useful for reducing markup file-size.
Compression
The zlib extension must be installed on Apache to use this feature. The buffer output is compressed using zlib and is the best method for minimizing output file-size.


grammar::me::tcl - Virtual machine implementation I for parsing token streams
This package provides an implementation of the ME virtual machine. Please go and read the document grammar::me_intro first if you do not know what a ME virtual machine is.
This implementation is tied very strongly to Tcl. All the stacks in the machine state are handled through the Tcl stack, all control flow is handled by Tcl commands, and the remaining machine instructions are directly mapped to Tcl commands. Especially the matching of nonterminal symbols is handled by Tcl procedures as well, essentially extending the machine implementation with custom instructions.
Further on the implementation handles only a single machine which is uninteruptible during execution and hardwired for pull operation. I.e. it explicitly requests each new token through a callback, pulling them into its state.
A related package is grammar::peg::interp which provides a generic interpreter / parser for parsing expression grammars (PEGs), implemented on top of this implementation of the ME virtual machine.
The commands documented in this section do not implement any of the instructions of the ME virtual machine. They provide the facilities for the initialization of the machine and the retrieval of important information.
This is an ensemble command providing access to the commands listed in this section. See the methods themselves for detailed specifications.
This command (re)initializes the machine. It returns the empty string. This command has to be invoked before any other command of this package.
The command prefix nextcmd represents the input stream of characters and is invoked by the machine whenever the a new character from the stream is required. The instruction for handling this is ict_advance. The callback has to return either the empty list, or a list of 4 elements containing the token, its lexeme attribute, and its location as line number and column index, in this order. The empty list is the signal that the end of the input stream has been reached. The lexeme attribute is stored in the terminal cache, but otherwise not used by the machine.
The optional dictionary tokmap maps from tokens to integer numbers. If present the numbers impose an order on the tokens, which is subsequently used by ict_match_tokrange to determine if a token is in the specified range or not. If no token map is specified the lexicographic order of th token names will be used instead. This choice is especially asensible when using characters as tokens.
This command converts the location of a token given as offset in the input stream into the associated line number and column index. The result of the command is a 2-element list containing the two values, in the order mentioned in the previous sentence. This allows higher levels to convert the location information found in the error status and the generated AST into more human readable data.
Note that the command is not able to convert locations which have not been reached by the machine yet. In other words, if the machine has read 7 tokens the command is able to convert the offsets 0 to 6, but nothing beyond that. This also shows that it is not possible to convert offsets which refer to locations before the beginning of the stream.
After a call of init the state used for the conversion is cleared, making further conversions impossible until the machine has read tokens again.
This command returns a Tcl list containing the part of the input stream between the locations from and to (both inclusive). If to is not specified it will default to the value of from.
Each element of the returned list is a list of four elements, the token, its associated lexeme, line number, and column index, in this order. In other words, each element has the same structure as the result of the nextcmd callback given to ::grammar::me::tcl::init
This command places the same restrictions on its location arguments as ::grammar::me::tcl::lc.
This command returns the number of tokens currently known to the ME virtual machine.
This command returns the current semantic value SV stored in the machine. This is an abstract syntax tree as specified in the document grammar::me_ast, section AST VALUES.
This method returns the abstract syntax tree currently at the top of the AST stack of the ME virtual machine. This is an abstract syntax tree as specified in the document grammar::me_ast, section AST VALUES.
This method returns the whole stack of abstract syntax trees currently known to the ME virtual machine. Each element of the returned list is an abstract syntax tree as specified in the document grammar::me_ast, section AST VALUES. The top of the stack resides at the end of the list.
This method returns the current token considered by the ME virtual machine.
This method returns the contents of the nonterminal cache as a dictionary mapping from "symbol,location" to match information.
This method returns the next token callback as specified during initialization of the ME virtual machine.
This method returns a dictionary containing the tokmap specified during initialization of the ME virtual machine. ::grammar::me::tcl::ok This variable contains the current match status OK. It is provided as variable instead of a command because that makes access to this information faster, and the speed of access is considered very important here as this information is used constantly to determine the control flow.
Please go and read the document grammar::me_vm first for a specification of the basic ME virtual machine and its state.
This implementation manages the state described in that document, except for the stacks minus the AST stack. In other words, location stack, error stack, return stack, and ast marker stack are implicitly managed through standard Tcl scoping, i.e. Tcl variables in procedures, outside of this implementation.
Please go and read the document grammar::me_vm first for a specification of the basic ME virtual machine and its instruction set.
This implementation maps all instructions to Tcl commands in the namespace "::grammar::me::tcl", except for the stack related commands, nonterminal symbols and control flow. Here we simply list the commands and explain the differences to the specified instructions, if there are any. For their semantics see the aforementioned specification. The machine commands are not reachable through the ensemble command ::grammar::me::tcl.
No changes.
No changes.
If, and only if a token map was specified during initialization then the arguments are the numeric representations of the smallest and largest tokens in the range. Otherwise they are the relevant tokens themselves and lexicographic comparison is used.
No changes.
Instead of taking a branchlabel the command returns a boolean value. The result will be true if and only if cached information was found. The caller has to perform the appropriate branching.
The command takes the start location as additional argument, as it is managed on the Tcl stack, and not in the machine state.
These two instructions are not mapped to commands. They are control flow instructions and handled in Tcl.
No changes.
No changes.
No changes.
These four instructions are not mapped to commands. They are control flow instructions and handled in Tcl.
This command returns the current location CL in the input. It replaces icl_push.
The command takes the location as argument as it comes from the Tcl stack, not the machine state.
Not mapped, the stacks are not managed by the package.
This command returns the current error state ER. It replaces ier_push.
No changes.
The command takes the location as argument as it comes from the Tcl stack, not the machine state.
The command takes the second error state to merge as argument as it comes from the Tcl stack, not the machine state.
No changes.
No changes.
The command takes the start location as argument as it comes from the Tcl stack, not the machine state.
The command takes the start location as argument as it comes from the Tcl stack, not the machine state.
The command takes start location and marker as argument as it comes from the Tcl stack, not the machine state.
No changes.
This command returns a marker for the current state of the AST stack AS. The marker stack is not managed by the machine.
The command takes the marker as argument as it comes from the Tcl stack, not the machine state. It replaces ias_mpop.
This document, and the package it describes, will undoubtedly contain bugs and other problems. Please report such in the category grammar_me of the Tcllib Trackers. Please also report any ideas for enhancements you may have for either package and/or documentation.
When proposing code changes, please provide unified diffs, i.e the output of diff -u.
Note further that attachments are strongly preferred over inlined patches. Attachments can be made by going to the Edit form of the ticket immediately after its creation, and then using the left-most button in the secondary navigation bar.
Grammars and finite automata
Copyright © 2005 Andreas Kupries <andreas_kupries@users.sourceforge.net>


The Ultimate Question
What do you get if you
multiply six by nine
?
Example
When I google "
6 * 9
" the answer should be "
42
".
When I google "
6 * 9
" the answer should be "
42
".
Call another spec that has ignored section
Look for:
Use of Embed extension to show why not executing part of spec
Section skipping greyed out
Calling a spec that has a ingored section is also marked greyed out


%# Copyright 2006 University of Chicago %# %# Licensed under the UChicago-STAT Public License, (the "License"); %# you may not use this file except in compliance with the License. %# You may obtain a copy of the License in the "license.txt" file %# distributed with this Work, or download it at %# http://jcs.uchicago.edu/download/stat/license.txt %# %# 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. %#
% if ( @remarks ) {<% $r{assessor} %>: <% $r{text} %>
% } % }<% $generaltreeview %>
<% $proctreeview %><%args> $trainee $date $case_no $activity %args> <%init> my $source = Util::source(q$Header: /opt/cvs/stat/src/interface/assessment_details.html,v 2.19 2009-03-09 18:18:58 selkovjr Exp $); my $proctreeview; my $generaltreeview; my %rating; my %assessment; my %np_reason; my $purple = "#B040A0"; my $red = "#C03030"; my $black = "#606060"; my $lightgray = "#a0a0a0"; my $id_of_overall = $Model->id_of_overall; my @remarks = $Model->remarks_on_case( date => $date, case_no => $case_no, activity => $activity, trainee => $trainee, ); my $assessment = $Model->assessments_of_case( date => $date, case_no => $case_no, activity => $activity, trainee => $trainee ); my %rating_symbol = $Model->rating_symbol_hash; my %rating_desc = $Model->rating_desc_hash; my %np_desc = $Model->np_description_hash; my $assessor = $Model->case_assessors( date => $date, case_no => $case_no, activity => $activity, trainee => $trainee ); my $tree = $m->scomp('/lib/render_tree.mason', tree => 'activity', start => $activity, with_id => 1); my @tree_nodes; my $width = 0; foreach ( split "\n", $tree ) { # for each tree node my ($id, $label) = split "\t"; $id = $id_of_overall if $id == $activity; # take overall assessment for the top node $label =~ s/\(\s*\d+\s*,\s*\d+\s*\)\s*$//; $width = length($label) if length($label) > $width; # form the prefix -- a row of assessments for this node; self-assessments # followed by the given assessments my $color; my %prefix = (self => '', given => ''); my %flag = (self => undef, given => undef); foreach my $source ( 'self', 'given' ) { foreach my $assID ( sort keys %{$assessment->{$source}->{submissions}} ) { my $raw = $assessment->{$source}->{$assID}->{$id}; $raw =~ s/-1:/-/; my $r = $raw !~ /^-/ ? $rating_symbol{$raw} : $raw; $flag{$source}++ if $raw; my $symbol = ($r =~ /^-/) ? sprintf("%-3s ", $r) : sprintf(" %-3s", $r); if ( $r =~ /^-/ ) { $symbol =~ s%(\S+)%'$1)%e; } elsif ( $id == $id_of_overall ) { $symbol =~ s%(\S+)%'' . $1 .''%e; } else { $symbol =~ s%(\S+)%'$1)%e; } $prefix{$source} .= $symbol; } } $color = $purple if $flag{self} and not $flag{given}; $color = $red if $flag{given} and not $flag{self}; $color = $black if $flag{self} and $flag{given}; $color = $lightgray if not $flag{self} and not $flag{given}; my ($bopen, $bclose) = ($flag{self} or $flag{given}) ? ("", "") : "" x 2; push @tree_nodes, " $bopen$prefix{self}$prefix{given}\t$label$bclose"; } my $longest_id_length = (sort {$a <=> $b} map {length($_)} values %$assessor)[-1]; my @header; my $prefix_length; foreach my $i ( 0 .. $longest_id_length-1 ) { my $buf = ' '; foreach my $assID ( sort keys %{$assessment->{self}->{submissions}} ) { $buf .= sprintf(" %-3s", substr($assessor->{$assID}, $i - $longest_id_length, 1) || ' '); } foreach my $assID ( sort keys %{$assessment->{given}->{submissions}} ) { $buf .= sprintf(" %-3s", substr($assessor->{$assID}, $i - $longest_id_length, 1) || ' '); } $prefix_length = length($buf); my $filler = ' ' x ($width + 2); my $title = "S P E C I F I C"; substr($filler, ($width - length($title))/2 - 2, length($title)) = $title if $i == 2; push @header, qq($buf$filler); } unshift @header, qq() . (' ' x ($prefix_length + $width + 2)) . ""; $proctreeview = join "\n", @header, "", @tree_nodes; my $start = $Model->id_of_general; $tree = $m->scomp('/lib/render_tree.mason', tree => 'activity', start => $start, with_id => 1); undef @tree_nodes; $width = 0; foreach ( split "\n", $tree ) { my ($id, $label) = split "\t"; $id = $id_of_overall if $id == $activity; $label =~ s/\(\s*\d+\s*,\s*\d+\s*\)\s*$//; $width = length($label) if length($label) > $width; my $prefix_self = ""; my $prefix_given = ""; my $color; my ($self, $given) = (undef, undef); foreach my $assID ( sort keys %{$assessment->{self}->{submissions}} ) { my $raw = $assessment->{self}->{$assID}->{$id}; my $r = $rating_symbol{$raw}; $self++ if $raw; my $symbol = sprintf(" %-3s", $r); $symbol =~ s%(\S+)%'$1)%e; $prefix_self .= $symbol; } foreach my $assID ( sort keys %{$assessment->{given}->{submissions}} ) { my $raw = $assessment->{given}->{$assID}->{$id}; my $r = $rating_symbol{$raw}; $given++ if $raw; my $symbol = sprintf(" %-3s", $r); $symbol =~ s%(\S+)%'$1)%e; $prefix_given .= $symbol; } $color = $purple if $self and not $given; $color = $red if $given and not $self; $color = $black if $self and $given; $color = $lightgray if not $self and not $given; my ($bopen, $bclose) = "" x 2; ($bopen, $bclose) = ( "", "" ) if $self or $given; push @tree_nodes, " $bopen$prefix_self$prefix_given\t$label$bclose"; } undef @header; foreach my $i ( 0 .. $longest_id_length-1 ) { my $buf = ' '; foreach my $assID ( sort keys %{$assessment->{self}->{submissions}} ) { $buf .= sprintf(" %-3s", substr($assessor->{$assID}, $i - $longest_id_length, 1) || ' '); } foreach my $assID ( sort keys %{$assessment->{given}->{submissions}} ) { $buf .= sprintf(" %-3s", substr($assessor->{$assID}, $i - $longest_id_length, 1) || ' '); } $prefix_length = length($buf); my $filler = ' ' x ($width + 2); my $title = "G E N E R A L"; substr($filler, ($width - length($title))/2 - 2, length($title)) = $title if $i == 2; push @header, qq($buf$filler); } unshift @header, qq() . (' ' x ($prefix_length + $width + 2)) . ""; $generaltreeview = join "\n", @header, "", @tree_nodes; %init> <%method title><& PARENT:title &> — View Case Details%method> <%method page_title>Assessment details%method> <%method help> <%args> %args>
This page lists all specific elements of the case and the general competencies. The items that were assessed are emphasized in bold. Those that were not assessed are also present, set in a faint color, to provide context for reading. The grades are lined up in vertical columns, one for each assessor. The resident's self-assessments, if present, are displayed in the leftmost column; assessments given by the mentors follow in the chronological order (based on the time of entry).
Additionally, the ratings and the items to which they are attached are color-coded for clarity: unmatched self-assessments are set in purple, unmatched given assessments in red, and paired assessmentsents are set in black.
Each rating represents a click on a button on the Assessment page. The meaning of the symbols is explained here (for the trainee) and here (for the attending). Note that in the specific categories, attendings apply a system of ratings that differs form that of the trainee's.

The overall ratings are attached to the top-level node in the Specific category.
%method> <%method file_info> <% Util::print_revision(q$Id: assessment_details.html,v 2.19 2009-03-09 18:18:58 selkovjr Exp $) %> %method>


Back
New Offine E-CAF
Work Order
Type Of
Serial
RFS Date
Service Details
Visit Charge Hours
Visit Charge Amount
Over Time Surcharge Hours
Parts
Others
Total Amount(estimated)
Remarks
Yes,I/We understand that Starhub wants to serve my/our needs better and consent to starhub using my/our information to develop innovative products and services and releasing such relevant information to its Affiliates and other carefully selected.
Generate
Reset


Welcome to Poc
Invalid user name or password
Wrong Username or Password
Logout Success
Please Sign In
Remember me
Sign In
Reset


TimePicker Test
Examples for both a 12/24-hour clock. Set the "format" option to either "HH:mm" for a 24-hour
or "hh:mm a" for a 12-hour clock. MomentJS is used to parse the incoming time so it can be
a Date, String, or Moment instance. The value function return a Moment instance so
any of the libraries functions can be used on the result.


There are no timetable results!
{{course.subject}} {{course.catalog_nbr}} {{course.className}}
{{course.catalog_description}}
| Class Nbr | Start Time | Descr-Long | End Time | Campus | Facility_ID | Days | Instructors | Class Section | Component | Enroll-Status | Requisites and Constraints | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{comp.class_nbr}} | {{comp.start_time}} | {{comp.descrlong}} | {{comp.end_time}} | {{comp.campus}} | {{comp.facility_ID}} | {{comp.days}} | {{comp.instructors}} | {{comp.class_section}} | {{comp.ssr_component}} | {{comp.enrl_stat}} | {{comp.descr}} | ... |


|
MPack
0.8.2
A C encoding/decoding library for the MessagePack serialization format.
|
This document compares the features of various C libraries for encoding and decoding MessagePack. (It attempts to be neutral, but you may find it biased towards MPack since it is part of this project.)
Feedback is welcome! Please let me know if any entries in the table are incorrect, or if there are any killer features from other parsers that are missing in this list.
| MPack (v0.8) | msgpack-c (v1.3.0) | CMP (v14) | |
|---|---|---|---|
| No libc requirement | ✓ | ✓ | |
| No allocator requirement | ✓ | ✓ | |
| Growable memory writer | ✓ | ✓ | |
| File I/O helpers | ✓ | ✓ | |
| Tree parser | ✓ | ✓ | |
| Propagating errors | ✓ | ✓ | |
| Descriptive error information | |||
| Compound size tracking | ✓ | ||
| Automatic compound size | |||
| Incremental parser | ✓ | ✓ | |
| Incremental type helpers | ✓ | ✓ | |
| Incremental range/match helpers | ✓ | ||
| Asynchronous incremental parser | |||
| Peek next element | ✓ | ||
| Tree stream parser | ✓ | ||
| Asynchronous tree stream parser | ✓ | ||
| Support for new (2.0) spec | ✓ | ✓ | ✓ |
| Compatible with older (1.0) spec | ✓ | ✓ | |
| UTF-8 verification | ✓ |
Most of the features above are optional when supported and can be configured in all libraries. In particular, UTF-8 verification is optional with MPack; compound size tracking is optional and disabled in release by default with MPack; and 1.0 (v4) spec compatibility is optional with CMP (v5/2.0 is the recommended and default usage.)
Tree parsing means parsing a MessagePack object into a DOM-style tree of dynamically-typed elements supporting random access.
Propagating errors means a parse error or type error on one element places the whole parser, encoder or tree in an error state. This means you can check for errors only at certain key points rather than at every interaction with the library, and you get a final error state indicating whether any error occurred at any point during parsing or encoding.
Descriptive error information means being able to get additional information when an error occurs, such as the tree position and byte position in the message where the error occurred.
Compound size tracking means verifying that the same number of child elements or bytes were written or read as was declared at the start of a compound element.
Automatic compound size means not having to specify the number of elements or bytes in an element up-front, instead determining it automatically when the element is closed.
Incremental parsing means being able to parse one basic MessagePack element at a time (either imperatively or with a SAX-style callback) with no per-element memory usage.
Incremental type helpers means helper functions for an incremental parser that can check the expected type of an element.
Incremental range/match helpers means helper functions for an incremental parser that can check not only the expected type of an element, but also enforce an allowed range or exact match on a given value.
Peeking the next element means being able to view the next element during incremental parsing without popping it from the data buffer.
Tree stream parsing means the ability to parse a continuous stream of MessagePack with no external delimitation, emitting complete objects with a DOM-style tree API as they are found. The parser must be able to pause if the data is incomplete and continue parsing later when more data is available. This is necessary for implementing RPC over a socket with a tree parser (without needing to delimit messages by size.)
Asynchronous means the parser is cooperative and re-entrant; when not enough data is available, it will return out of the parser with a "continue later" result rather than failing or blocking the read. There are two asynchronous entries in the above table, one for incremental parsing and one for tree parsing.
Compatible with older (1.0) spec means the ability to produce messages compatible with parsers that only understand the old v4/1.0 version of MessagePack. A backwards-compatible encoder must at a minimum support writing an old-style raw without "str8", since there was no "raw8" type in old MessagePack.


WITNESS LIST Law Enforcement Committee May 2, 2005-1:30P HB 327 For: Barrera, Dagobreeto (Self) Galloway, Carolyn (Citizens for Immigration Reform) Neal, Lois (Self) Wright-Spivy, La Neil (Citizens for Immigration Reform) Against: Figueroa, Luis (Mexican American Legal Defense & Education Fund) Monger, Janis (Texas Appleseed) Yaniez-Correa, Ana (National LULAC) HB 1989 For: Lee, David R. (Texas Truck Driver's Association) Against: Olson, Ron M. (Union Pacific Railroad & Texas Railroad Association)


Stylish & Portable Thin and Light Laptop| 13.3 inch Quad HD LED Backlit IPS Retina Display (True Tone Technology, Wide Color (P3), 500 nits Brightness)| Light Laptop without Optical Disk Drive
Cash on delivery__________________________________________________________________________________________________________________________________________
Carry It Along 2 in 1 Laptop| 14 inch HD LED Backlit Anti-glare Touch Display (Support Active Stylus Pen)| Light Laptop without Optical Disk Drive
__________________________________________________________________________________________________________________________________________
Stylish & Portable Thin and Light Laptop| 13.3 inch Full HD LED Backlit InfinityEdge Display| Light Laptop without Optical Disk Drive
__________________________________________________________________________________________________________________________________________
NVIDIA Geforce GTX 1650 for Desktop Level Performance| 15.6 inch Full HD LED Backlit Anti-glare IPS Display (With 60 Hz Refresh Rate)| Light Laptop without Optical Disk Drive| Pre-installed Genuine Windows 10 OS
__________________________________________________________________________________________________________________________________________
NVIDIA Geforce GTX 1650 for Desktop Level Performance| 15.6 inch Full HD LED Backlit IPS Display| Light Laptop without Optical Disk Drive| Pre-installed Genuine Windows 10 OS
Cash on delivery


We are a fairly small, flexible design studio that designs for print and web. We work flexibly with clients to fulfil their design needs. Whether you need to create a brand from scratch, including marketing materials and a beautiful.
PO Box 17122 Nollins Street
5034 Los Angelos
Phone: 1800555.0658
Email<EMAIL_ADDRESS>Web: fapor.com


{include file='part-head.htm'}>
<{include file='header.htm'}>
<{include file='mainHeader.htm'}>
About Us
Why Choose Us
Trading Servers
Contact Us
Regulation & Licensing
Disclosure documents
<{include file='footer.htm'}> <{include file='form.htm'}>


[1]
Beautiful Video & Super Audio; Firmware Update Required : {
[2]
Plays Blu-ray disks, Decodes/bitstreams HD audio formats; Reliability, Audio drops frequently


All projects
Project Types
{% for project_type in project_types %}
{{ project_type.type_name }}
Delete
{% endfor %}
New Project Type
Create


--- layout: article title: "Submitting Lunch Bug to IndieCade" author: matt tags: [lunchbug] ---
If you follow us on Twitter, you've already seen some screenshots of our upcoming puzzle game Lunch Bug. Last night I submitted it to IndieCade (an international festival of independent games) and I thought sharing my experience might help other devs out there.
The first thing I noticed is that they've got a huge form to fill out. I expected to be writing some information and maybe a description or something, but I wasn't prepared for this much. Their examples were helpful so I included ours:
I thought this was pretty straightforward so I just went with what we'd probably put up on the Chrome Web Store or similar places…
Lunch Bug is a unique puzzle game with gameplay similar to Othello, but with many new, distinct mechanics. Players engage in a deeply strategic puzzle game, aiming to feed the most fruit to the lunch bugs to get the highest score!
You know, this one put me off a little at first because I hadn't put any thought into it. We've been in such a frenzy to get new games out, we haven't really thought about trying to make a statement.
Our first game was a very niche, extremely challenging design that only appealed to a small number of hardcore players. With Lunch Bug, we wanted to design a game that wouldn't alienate players as much, but still had something new to offer to pull them in. So we began with a design we knew and loved and added our own distinctive mechanics to the game.
IndieCade is interesting because it accepts games of any kind, including board games and paper designs. With so many differences and edge-cases, it's no wonder that terminology like "installation" gets used, even when largely irrelevant to games like Lunch Bug.
Lunch Bug can be played in any modern web browser. Please play Lunch Bug in the latest version of Google Chrome (currently 18.x) on Mac or Windows computers. Android, iPhone and iPad browsers are also supported, though some features may not be available and the experience is not ideal.
At first I approached this with step-by-step directions on how to play the game, but I defenestrated that idea and instead leaned heavily on our tutorial. The tutorial should be what teaches players how to play.
Since Lunch Bug is a new game design, we recommend players to follow the tutorial from the title screen to learn how to play. To get the full breadth of the game, players should play through the game until the board is full and the game is over. (New games typically only last ~5 minutes.) Lunch Bug was designed as a "slow burn" game, where players get dramatically higher scores as they improve at the game.
This step was unexpected too. Based on the examples, it sounded like more of a company/team culture aspect than about this particular game, so that's what I wrote:
We named our company Lost Decade because, as two web developers with ~10 years experience each, we felt like we'd somehow let a decade pass by without pursuing our dreams of making games. This is where HTML5 comes in. We're game lovers and designers at heart, but all we knew was JavaScript. With the emergence of HTML5, we could program games quickly and easily and make them instantly, widely available through the web. Lunch Bug is our first real game after quitting our jobs and jumping into the deep end to follow our dreams!
This was easy to write, especially since we've podcasted about it!
After meeting at a web job, Geoff and I quickly realized that we both were passionate about the very specific blend of games and JavaScript. We work from home M-W-F. Geoff comes to my place on Tuesdays, when we talk about goals for the coming week. Thursday I head to his place for gameplay testing and more conversation. Throughout the week we often Skype and IM.
This was somewhat difficult to say, as we have so many open tickets and big plans for the polish, and I had to express all of this in just a few sentences:
Lunch Bug is in active development and will be receiving weekly(ish) updates. We're redoing the title screen and user interface art and adding a new "store" feature.
About halfway through taking extra care in writing decent stuff for this huge form, I somehow had the good sense to save what I was doing. I copy/pasted each of the seven text boxes into our Lost Decade Dropbox account and BOY am I glad I did, because they took so long to write that the website logged me out. I think the data actually saved into a draft, but having a backup saved me from a minor heart attack. Be wary!
I've written a guide to game development contests before, but it certainly needs updating now. My new piece of crucial advice is to go through the submission process early! If we had waited until the deadline for this step, we'd suddenly realize we have to produce a video, and may have been out of time!
This step actually wasn't too bad since I've randomly gotten some practice with iMovie recently. I started adding Lostcast to our YouTube page as well as some random time-lapse movies (because I really love those!). Anyway I've learned a lot recently so I was able to produce a video in less than an hour. And here it is:
Aside from the gigantic form and some bewildering usability problems (phone number is really buried!), the process of submitting to IndieCade wasn't too bad. The competition is stiff, but we're at the very least excited about getting some industry veterans playing our game. Why not submit your game?


Privacy Policy
This privacy policy has been compiled to better serve those who are concerned with how their 'Personally identifiable information' (PII) is being used online. PII, as used in US privacy law and information security, is information that can be used on its own or with other information to identify, contact, or locate a single person, or to identify an individual in context.
Please read our privacy policy carefully to get a clear understanding of how we collect, use, protect or otherwise handle your Personally Identifiable Information in accordance with our website.
What personal information do we collect from the people that visit our blog, website or app?
We do not collect information from visitors of our site.
When do we collect information?
We collect information from you when you register on our site or enter information on our site.
How do we use your information?
We may use the information we collect from you when you register, make a purchase, sign up for our newsletter, respond to a survey or marketing communication, surf the website, or use certain other site features in the following ways:
- To personalize user's experience and to allow us to deliver the type of content and product offerings in which you are most interested.
- To improve our website in order to better serve you.
- To allow us to better service you in responding to your customer service requests.
How do we protect visitor information?
We do not use vulnerability scanning and/or scanning to PCI standards. We use regular Malware Scanning.
Your personal information is contained behind secured networks and is only accessible by a limited number of persons who have special access rights to such systems, and are required to keep the information confidential. In addition, all sensitive/credit information you supply is encrypted via Secure Socket Layer (SSL) technology.
We implement a variety of security measures when a user enters, submits, or accesses their information to maintain the safety of your personal information.
Do we use 'cookies'?
Yes. Cookies are small files that a site or its service provider transfers to your computer's hard drive through your Web browser (if you allow) that enables the site's or service provider's systems to recognize your browser and capture and remember certain information.
For instance, we use cookies to help us remember and process the items in your wish cart. They are also used to help us understand your preferences based on previous or current site activity, which enables us to provide you with improved services. We also use cookies to help us compile aggregate data about site traffic and site interaction so that we can offer better site experiences and tools in the future.
We use cookies to:
- Understand and save user's preferences for future visits.
- Compile aggregate data about site traffic and site interactions in order to offer better site experiences and tools in the future. We may also use trusted third party services that track this information on our behalf.
You can choose to have your computer warn you each time a cookie is being sent, or you can choose to turn off all cookies. You do this through your browser (like Internet Explorer) settings. Each browser is a little different, so look at your browser's Help menu to learn the correct way to modify your cookies.
If you disable cookies off, some features will be disabled It won't affect the users experience that make your site experience more efficient and some of our services will not function properly.
Third Party Disclosure
We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information unless we provide you with advance notice. This does not include website hosting partners and other parties who assist us in operating our website, conducting our business, or servicing you, so long as those parties agree to keep this information confidential. We may also release your information when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or others' rights, property, or safety.
However, non-personally identifiable visitor information may be provided to other parties for marketing, advertising, or other uses.
Third party links
Occasionally, at our discretion, we may include or offer third party products or services on our website. These third party sites have separate and independent privacy policies. We therefore have no responsibility or liability for the content and activities of these linked sites. Nonetheless, we seek to protect the integrity of our site and welcome any feedback about these sites.
We use Google AdSense Advertising on our website.
Google, as a third party vendor, uses cookies to serve ads on our site. Google's use of the DART cookie enables it to serve ads to our users based on their visit to our site and other sites on the Internet. Users may opt out of the use of the DART cookie by visiting the Google ad and content network privacy policy.
We have implemented the following:
- Remarketing with Google AdSense
- Google Display Network Impression Reporting
- Demographics and Interests Reporting
- DoubleClick Platform Integration
We along with third-party vendors, such as Google use first-party cookies (such as the Google Analytics cookies) and third-party cookies (such as the DoubleClick cookie) or other third-party identifiers together to compile data regarding user interactions with ad impressions, and other ad service functions as they relate to our website.
Opting out
Users can set preferences for how Google advertises to you using the Google Ad Settings page. Alternatively, you can opt out by visiting the Network Advertising initiative opt out page or permanently using the Google Analytics Opt Out Browser add on.
California Online Privacy Protection Act
CalOPPA is the first state law in the nation to require commercial websites and online services to post a privacy policy. The law's reach stretches well beyond California to require a person or company in the United States (and conceivably the world) that operates websites collecting personally identifiable information from California consumers to post a conspicuous privacy policy on its website stating exactly the information being collected and those individuals with whom it is being shared, and to comply with this policy.
See more at: http://consumercal.org/california-online-privacy-protection-act-caloppa/#sthash.0FdRbT51.dpuf
According to CalOPPA we agree to the following:
- Users can visit our site anonymously
- Once this privacy policy is created, we will add a link to it on our home page, or as a minimum on the first significant page after entering our website.
- Our Privacy Policy link includes the word 'Privacy', and can be easily be found on the page specified above.
Users will be notified of any privacy policy changes on our Privacy Policy Page
Users are able to change their personal information by logging in to their account
How does our site handle do not track signals?
We honor do not track signals and do not track, plant cookies, or use advertising when a Do Not Track (DNT) browser mechanism is in place.
Does our site allow third party behavioral tracking? It's also important to note that we allow third party behavioral trackingCOPPA (Children Online Privacy Protection Act)
When it comes to the collection of personal information from children under 13, the Children's Online Privacy Protection Act (COPPA) puts parents in control.
The Federal Trade Commission, the nation's consumer protection agency, enforces the COPPA Rule, which spells out what operators of websites and online services must do to protect children's privacy and safety online.
We do not specifically market to children under 13.
Fair Information Practices
The Fair Information Practices Principles form the backbone of privacy law in the United States and the concepts they include have played a significant role in the development of data protection laws around the globe.
Understanding the Fair Information Practice Principles and how they should be implemented is critical to comply with the various privacy laws that protect personal information.
In order to be in line with Fair Information Practices we will take the following responsive action, should a data breach occur:
- We will notify the users via email within 7 business days
- We will notify the users via in site notification within 7 business days
We also agree to the individual redress principle, which requires that individuals have a right to pursue legally enforceable rights against data collectors and processors who fail to adhere to the law. This principle requires not only that individuals have enforceable rights against data users, but also that individuals have recourse to courts or a government agency to investigate and/or prosecute non-compliance by data processors.
CAN SPAM Act
The CAN-SPAM Act is a law that sets the rules for commercial email, establishes requirements for commercial messages, gives recipients the right to have emails stopped from being sent to them, and spells out tough penalties for violations.
We collect your email address in order to:
- Send information, respond to inquiries, and/or other requests or questions.
To be in accordance with CANSPAM we agree to the following:
- NOT use false, or misleading subjects or email addresses
- Identify the message as an advertisement in some reasonable way
- Include the physical address of our business or site headquarters
- Monitor third party email marketing services for compliance, if one is used.
- Honor opt-out/unsubscribe requests quickly
- Allow users to unsubscribe by using the link at the bottom of each email
If at any time you would like to unsubscribe from receiving future emails, you can email us at and we will promptly remove you from ALL correspondence.
Contacting Us
If there are any questions regarding this privacy policy you may contact us using the information below.
Wishcastr.com334 Blackwell Street B017
Durham, North Carolina 27703
United States
<EMAIL_ADDRESS>Last Edited on 2015-11-07


Absolute Error
No Calls
ROC Error
Predictor
Features
No Call Threshold
Update
Confusion Matrix
Samples
True Class
Predicted Class
Confidence
Correct


DOG PARK
Reviewed by Harvey Karten Independent Pictures Director: Bruce McCulloch Writer: Bruce McCulloch Cast: Natasha Henstridge, Luke Wilson, Kathleen Robertson, Janeane Garofalo, Bruce McCulloch, Kristin Lehman
A couple of blocks from where I live is a vest-pocket park-- nothing like the spacious Toronto meadow of Bruce McCulloch's new, light comedy--which is dominated from 7 to 9 each morning by a mostly young crew of neighborhood residents and their mostly large dogs. Few of the people on the high ends of the leashes know one another's names, but they all know the names of the canines that romp, play, and fetch on the grassy knolls. A few months ago, in fact, one of the older walkers died. A modest service was held for him in the park, though not a single person attending the function knew the name of the deceased.  Are dog parks the answer to those who eschew gyms and single bars for meeting the opposite sex? Probably. I've seen no evidence of this in my own neighborhood but in the Bruce McCulloch's airy, 20- something world, serial monogamy is the name of the game as dog people assemble in the park, form bonds, break up, and meet once again.
McCulloch, who penned and directs the comedy, is known mostly to young movie goers as a member of the Kids in the Hall troupe whose "Brain Candy" deals with the effects of a prescription drug's running amok. The Edmonton-born writer focuses on a serial monogamist, Andy (Luke Wilson), whose many relationships belie his loneliness. Compelled by his lack of fulfillment to remain "single" for no more than four days at a time, he flits from one unsuccessful relationship to another, never giving himself time to be alone and reflective. After his woman du jour, Cheryl (Kathleen Robertson--a lookalike for the Ally Sheedy of a decade ago), leaves him for another (Gordon Currie), requiring him to share with her the custody of his beloved dog Mogley (Casey), Andy runs into the clean-cut Lorna (Nathasha Henstridge), whose perfect skin and facial symmetry make her an ideal candidate for her page-boy style hair. While the two awkwardly pursue their new relationship, each is mentored by a friend. Andy takes the advice of her newspaper editor Jeri (Janeane Garofalo), who is virtually married to Jeff (Bruce McCulloch), while Lorna, a TV host on a children's show, follows the counsel of the Joan Cusack-like Rachel (Arnie Carey).
The film's most interesting scenes are not of the unrequited people but of the dogs whom they love--the beasts who take the place of two-legged significant others. The pooches are being readied by obedience trainer-therapist Dr. Cavan (Mark McKinney--taking on the same last name as the producer of the movie)--easily the most amusing guy in the movie. He takes his job with deadly seriousness. Able to get the canines to come and go from his therapy room with a single command, he is the person you want to hire to have your own pet sit, stay, and heel, though like all the others in the film he has his share of neuroses.
Aside from him, there are few we can care about. You've got to wonder how Andy is able to travel so easily from one babe to another.  In fact one female literally buys him at an auction and proves to be so cheap and whorish that you wonder how Andy is able to stand being with her long enough to celebrate their 50th anniversary together--that's 50 instances of lovemaking.
The sexual revolution has not ended. These characters are as addicted to the pleasures of the flesh as are some people in high places today. McCulloch successfully merges the dog panoramas with the more intimate scenes of these eccentrics. But bizarre characters and whimsical episodes do not necessarily make for a satisfying whole. "Dog Park" is so feather-light that it's as forgettable as yesterday's main squeeze.
Rated R. Running Time: 90 minutes. (C) 1999 Harvey Karten
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Windows Impersonation and The Selfish Test
16 May 2018Well, you know, there's automated testing. And then there's 'this' automated testing. And then there is 'that' automated testing. And then there is 'this-and-that' automated testing. And then there are the debates about 'this' vs 'that' vs 'this-and-that'.
Except for the fact that, nobody really tells you what's in it for you.
After all it is just a boatload more work. And frankly, nobody pays for work which exists just to prove Parkinson's Law.
Which brings us to the million dollar question - What's in it for the dear programmer, toiling away to finish a ticket?
Welcome to the programmers day job.
The Programmers day job - 101.
Along came a context...
You are relatively new into a project.
A ticket arrives in a sprint. Blessed by the hands of the product owner. The basic requirement is to be able to run a file copy operation in windows in C# under an account different from the logged in users.
So we immediately raise our hands - Windows Impersonation.
Eh? right ! Slow down a bit, will you. Lets finish with the context, ok?.
- This file is the output file of a long operation, - a long, multiple step, time delayed process.
- Which aggregates data from multiple APIs.

- And then displays and accepts user intervention.

- And at the end of it all creates a file in memory.
- And then reads some configuration file settings whose keys are determined by part of the in-memory file newly created.
- And then based on that configuration data determines a remote target network folder.
- And then based on this remote folders location, switches to the corresponding configured account, which has folder write access, to copy this generated file to the target remote folder.
- Oh! And the method which copies the file over is buried deep in code as a private method which is called at the end of this entire process.
- And no, not every line of this code-base has automated tests. You come up with your list of whys and therefores, and chances are we'll have a few in common. The testing on this is a mix of unit, API, integration, selenium and manual testing.
- And the existing code-base which runs this uses windows integration which needs a complex Active Directory setup which does not exist. It has a way of falling back to a hard-coded account based authentication implementation for local testing purposes.
Your job is to run that private method under a different user-account. Lets hear it again now for that Windows Impersonation thing.
Welcome to a programmers life, my friend, Its all about the context !
Solutioning
You need a change in code, but, as a developer, you cannot just add the code and hand it over to QA - you need to be sure that your code works. And thus, you have a few problems.
- Can you change private method accesibility? Only locally, you may not check-in.
- Can you run the full system? No you cannot. You don't have the AD, the local authentication scheme is too limited to be sufficient to test. The actual process in production runs within a windows service which is configured to use a specific system windows account with elevated and customized permissions.
- Can you run the entire operation from end to end? No, you cannot, the data setup costs will be prohibitively expensive in terms of man-hours.
Development
Going by the 'Principle of least interference'. the code change should preferably be limited to the code in that private
method, encapsulating the copy operation. And let's just go ahead and do the hard thing first and name the method FileCopy
.
Now you start by writing a wrapper library around the basic Windows Impersonation logic from the Microsoft Windows Impersonation documentation. Better still - don't write it. Someone's already written one here. A simple API based on the using
statement gives you nice, elegant syntax, and the ability to wrap any block of code in an impersonation section.
using (Impersonation.LogonUser(domain, username, password, logonType))
{
// do whatever you want as this user.```
}
(Note that there is debate about using using
this way - find discussed here, here and here.),
So off you go -
- Change the
private
method tointernal/public
in your class. You will change it back before check-in. - Wrap the file copy operation in an impersonation block as per the usage shown above.
- Add
InternalsVisibleTo
attribute to the assembly, if you change the method tointernal
. - Configure the
app.settings
keys which provide the user name and password.
Infrastructure
You have asked your network admin to give you a test-account on the network, and you have configured all settings, and you are all set.
Verification
Now comes the difficult part - How to verify a file-copy was by a specific account ? - when you cannot execute the whole system or the whole code.
You start writing an automated test, because, sometimes, there is just no other viable way to verify your code. Interestingly, however, in this particular context, it is also the most complicated coding involved in this particular ticket. Yet it is effectively unavoidable as all other ways of verifying the code you wrote are not feasible on account of time constraints.
So lets structure the test.
Arrange - For a start, we need to instantiate the target class. Luckily there was master suite of tests which needed this class so class instantiation with all dependencies was a solved problem.
Act - Execute the FileCopy
operation. The FileCopy
operation reads in the user account information, creates a new impersonation block and executes the file copy operation with that scope.
Assert - Read in the windows file system attributes and compare the file Created By attribute with the configured account for the file copy. They should match and we should be done.
In real life, you still have a few problems.
- First, figure out the exact lines of code involved and
- Some peculiarities with how windows user accounts work, especially ones setup as administrators.
But at this point lets get down to sample code. Find below the relevant snippets of the program and the test code, well commmented, and hopefully, self explanatory.
The Program Code
First, the program code - the part that goes into production, and the simpler part of the coding bit -
Public class BigBadClassWithLotsOfInitialization
{
...
... OTHER CODE ELIDED ...
...
//Note: this is a private method. We change it to public/internal
//to test. Once done, we switch it back to private before check-in.
public void FileCopy(string localXmlFilePath, string newPath)
{
string domainAndUser = Cfg.GetServiceUserName();
string domain = domainAndUser.Split('\\')[0];
string user = domainAndUser.Split('\\')[1];
string password = Cfg.GetServiceUserPwd();
LogonType logonType = LogonType.Interactive;
//Impersonation block.
using (Impersonation.LogonUser(domain, user, password, logonType))
{
// pr-existing code.
var fileName = Path.GetFileName(localXmlFilePath);
if (fileName != null)
newPath = Path.Combine( newPath
,fileName.Replace(".xml", GetTimestamp() + ".xml"));
Logger.InfoFormat("Moving file {0} to {1}", localXmlFilePath, newPath);
if (File.Exists(newPath))
{
File.Delete(newPath);
}
File.Move(localXmlFilePath, newPath);
// end pr-existing code.
}
}
}
The Test Code
This is the part of the code that goes no-where, and doesn't even work after its checked-in. And ironically, the more complex part of the coding, mainly because of the Windows file system know-how involved.
[Test, Ignore]
public void CanWriteFileAsDifferentUserThroughJob()
{
//Notes | This is a shortcut to test whether elevated permissions
//are happening when 'FileCopy' is called. 'FileCopy' is a private
//method. So we need to change to public when we need to test.
//Change it back when done.
var job = new BigBadClassWithLotsOfInitialization();
//Needs to be xml file.
var fname = Guid.NewGuid().ToString();
var fileName = fname + ".xml";
var fromPath = Cfg.GetAutomaticPlaceOrdersExportOutputDirectoryPath();
var fromFile = Path.Combine(fromPath, fileName);
//using File.Create opens a fileStream and keeps it so, thus
//causing file cannot be used errors. this appends if it
//exists. It is ok to keep creating without deleting as
//MoveFile deletes source file after successful move.
using (StreamWriter sw = new StreamWriter(fromFile, true))
{
sw.Write(fname);
}
var toPath = Cfg.GetAutomaticPlaceOrdersRemoteDirectoryPath(440);
//NOTE 1: this line does not compile when the MoveFile method is
//private. so you need to change it before running the test.
//NOTE 2: when using an account which does not have write access
//to the target folder, this line throws an exception. so if the
//user account set in config does not have permission, this line
//throws an error. If it has permission then write happens ok, but
//you encounter the subsequent notes.
job.FileCopy(fromFile, toPath);
var toFile = new DirectoryInfo(toPath
.GetFiles()
.First(e => e.Name.Contains(fname));
var fs = File.GetAccessControl(toFile.FullName);
var idRef = fs.GetOwner(typeof(SecurityIdentifier))
.Translate(typeof(NTAccount));
//this part is not working. why? Because the only other domain
//account i have is also an administrator. when doing stuff with
//administrator accounts, windows upgrades the user detail to the
//administator group. For details check stackoverflow - https://stackoverflow.com/questions/3370146/how-can-i-find-out-who-created-a-file-in-windows-using-net for more details. So following assert doesnt work.
//Assert.AreEqual(Cfg.GetServiceUserName(), idRef.Value);
//This does.
Assert.AreEqual('BUILTIN\Administrators', 'idRef.Value');
}
Thats all of the significant code. It might take some work to put into a consistently reproducible state - a class library, a test project. some settings, a couple of user accounts on your machine. But most of that should be relatively standard.
The Selfish Test
a.k.a Automated Testing, By Developer, For Developer.
So coming back to the question - what's in it for you, the developer?
so lets consider the test above -
-
Is it an automated test? Yes.
-
Is it an unit test? No. You will be changing the
FileCopy
method to private and the test toIgnore
before check-in. You will also be commenting out the call to theFileCopy
method withing the test, as otherwise all you will be distributing to your team members is a compile time error. At point, its hardly even a test. Just some dead-code in the system. -
Is it an integration test? Possibly. Why? It does integrate with the file system and active directory accounts, but the point is moot since the fact that you change the method to private and the test to ignore and comment out the 'act' stage of the test renders it unusable for anything after check-in.
-
Is it easy to write? No. In this case, it is the most complicated part of the code written for that ticket.
BUT CAN WE AVOID IT? NO.
Simply, because none of the other approaches to verification are feasible options.
So exactly what sort of automated test is this? What benefits does it provide? Whom does it help?
The answer is rather selfish. This test, gives you, the developer -
- The ability to execute the code you added in
FileCopy
without lots of expensive setup. - The ability to step-into and debug the code line by line if necessary.
- And since the change has a small surface area, the code tested by this can be reasonably expected to reproduce similiar behavior in pre-production and production environment.
And thus we have The Selfish Test - Automated verification, by developer, for developer. The above is an example of a Selfish Test. You write this to help yourself. This is the only cheap, easy way to help you to debug as well as to verify the code you wrote. Its lifetime and use is limited to the duration of your development time. Its only purpose is to help you.
So, dear developer, go help yourself.


| Developer Spotlight |
Nathan Neitzke started working with JXTA technology around June 2002, and currently resides in Daytona Beach, FL. He is enrolled at Embry Riddle Aeronautical University working towards obtaining two masters degrees, one in Aerospace Engineering and the other in Software Engineering. Dedicating 50% of his development time to Project JXTA (about 40 hours per week), Nathan is the Project Lead for the .NET Implementation of JXTA Project. He believes the .NET Implementation will only allow JXTA to further embed itself as the premier peer to peer platform for developers. After the initial platform release, he intends to also work extensively on creating services that allow JXTA to become a viable enterprise technology meeting the design goals of availability, manageability,performance, reliability, scalability, and securability. He also serves as a platform committer and often contributes ideas/suggestions to the developer newsgroups. Nathan believes JXTA is an extremely exciting technology for several reasons, but most importantly it is based on an open protocol. Its advantages include XML support, logical separation of the network into groups, discovery over firewalls, and an open architecture that allows easy modification by end users. His vision for JXTA, which is shared throughout the community, is that of a completely new platform for computing. It will stand as the base of future network based applications. Next generation technologies such as grid computing, user managed resource allocation, Web services, and many more could all be built on top of the JXTA network layer allowing for an extremely dynamic and extensible computing environment. The other main software project he devotes his time to is "Eagle Eye", a project by Embry Riddle Aeronautical University, to launch a satellite into space that will capture images of the earth's surface. The team is developing the software that will capture the images on the satellite, compress them, send them over http down to earth to a PERL script running on Red Hat Linux, which then stores the images in a MYSQL database. You can reach Nathan at<EMAIL_ADDRESS>|