By reading through the various posts and topics that I have on this website, it’s pretty obvious to see that I’m a fan of WordPress. It makes complex tasks incredibly simple and automated for users who want to create/build a website, but don’t want to have to deal with code at all. For more advanced users who do want to tweak a bit more with code, WordPress is great for that as well.
While I’m sure there are a plethora of third-party applications that you can download to do this, why add something to your computer that would potentially slow it down when the functionality is already built-in? The ability is already built straight into the Quicktime app on your Mac. That’s right! The same application that allows you to watch videos on your computer also allows you to record your screen. It’s remarkably simple, and best of all — free!
Here’s a quick tip that, sadly, I just now discovered in Adobe Lightroom. I’d say I’m quite familiar with the tools and capabilities of Adobe Lightroom, however, one thing has always baffled me. While cropping an image, I could never get the crop tool to switch from landscape orientation to portrait. I like to constrain my cropping proportions so that if I ever need to print my images, I won’t have any letter boxing.
Although this is changing with the advent of solid-state drives, most hard drives are mechanical, which means they are often the first part of a standard computer system to fail. Data is everything these days, and its up to you to protect it. But in the case of a drive failing, you have no excuse for not having a backup with the ease of RAID. Instead of waiting for a hard drive to fail, an easier approach can be taken.
There’s no doubt about it. WordPress is popular, easy to use, and here to stay. It’s estimated that more than 20% of the internet is currently running on the CMS. With drag-and-drop features, thousands of themes, and super-simple customization, it’s easy to see why. That doesn’t mean WordPress doesn’t come without any quirks, though. One of those many quirks (annoyances, really) are the ‘categories’ feature. While it’s a piece of cake to categorize posts into various sections, there’s always been one thing that has bugged me.
I’ve been the go-to tech guy for family and friends for as long as I can remember.  Can you fix it?” 99% percent of the time, this involves removing malware or virus infections. You’re all very familiar with these: browser hijacking, tons of popups, and a computer running as slow as molasses.


<% var degree = ""; %>
<% _.forEach(educations, function(item) { %>
<% if (item['label'].indexOf(",") > 0) { %>
<% var n = item['label'].indexOf(","); %>
<% degree += item['label'].substr(0,n) + ", "; %>
<% } %>
<% }); %>
<% degree = degree.slice(0, -2); %>
Scholars@Duke Users: How to Complete the APT CV
The School of Medicine APT CV contains output from your Scholars@Duke profile displayed in a Word document that you can edit directly.
To make permanent changes, you must add or correct information in the source systems, either Scholars@Duke, Elements, dFac (Duke’s faculty system) or SPS (Duke’s Sponsored Projects System).
Titles, affiliations, and educational information comes from dFac, Duke’s faculty system. To add or correct information in dFac, contact your organization's Scholars power user(s).
For more information, refer to Using the Scholars APT CV.
Delete this cover page before submitting your CV.
Correcting and editing source information
Must be updated in dFac on your behalf; contact your organization's Scholars power user(s).
Primary Academic Appointment:
Must be updated in dFac on your behalf; contact your organization's Scholars power user(s).
Secondary Academic Appointment:
Must be updated in dFac on your behalf; contact your organization's Scholars power user(s).
Must be updated in dFac on your behalf; contact your organization's Scholars power user(s).
Rank and date of first Duke Faculty Appointment:
Must be updated in dFac on your behalf; contact your organization's Scholars power user(s).
Medical License Number and Date:
Add in Scholars@Duke in the "Medical Licensure" section.
Must be updated in dFac on your behalf; contact your organization's Scholars power user(s).
Professional Training and Academic Career:
Must be updated in dFac on your behalf; contact your organization's Scholars power user(s).
Specialty Certifications and Dates:
Must be updated in dFac on your behalf; contact your organization's Scholars power user(s).
Add or edit in Elements, the publications system. Click the Help button to learn more about how to use Elements to add, edit, or claim your publications.
Publications from your Scholars@Duke profile will appear (or not appear) on this CV based on how the record
(from PubMed, Scopus, Web of Science, etc.) was tagged at the source. For a full explanation of how publications are categorized
on the SoM CV, see
https://about.scholars.duke.edu/medicinecv.
Note that the categorization rules are determined by the Duke School of Medicine APT Committee and any changes would need to be approved by that committee.
Advisory and Consultant Appointments:
Add to your Scholars@Duke profile in the Service to the Profession section using service type "Consulting".
Add in Scholars@Duke in the Awards and Honors section using award type "Scholarly Society".
Professional Awards and Special Recognitions:
Add in Scholars@Duke in the Awards and Honors section
Add in Scholars@Duke in the Service to the Profession section using service type "Editorial Activities".
Professional Societies, Service Organizations:
Add in Scholars@Duke in the Service to the Profession section.
Grants data comes from SPS and must be corrected on your behalf by your organization’s Scholars power user. Supplement this information using the "Fellowships, Supported Research & Other Grants" section in Scholars@Duke. You’ll need to add Grants Direct Costs and Grants Percent Effort directly to the generated CV Word document.
Add in Scholars@Duke in the Advising and Mentoring section
Education / Teaching Activities:
Add in Scholars@Duke in the Teaching Activities section
Invited Lectures and Presentations:
Add in Scholars@Duke in the Presentations and Appearances section using the following subtypes:
Named Lectures: Use type Keynote/Named Lecture
Visiting Professorships: Use type Visiting Professorship Lecture
International Meetings (Invited): Use service type "International Meeting or Conference". Do not include abstract presentations, industry sponsored symposiums, etc.
National Scientific Meetings (Invited): Use service type "National Scientific Meeting". Do not include abstract presentations, industry sponsored symposiums, etc.
Instructional Courses, workshops, symposiums (National): Use service type "Instructional Course, Workshop, or Symposium"
Add in Scholars@Duke in the Clinical Activities section
Academic, Leadership, and Administrative Activities:
Add in Scholars@Duke in the Academic & Administrative Activities section. Scholars@Duke does not distinguish between School of Medicine and Hospital/DUHS activities, so you may need to move entries under the appropriate section in the exported CV Word document.
If you have questions or need help, please contact your department’s
Scholars power user to submit a Help ticket.
DUKE UNIVERSITY MEDICAL CENTER
CURRICULUM VITAE
for the Permanent Record
and the
Appointments, Promotions and Tenure Committee
<% var dt = new Date(); %>
<% var today = "" %>
<% var monthNames = ["January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"]; %>
<% today = monthNames[dt.getMonth()] + " " + dt.getDate() + ", " + dt.getFullYear(); %>
Date CV prepared: ${today}
Name: <% if (degree != undefined && degree != "") { %>
${name}, ${degree}
<% } else { %>
${name}
<% } %>
<% if(primaryPositions.length > 0) { %>
<% var title = ""; %>
<% var organizationLabel = ""; %>
<% _.forEach(primaryPositions, function(item) { %>
<% title += item['label'] + ', '; %>
<% organizationLabel += item['organizationLabel'] + ', '; %>
<% }); %>
<% title = title.slice(0,-2); %>
<% organizationLabel = organizationLabel.slice(0,-2); %>
PRIMARY ACADEMIC RANK: ${title}
PRIMARY ACADEMIC DEPARTMENT: ${organizationLabel}
<% } %>
<% if(secondaryPositions.length > 0) { %>
<% var title = ""; %>
<% var organizationLabel = ""; %>
<% _.forEach(secondaryPositions, function(item) { %>
<% title += item['label'] + ', '; %>
<% organizationLabel += item['organizationLabel'] + ', '; %>
<% }); %>
<% title = title.slice(0,-2); %>
<% organizationLabel = organizationLabel.slice(0,-2); %>
SECONDARY ACADEMIC RANK(S):
<% if(secondaryPositions.length > 0) { %>
<% var title = ""; %>
<% _.forEach(secondaryPositions, function(item) { %>
<% title = item['label']; %>
${title}
<% }); %>
<% } %>
SECONDARY ACADEMIC DEPARTMENT(S):
<% if(secondaryPositions.length > 0) { %>
<% var organizationLabel = ""; %>
<% _.forEach(secondaryPositions, function(item) { %>
<% organizationLabel = item['organizationLabel']; %>
${organizationLabel}
<% }); %>
<% } %>
<% } %>
OTHER TITLES:
List any other titles here, one title per row.
<% if(otherTitlePositions.length > 0) { %>
<% var title = ""; %>
<% _.forEach(otherTitlePositions, function(item) { %>
<% title = item['label']; %>
${title}
<% }); %>
<% } %>
<% if (pastPrimaryAppointments.length > 0) { %>
<% var title = ""; %>
<% _.forEach(pastPrimaryAppointments, function(item) { %>
<% title = item['orig_label'] + ', ' + item['startYear'] + ', '; %>
<% }); %>
<% title = title.replace(/,\s*$/, ""); %>
RANK AND DATE OF FIRST DUKE FACULTY APPOINTMENT: ${title}
<% } %>
<% if (licences.length > 0) { %>
<% var lic = ""; %>
<% _.forEach(licences, function(item) { %>
<% lic = item['label']; %>
<% }); %>
NC MEDICAL BOARD LICENSE CERTIFICATE NUMBER: ${lic}
Next Renewal Date: [ENTER NEXT RENEWAL DATE HERE]
<% } %>
SPECIALTY CERTIFICATIONS AND DATES
Include full dates of certification (month, day and year).
<% if (educations.length > 0) { %>
<% educations.sort(function(a,b) {return (a.endYear > b.endYear) ? 1 : ((b.endYear > a.endYear) ? -1 : 0);} ); %>
EDUCATION
List degree, institution, location and year for high school, college, and graduate/professional school degrees in chronological order (oldest first).
<% _.forEach(educations, function(item) { %>
<%= item['label'] %>
<% }); %>
<% } else { %>
EDUCATION
List degree, institution, location and year for high school, college, and graduate/professional school degrees in chronological order (oldest first).
<% } %>
<% profexpSection.sort(function(a,b) {return (a.startYear > b.startYear) ? 1 : ((b.startYear > a.startYear) ? -1 : 0);} ); %>
PROFESSIONAL TRAINING AND ACADEMIC CAREER
Beginning with first postgraduate position, list institution, position/title and dates in chronological order.
<% _.forEach(profexpSection, function(item) { %>
<% if ( item['isTypeOf'] == 'profExperiences' ) { %>
<% var institution = item['institution'] %>
<% var label = item['label'] %>
<% if(item['endYear'] != null) { %>
<%= institution + ", " + label + ", " + item['startYear'] + " - " + item['endYear'] %>
<% } else { %>
<%= institution + ", " + label + ", " + item['startYear'] + " - " + "present" %>
<% } %>
<% } else { %>
<% if(item['endYear'] != null) { %>
<%= item['institution'] + ", " + item['orig_label'] + ", " + item['startYear'] + " - " + item['endYear'] %>
<% } else { %>
<%= item['institution'] + ", " + item['orig_label'] + ", " + item['startYear'] + " - " + "present" %>
<% } %>
<% } %>
<% }); %>
SCHOLARSHIP
For journal references:
• PubMed citation format preferred
• Include PMID, PMCID, DOI (if available)
• Number entries sequentially in chronological order, with 1 being the oldest
• List all authors, do not use "et al."
• Highlight your name in bold
• Do not list papers in preparation, submitted papers that have not been accepted for publication
• Identify papers accepted for publication but not yet published as "in press"
• Include notation if co-first author (e.g., mark with asterisk or caret, describe co-author role)
• Include notation if scholarship in JEDAI, advocacy, open science domains (e.g., mark with asterisk or caret, identify domain)
<% journals.sort(function(a,b) {return (a.year > b.year) ? 1 : ((b.year > a.year) ? -1 : 0);} ); %>
<% if (journals.length > 0) { %>
A. Publications in refereed journals
Refereed journals are scientific publications that have active editorial boards and a system of critical review of all submissions), including:
• Named author publications
• Study Group publications (multicenter investigations where you were a PI or investigator, but not a named author)
• Letters and editorials
• Invited scientific reviews
• Position and background papers (e.g., guidelines, consensus statements)
<% _.forEach(journals, function(item) { %>
<%= item['citation'].replace(lastName,"" + lastName + "") %>
<% }); %>
<% } else { %>
A. Publications in refereed journals
Refereed journals are scientific publications that have active editorial boards and a system of critical review of all submissions), including:
• Named author publications
• Study Group publications (multicenter investigations where you were a PI or investigator, but not a named author)
• Letters and editorials
• Invited scientific reviews
• Position and background papers (e.g., guidelines, consensus statements)
<% } %>
<% books_booksections.sort(function(a,b) {return (a.year > b.year) ? 1 : ((b.year > a.year) ? -1 : 0);} ); %>
<% if (books_booksections.length > 0) { %>
B. Books
(Include books and book chapters)
<% _.forEach(books_booksections, function(item) { %>
<%= item['citation'].replace(lastName,"" + lastName + "") %>
<% }); %>
<% } else { %>
B. Books
(Include books and book chapters)
<% } %>
C. Digital output and other forms of public dissemination
Social media, traditional media (e.g. broadcast, news media)
<% abstracts.sort(function(a,b) {return (a.year > b.year) ? 1 : ((b.year > a.year) ? -1 : 0);} ); %>
<% if (abstracts.length > 0) { %>
D. Abstracts
List up to 10 of your most impactful abstracts
<% _.forEach(abstracts, function(item) { %>
<%= item['citation'].replace(lastName,"" + lastName + "") %>
<% }); %>
<% } else { %>
D. Abstracts
List up to 10 of your most impactful abstracts
<% } %>
<% abstracts.sort(function(a,b) {return (a.year > b.year) ? 1 : ((b.year > a.year) ? -1 : 0);} ); %>
<% if (abstracts.length > 0) { %>
E. Non-refereed publications
(Non-refereed publications refer to published manuscripts which are not subject to a system of critical review – articles are often solicited by the publisher)
<% _.forEach(abstracts, function(item) { %>
<%= item['citation'].replace(lastName,"" + lastName + "") %>
<% }); %>
<% } else { %>
E. Non-refereed publications
(Non-refereed publications refer to published manuscripts which are not subject to a system of critical review – articles are often solicited by the publisher)
<% } %>
F. Other forms of scholarship dissemination (not included above)
<% nonauthored.sort(function(a,b) {return (a.year > b.year) ? 1 : ((b.year > a.year) ? -1 : 0);} ); %>
<% if (nonauthored.length > 0) { %>
Non-authored publications
<% _.forEach(nonauthored, function(item) { %>
<%= item['citation'].replace(lastName,"" + lastName + "") %>
<% }); %>
<% } else { %>
Non-authored publications
<% } %>
<% others.sort(function(a,b) {return (a.year > b.year) ? 1 : ((b.year > a.year) ? -1 : 0);} ); %>
<% if (others.length > 0) { %>
Other publications
<% _.forEach(others, function(item) { %>
<%= item['citation'].replace(lastName,"" + lastName + "") %>
<% }); %>
<% } else { %>
<% } %>
APPOINTMENTS AND RECOGNITION
<% if (prof_editorial_activities.length > 0) { %>
<% prof_editorial_activities.sort(function(a,b) {return (a.date > b.date) ? 1 : ((b.date > a.date) ? -1 : 0);} ); %>
A. Scientific reviewer (e.g. editorial boards, study section review group)
<% _.forEach(prof_editorial_activities, function(item) { %>
<%= item['label'] %>
<% }); %>
<% } else { %>
A. Scientific reviewer (e.g. editorial boards, study section review group)
<% } %>
<% full_org_and_participation_list.sort(function(a,b) {return (a.date > b.date) ? 1 : ((b.date > a.date) ? -1 : 0);} ); %>
<% if (full_org_and_participation_list.length > 0) { %>
B. Professional societies, service organizations (list membership status, leadership positions, committee membership, etc.)
<% _.forEach(full_org_and_participation_list, function(item) { %>
<%= item['label'] %>
<% }); %>
<% } else { %>
B. Professional societies, service organizations (list membership status, leadership positions, committee membership, etc.)
<% } %>
<% if (prof_consulting.length > 0) { %>
<% prof_consulting.sort(function(a,b) {return (a.date > b.date) ? 1 : ((b.date > a.date) ? -1 : 0);} ); %>
C. Advisory and consultant appointments (include government, non-government organizations, life science companies, private organizations, etc.)
<% _.forEach(prof_consulting, function(item) { %>
<%= item['label'] %>
<% }); %>
<% } else { %>
C. Advisory and consultant appointments (include government, non-government organizations, life science companies, private organizations, etc.)
<% } %>
<% if (scholarlySocieties.length > 0) { %>
D. Scholarly societies (Alpha Omega Alpha, Sigma Xi, Phi Beta Kappa, etc.)
<% _.forEach(scholarlySocieties, function(item) { %>
<%= item['label'] %>
<% }); %>
<% } else { %>
D. Scholarly societies (Alpha Omega Alpha, Sigma Xi, Phi Beta Kappa, etc.)
<% } %>
<% if (awards.length > 0) { %>
E. Professional awards and recognition
<% _.forEach(awards, function(item) { %>
<%= item['label'] %>
<% }); %>
<% } else { %>
E. Professional awards and recognition
<% } %>
RESEARCH SUPPORT
Complete the following sections for all external present, past, and pending support including gifts, grants, and contracts:
<% if (currentGrants.length > 0) { %>
Current
<% _.forEach(currentGrants, function(item) { %>
Project Title: <%= item['title'] %>
Grant number:
PI: <%= item['pi'] %>
Role: <%= item['role'] %>
Percent effort:
Funding source: <%= item['awardedBy'] %>
Funding amount:
Duration: <%= item['period'] %>
Project synopsis:
<% }); %>
<% } else { %>
Current
Project Title:
Grant number:
PI:
Role:
Percent effort:
Funding source:
Funding amount:
Duration:
Project synopsis:
<% } %>
<% if (completedGrants.length > 0) { %>
Completed
<% _.forEach(completedGrants, function(item) { %>
Project Title: <%= item['title'] %>
Grant number:
PI: <%= item['pi'] %>
Role: <%= item['role'] %>
Percent effort:
Funding source: <%= item['awardedBy'] %>
Funding amount:
Duration: <%= item['period'] %>
Project synopsis:
<% }); %>
<% } else { %>
Completed
Project Title:
Grant number:
PI:
Role:
Percent effort:
Funding source:
Funding amount:
Duration:
Project synopsis:
<% } %>
<% if (mentorship_activities) { %>
MENTORING ACTIVITIES
For each mentee list the duration of mentor-mentee relationship and any resulting scholarship (e.g., abstract, manuscript, presentation, award, grant, academic appointment)
• Faculty
• Fellows
• Residents
• Medical Students
<% } else { %>
MENTORING ACTIVITIES
For each mentee list the duration of mentor-mentee relationship and any resulting scholarship (e.g., abstract, manuscript, presentation, award, grant, academic appointment).
• Faculty
• Fellows
• Residents
• Medical Students
<% } %>
<% if (teaching_activities) { %>
EDUCATION / TEACHING ACTIVITIES (residents, fellows, medical students, CME)
Describe activities teaching and providing educational support for residents, medical students, and continuing medical education. List activities by:
• Lectures (title, data):
• Courses taughts (title, course number, date, audience):
• Education program development (title of program, date first available):
• Education assessment methods and tools development (title of tool, date first available):
• Education management and leadership (title, dates – e.g., fellowship director):
<% } else { %>
EDUCATION / TEACHING ACTIVITIES
Describe activities teaching and providing educational support for residents, medical students, and continuing medical education. List activities by:
• Teaching and supporting learners
• Development of courses / educational programs
• Development of assessment tools and methods
• Education management / leadership
<% } %>
INVITED LECTURES AND PRESENTATIONS (do not list abstract presentations)
• Visiting professorships (institution, date)
• Scientific meetings – invited (lecture title, meeting, date)
• Courses, symposiums, workshops – invited (lecture title, meeting role, meeting, date)
<% if (professorships.length > 0) { %>
Visiting professorships (institution, date):
<% _.forEach(professorships, function(item) { %>
<%= item['label'] %>
<% }); %>
<% } else { %>
Visiting Professorships (institution, date):
<% } %>
<% if (internationalmeetings.length > 0) { %>
International Meetings:
<% _.forEach(internationalmeetings, function(item) { %>
<%= item['label'] %>
<% }); %>
<% } else { %>
<% } %>
<% if (nationalmeetings.length > 0) { %>
Scientific Meetings -- invited (lecture title, date):
<% _.forEach(nationalmeetings, function(item) { %>
<%= item['label'] %>
<% }); %>
<% } else { %>
Scientific Meetings -- invited (lecture title, date):
<% } %>
<% if (lectures.length > 0) { %>
Lectures:
<% _.forEach(lectures, function(item) { %>
<%= item['label'] %>
<% }); %>
<% } else { %>
<% } %>
<% if (interviews.length > 0) { %>
Interviews:
<% _.forEach(interviews, function(item) { %>
<%= item['label'] %>
<% }); %>
<% } else { %>
<% } %>
<% if (keynotenamedlectures.length > 0) { %>
Named Lectures:
<% _.forEach(keynotenamedlectures, function(item) { %>
<%= item['label'] %>
<% }); %>
<% } else { %>
<% } %>
<% if (courses.length > 0) { %>
Courses, symposiums, workshops – invited (lecture title, meeting role, meeting, date):
<% _.forEach(courses, function(item) { %>
<%= item['label'] %>
<% }); %>
<% } else { %>
Courses, symposiums, workshops – invited (lecture title, meeting role, meeting, date):
<% } %>
<% if (invitedtalks.length > 0) { %>
Invited Talks:
<% _.forEach(invitedtalks, function(item) { %>
<%= item['label'] %>
<% }); %>
<% } else { %>
<% } %>
<% if (broadcastappearances.length > 0) { %>
Broadcast Appearances:
<% _.forEach(broadcastappearances, function(item) { %>
<%= item['label'] %>
<% }); %>
<% } else { %>
<% } %>
<% if (others.length > 0) { %>
Other:
<% _.forEach(others, function(item) { %>
<%= item['label'] %>
<% }); %>
<% } else { %>
<% } %>
<% if (clinical_activities) { %>
CLINICAL ACTIVITY
Describe clinical focus or specialization, clinical commitment as % effort, documentation of regional /institutional referral patterns)
<% } else { %>
CLINICAL ACTIVITY
Describe clinical focus or specialization, clinical commitment as % effort, documentation of regional /institutional referral patterns)
<% } %>
<% if (academic_activities) { %>
ACADEMIC, LEADERSHIP AND ADMINISTRATIVE ACTIVITIES – SCHOOL OF MEDICINE (list roles / responsibilities, include dates)
ACADEMIC, LEADERSHIP AND ADMINISTRATIVE ACTIVITIES – HOSPITAL/DUHS (list roles / responsibilities, include dates)
<% } else { %>
ACADEMIC, LEADERSHIP AND ADMINISTRATIVE ACTIVITIES – SCHOOL OF MEDICINE (list roles / responsibilities, include dates)
ACADEMIC, LEADERSHIP AND ADMINISTRATIVE ACTIVITIES – HOSPITAL/DUHS (list roles / responsibilities, include dates)
<% } %>


'My Right To Breathe': Indian Students Protest Against Pollution
Schools in the capital New Delhi will reopen on Monday after closing for two days due to a spike in pollution levels.
by ReutersIndian school children took to the streets on Sunday with a strong message.
"I am protesting for my right to breathe because it's completely taken away and I need to live. It's my right, you can't just take it away,” said Shaurya Vardhan, protesting school student.
Schools in the capital New Delhi will reopen on Monday after closing for two days due to a spike in pollution levels, but air quality is likely to remain "very poor", just a notch below the most hazardous "severe" rating, raising health risks for millions of students.
"This is affecting everybody. As a patient, as a doctor and as a family man, I am really concerned about it,” said Devendra Taneja, doctor and parent at protest.
Toxic smoke choking the city has plunged air quality into the "severe" pollution category on several days this month, as data showed that a pledge by Prime Minister Narendra Modi to stamp out burning of crop stubble in neighboring states hasn't worked.


🎮 Meow Command Line Interface
We provide a command line interface with Meow, located in the root of the package.
Installation
To be able to use the CLI, place the following script somewhere in your $PATH
and call it meow
:
#!/bin/bash
DIRNAME=${PWD##*/}
pkgName="Meow"
if [[ $DIRNAME == "$pkgName" ]]; then
PACKAGE_DIR="."
elif [ -d "Packages/Meow" ]; then
PACKAGE_DIR="Packages/$pkgName"
else
PACKAGE_DIR=$(echo ".build/checkouts/$pkgName.git"*)
if [ ! -d $PACKAGE_DIR ]; then
echo "❗ Error: Meow was not found. Install it using the Swift Package Manager, the run this command again from the root of your package."
exit 1
fi
fi
$PACKAGE_DIR/Meow "$@"
This script looks up the real
Meow script and calls it.
Make sure to make the script file executable (chmod +x meow
).
We’ll provide an easier way to install this script in the future. Contributions are welcomed, of course!
Config file (MeowConfig
)
Create a new config file by running meow init
.
The following configuration parameters are supported:
sources
: (required) The directory with your source filesoutput
: (required) The output file to which generated code is writtenplugins
: An array with plugin names in Bash notation, e.g.("Foo" "Bar")
accesslevel
: The access level of methods generated by Meow. Defaults tointernal
.


1.5 weeks to Thailand means one thing around the Clark house--time to switch the bedrooms around! What, that isn't how you'd get ready?
11/7/2009, 8:36:53 PM
Favs: 0
Retweets: 0
link--- layout: tweet ---
1.5 weeks to Thailand means one thing around the Clark house--time to switch the bedrooms around! What, that isn't how you'd get ready?
11/7/2009, 8:36:53 PM
Favs: 0
Retweets: 0
link


THE TASTE OF OTHERS (Les Goutes des Autres)
Have you ever misjudged someone, treated them badly, then felt horrible about it? This and other aspects of the human condition are explored in cowriter/director/star Agnes Jaoui's Best Foreign Language Film Oscar nominee "The Taste of Others."
The film begins by following the seemingly unrelated conversations of two tables of diners. Castella (cowriter Jean-Pierre Bacri, "Place Vendome") is a businessman attempting to sneak a sweet past his controlling wife Angelique (Christiane Millet) while also carrying on a business lunch. At another table, storytelling Franck (Gerard Lanvin) and literal Bruno (Alain Chabat, "French Twist") appear to have little in common until we learn that Franck is Castella's bodyguard and Bruno his driver.
Castella interviews Clara (Anne Alvaro, "Danton") as an English teacher, but dismisses her when she doesn't produce a fun technique. Later, when he's dragged to a stage production of Berenice by his wife (his niece has a small part in the production), Castella is entranced by Clara in the lead role and begins to ardently pursue her, much to her dismay (she needs his English lesson money, but finds him boorish and uneducated). Meanwhile Bruno encounters Manie (Agnes Jaoui) tending the bar at a cafe and she informs him they once slept together. While they aren't successful rekindling the former flame (Bruno can't believe he didn't remember while Manie can't believe she did), Manie begins a relationship with Franck. Manie's also buddies with Clara and the rest of the theatrical troupe customers, closing the circle of the main cast. A subplot, where Angelique forces her interior decorating skills upon her sister-in-law Beatrice (Brigitte Catillon, "Artemisia"), most literally conveys the film's title.
This warm, funny, all too human story is about how people's myopia can lead them astray in their search for happiness. It's an assured, typically French (conversation heavy) piece of work by Jaoui and her costar Bacri. Jaoui gets top notch work from her entire cast. (Oddly, the central characters all resemble American stars with Jaoui herself looking like "Ally McBeal's" Courtney Thorne-Smith, Bacri like "L.A. Law's" Alan Rachins, Clara like Lily Tomlin and Bruno like Peter Riegart.) The film is beautifully editted (Herve de Luze), sometimes for comic effect (Flucky, Angelique's puffball little dog who 'always bites for a good reason,' gambolling about) or to jump across time while one character glides from one encounter to the next.
"The Taste of Others" is both heartbreaking and hopeful. Alvara's final smile is like something out of a constellation while Bruno's mysterious, solitary flute playing is given satisfying closure for both the character and the film. Small moments, even when anticipated (Castella placing his newly purchased modern painting amidst his wife's flowery, fluffy decor), bring large payoffs. "The Taste of Others" is a real treat.
A-
For more Reeling reviews visit www.reelingreviews.com
<EMAIL_ADDRESS><EMAIL_ADDRESS>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


Change Log: 2.089.0
Download D 2.089.0
released Nov 02, 2019
Compiler changes
- Deprecate allowing shadowing in foreach loops
- IsExpressions now correctly match combinations of const, inout, and shared.
- extern(C) declarations in template mixins now mangle as C symbols when mixed in at global scope
- The default linker for the Digital Mars tool chain is now optlink.exe
- New -Xcc compiler flag to address issue 6952
Runtime changes
Library changes
Dub changes
List of all bug fixes and enhancements in D 2.089.0.
Compiler changes
- Deprecate allowing shadowing in foreach loops
Up until this version it was allowed to shadow a variable in a foreach loop, although it is dissallowed in a normal for loop. This patch makes the behavior of the foreach loop consistent with the for loop one. To fix any issues encountered, rename the variable inside the foreach body that shadows the one from the upper scope.
- IsExpressions now correctly match combinations of const, inout, and shared.
With Bugzilla 20138 fixed, IsExpressions now correctly match combinations of the qualifiers const, inout, and shared.
 }
The second case will never be reached, because the first one now matches when T is shared const. To get the old behavior, switch the order.
- extern(C) declarations in template mixins now mangle as C symbols when mixed in at global scope
This was already true for string mixins, but since template mixins introduce a new scope, symbols inside them got mangled as D symbols. However, users often use extern(C) inside a mixin template to automatically generate boilerplate code that should be accessible from C.
// library code mixin template WasmEntryPoint() { extern(C) export void _start() { // boilerplate code } } mixin template UseGpuInsteadOfIntegratedGraphics() { extern(C) export uint NvOptimusEnablement = 0x00000001; extern(C) export int AmdPowerXpressRequestHighPerformance = 1; } // application code mixin WasmEntryPoint; mixin UseGpuInsteadOfIntegratedGraphics; static assert(_start.mangleof == "_start"); static assert(NvOptimusEnablement.mangleof == "NvOptimusEnablement");
Previously, _start would be mangled like _D9onlineapp8__mixin46_startUkZv and users had to manually add pragma(mangle, "_start") or use a string mixin instead. With the new behavior this is not necessary anymore for extern(C), as well as extern(Windows) and extern(Objective-C). extern(C++) remains unchanged since it already always mangles to C++, even in nested scopes.
There is a possibility this breaks code if you mix in different extern(C) declarations with the same name in the global scope of multiple modules.
import core.stdc.stdio; mixin template GenPrintCallback(string text) { extern(C): auto textLength = text.length; auto textPointer = text.ptr; void callBackOnly() { printf("%.*s\n", textLength, textPointer); } mixin(`auto `, text, ` = &callBackOnly;`); } mixin GenPrintCallback!"foo"; // in a different module: mixin GenPrintCallback!"bar";
In this case textLength, textPointer and callBackOnly will be defined multiple times, so the linker either picks one or raises and error. The solution is to not make variables extern(C) and make C callback functions anonymous:
import core.stdc.stdio; mixin template GenPrintCallback(string text) { auto textLength = text.length; // not below an extern(C): anymore auto textPointer = text.ptr; alias FunT = extern(C) void function(); enum FunT callBackOnly = () { printf("%.*s\n", textLength, textPointer); }; mixin(`auto `, text, ` = callBackOnly;`); }
- The default linker for the Digital Mars tool chain is now optlink.exe
The default linker when building with -m32 under Windows has been changed from link.exe to optlink.exe to avoid calling the wrong linker when both the Digital Mars tool chain and the Microsoft compiler tools are found in the PATH environment variable.
- New -Xcc compiler flag to address issue 6952
On POSIX, dmd passes -L-prefixed compiler flags through the linker driver (cc by default) to the linker (e.g. ld) by prepending them with -Xlinker. Therefore, it was not possible to pass flags directly to the linker driver.
This release adds a new compiler flag, -Xcc, which specifies a flag to pass to the linker driver. This switch has already existed in the LDC compiler for several releases. Some use cases for it would be -nostartfiles, -pthread, and -static, which can now be specified as -Xcc=-nostartfiles, -Xcc=-pthread, and -Xcc=-static respectively.
Note that it was previously also possible to specify linker driver options by setting the CC environment variable, e.g. CC='cc -pthread' dmd ..., or by setting the CC variable to point to a custom linker driver wrapper script. -Xcc improves on this through composability and better opportunities for integration into build systems.
See also:
Runtime changes
- Added core.atomic.atomicFetchAdd and core.atomic.atomicFetchSub.
Added core.atomic.atomicFetchAdd and core.atomic.atomicFetchSub to the atomic suite.
- Make wstatus predicates pure and @safe
The predicates that operate on the wstatus value reported by wait(2) are now marked pure and @safe, allowing them to be used in functions with those attributes.
Library changes
- Added std.traits.Unconst
std.traits.Unconst works like std.traits.Unqual, but removes only const, inout and immutable qualifiers from a type.
Dub changes
- Improved support for LDC, incl. cross-compilation
The ldc2 driver now supports
- some more command-line options (coverage, profiling, keeping stack frame),
- separate linking,
- cross-compilation by specifying the target triple (LDC -mtriple) as --arch, e.g., --arch=x86_64-pc-windows-msvc. Check out https://wiki.dlang.org/Cross-compiling_with_LDC for how to setup LDC.
- Lint command added
Dub supports now command lint, which will execute D-Scanner on the dub package. By default dub lint will execute style check. Import paths to dependent dub packages will be passed to D-Scanner.
dub lint
- Added SemVer compatibility operator "^"
Dub now supports version specifications of the form ^x.y.z. This corresponds to a "semver compatible version", ie. any version up from x.y.z with the same major number. If the major number is 0, only the same version matches. This corresponds to the versions listed on https://semver.org/ as compatible with the public API of the version given. ^x.y is equivalent to ^x.y.0.
List of all bug fixes and enhancements in D 2.089.0:
DMD Compiler regressions
- Bugzilla 20126: codegen reloads parameter from register when iasm changed the backing memory
- Bugzilla 20212: invalid debug info with enum type in library
DMD Compiler bugs
- Bugzilla 982: Codeview: symbols of enum type are declared integer
- Bugzilla 1104: CodeView: char is marked 0x20 (T_UCHAR) instead of 0x10 (T_CHAR)
- Bugzilla 2195: Variable shadowing in foreach is not detected and reported
- Bugzilla 2450: Error using operators from named template mixin
- Bugzilla 3831: writeln of a delegate typeid
- Bugzilla 4372: type of enumerator values reduced to base type in debug info
- Bugzilla 6952: Static Linking on Linux
- Bugzilla 13582: Deprecated modules imported from other deprecated modules shouldn't be warned about
- Bugzilla 16047: Range violation in setting multi-dimensional AA entries
- Bugzilla 19965: [DIP1000] Template allows to escape internal pointer
- Bugzilla 20012: extern(C) functions inside template mixins are not mangled as C functions
- Bugzilla 20089: FPU stack not cleaned up properly
- Bugzilla 20131: Bad codegen from inline asm LOCK CMPXCHG; possible REX prefix missing
- Bugzilla 20138: is expression not evaluating correctly?
- Bugzilla 20163: Deprecated import in string mixin does not output diagnostic message
- Bugzilla 20164: Importing deprecated module at function-local scope does not output diagnostic message
- Bugzilla 20181: [nightly 2019-08-29] internal compiler error when static foreach iterating property method of struct
- Bugzilla 20244: New dmd option -preview=noXlinker does not work on Linux to build a simple D application
- Bugzilla 20267: Error: string is used as a type - and similar “smart” error messages
DMD Compiler enhancements
- Bugzilla 809: Should be possible to convert lazy argument to delegate
- Bugzilla 1547: Default parameter values should use implicit static opCall
- Bugzilla 3004: [patch] Better handling of ignored pragmas
- Bugzilla 15118: Have dmd on Win32 look for optlink.exe instead of link.exe
- Bugzilla 18272: missing changelog entry and no doc for -gf (besides cryptic emit debug info for all referenced types)
- Bugzilla 18617: need __traits(deprecated, expr) to check whether an expression would trigger deprecation
Phobos regressions
- Bugzilla 20186: File size of "Hello, world" executable increased by 185KB
- Bugzilla 20295: std.zip: zip64 with 0xff bytes in end of central dir record do not work
- Bugzilla 20328: [REG 2.089 beta] deprecation message about Nullable.get in isInputRange
Phobos bugs
- Bugzilla 15230: Inconsistent std.range.SortedRange predicate checks
- Bugzilla 17705: std.math.isFinite cannot run at compile-time
- Bugzilla 19514: gcd(BigInt(2), BigInt(1)) fails
- Bugzilla 20027: std.zip susceptible to zip malware attacks
- Bugzilla 20145: Random unittest failures inf std.datetime.stopwatch
- Bugzilla 20205: std.math: Wrong result for abs(int.min)
- Bugzilla 20218: Checked format string takes infinite time for infinite ranges
- Bugzilla 20239: chameleon zip-file should be rejected by std.zip
- Bugzilla 20240: BitArray inconsistently preserves bits past length
- Bugzilla 20241: BitArray.bitsSet ignores length
- Bugzilla 20287: std.zip: Wrong compressed data
- Bugzilla 20301: std.regex.regex doesn't accept a const/immutable array of patterns
- Bugzilla 20302: std.functional.memoize doesn't accept a functions with const/immutable parameters
Phobos enhancements
- Bugzilla 20147: Enable comparison (==, >, >=, <=, <) between std.bigint.BigInt and floating point numbers
- Bugzilla 20159: Make std.math.scalbn work in CTFE
- Bugzilla 20192: Make std.math.isSubnormal work in CTFE
- Bugzilla 20196: Make std.math.isNormal work in CTFE
- Bugzilla 20199: Make std.math.frexp work in CTFE
- Bugzilla 20200: Make std.math.isPowerOf2 work for floating point numbers in CTFE
- Bugzilla 20201: Make std.math.scalbn pure
- Bugzilla 20202: Make std.math.signbit work in CTFE
- Bugzilla 20203: Make std.math.copysign work in CTFE
- Bugzilla 20242: BitArray constructor should not modify input data
Druntime regressions
- Bugzilla 20270: [REG2.087] Deadlock in garbage collection when running processes in parallel
Druntime bugs
- Bugzilla 13821: fiber + exception + win server 2012 failures
- Bugzilla 16380: no bindings for err.h
- Bugzilla 18643: Compiling error when combining CAS and numeric literal.
- Bugzilla 19481: Aborting from local/libphobos/libdruntime/core/sync/mutex.d(95) Error: pthread_mutex_init failed.
- Bugzilla 20155: Allocating a struct with dtor on the GC heap can produce false pointers
- Bugzilla 20214: GC: realloc can result in false pointers if address doesn't change
Druntime enhancements
- Bugzilla 8831: core.atomic: add compare-and-swap function with other result type
- Bugzilla 13826: Move volatileLoad/Store to core.volatile when the volatile keyword is removed
- Bugzilla 15007: core.atomic match C++11
- Bugzilla 20105: core.atomic 'cas' function is incomplete
- Bugzilla 20106: core.atomic : atomicFence doesn't accept MemoryOrder
- Bugzilla 20107: core.atomic : Memory order is missing keys
Contributors to this release (44)
A huge thanks goes to all the awesome people who made this release possible.
- 0xEAB
- aG0aep6G
- Andrej Mitrovic
- Bastiaan Veelo
- Bernhard Seckinger
- Berni
- Cameron Ross
- Chloé
- Dan Printzell
- devel
- dkorpel
- drug007
- Eduard Staniloiu
- Ernesto Castellotti
- Feldwor
- Harry T. Vennik
- Hiroki Noda
- Iain Buclaw
- Jon Degenhardt
- Jonathan Marler
- Les De Ridder
- look-at-me
- Manu Evans
- Martin Kinkelin
- Martin Nowak
- Mathias Lang
- Mathis Beer
- Mike Franklin
- MoonlightSentinel
- Nathan Sashihara
- Nicholas Wilson
- Petar Kirov
- Rainer Schuetze
- Razvan Nitu
- Robert burner Schadek
- Robert Schadek
- Sebastian Wilzbach
- Stefanos Baziotis
- stefanos-baziotis
- Tobias Pankrath
- Tomoya Tanjo
- Viktor
- Vladimir Panteleev
- Walter Bright


|
Graphitti
A toolkit/software architecture to ease creating high-performance neural network simulators
|
A structure maintains outgoing and edges list (forward map). More...
#include "BGTypes.h"
Go to the source code of this file.
Classes | |
| struct | EdgeIndexMap |
A structure maintains outgoing and edges list (forward map).
/
The structure maintains a list of outgoing edges (forward map) and edges list.
The outgoing edges list stores all outgoing edge indices relevant to a vertex. Edge indices are stored in the edge forward map (forwardIndex), and the pointer and length of the vertex i's outgoing edge indices are specified by outgoingSynapse_begin[i] and edgeCount[i] respectively. The incoming edges list is used in calcSummationMapDevice() device function to calculate sum of PSRs for each vertex simultaneously. The list also used in AllSpikingNeurons::advanceVertices() function to allow back propagation.
The edges list stores all edge indices. The list is referred in advanceEdgesDevice() device function.
Definition in file EdgeIndexMap.h.


History¶
0.3.2 (03.10.2019)¶
- Fixed
Discretizer
Properly addresses the cut-offs in the
transform
method, when not enough split points is provided.Adds
random_state
parameter for reproducibility.
- Fixed
- Added
fit_intercept
parameter to theVIFSelector
Extends functionality through the ability to control the model intercept. Statsmodels natively do not include the intercept in the linear regression so to properly execute the VIF selection it is recommended to add the intercept and aforementioned parameter provides this.
- Added
0.3.1 (09.07.2019)¶
- Fixed
MANIFEST.in
Includes
extras_requirements.json
to distribution package.
- Fixed
0.3 (09.07.2019)¶
- Initiated
xai
subpackage Creates base class
ExplainerMixin
for all explainers with the fit & explain convention (familiar from scikit-learn API).Releases, in the development version, the
xai.FeatureEffectExplainer
implementing calculation of Partial Dependence Plot, Individual Conditional Expectation and Marginal Plot.
- Initiated
- Optimized
Discretizer
Limits the transformations only to continuous variables by not taking into consideration categorical variables and leaving them unchanged.
- Optimized
- Created optional dependencies
Reduces the number of dependent packages by creating optional functionalities that require additional installation of the extra requirements.
- Renamed
collinearity_reduction
module Changes the module name to
feature_selection
to prepare it for future expansion in this direction.
- Renamed
- Modified
utils.is_numeric
Excludes from checking for numericity categorical pandas.Series.
Adds the ability to disable the attempt to project on a numeric type.
- Modified
- Moved
mathy
module Changes the location of
mathy
module toutils
subpackage. The new location is as follows:utils.mathy
.
- Moved
- Fixed missing values temporary imputation inside the
VIFSelector
Imputs the missing values before checking the NaN condition.
- Fixed missing values temporary imputation inside the
0.2.2 (19.06.2019)¶
- Added
PandasFeatureUnion
transformer Creates
feature_union
module withPandasFeatureUnion
transformer implemented that concatenates multiple transformers returning pandas.DataFrame.
- Added
- Fixed
preprocessing.ColumnProjector
corner case handling Checks whether the list of columns to be projected is non-empty, because when projecting an empty list of columns onto the category dtype, ValueError was raised.
- Fixed
- Expanded
TargetEncoding
docstring and unified types Adds notes on the use of the indicated encoder.
Projects to make the transformed dataframe’s columns being outputted as floating point type.
- Expanded
- Changed
utils.check_column_existance
name Repairs the typo in the function name by changing it to:
utils.check_column_existence
.
- Changed
- Expanded Sphinx documentation.
Adds example usage of
force_context_manager
function.
- Added
utils.check_continuity
function Creates function that asserts whether the variable is truly continuous at a given repetition threshold.
- Added
0.2.1 (31.03.2019)¶
- Fixed references to correct redirections
Repairs links to valid websites.
0.2 (31.03.2019)¶
- Changed the topology of the repository
Transfers the
column_parsing
module to the preprocessing subpackage and changes the name to a more adequate in terms of actual functionality.Creates
preprocessing.imputation
module used for imputation of missings.
- Added Sphinx documentation
Creates HTML documentation of the package with use of the Github Pages.
Standardizes the docstrings across the whole package.
Adds initial example of usage for the
paralytics.Discretizer
transformer.
- Created utilities for web scraping
New module
preprocessing.scraping
presenting the base class for scraping using the Selenium package.
- Fixed functionality of defective transformers
Transfers key operations of the
preprocessing.ColumnProjector
transformer to the fit method to avoid errors when applying to corner cases.Adapts the functionality of the
TargetEncoder
to be able to apply its transformations to entire DataFrame without first choosing only variables of the type: category.
- Initialized XAI subpackage
Initializes directory for the Explainable Artificial Intelligence subpackage which will be developed over the 0.2.X versions.
0.1 (24.03.2019)¶
- Initial package
Initializes the Paralytics package.


--- layout: post title: "The Tennis kata revisited" description: "When you need discriminated unions, but all you have are objects." date: 2021-08-03 10:45 UTC tags: [Software Design, Design Patterns, Functional Programming] --- {% include JB/setup %}
{{ page.description }}
After I learned that the Visitor design pattern is isomorphic to sum types (AKA discriminated unions), I wanted to try how easy it is to carry out a translation in practice. For that reason, I decided to translate my go-to F# implementation of the Tennis kata to C#, using the Visitor design pattern everywhere I'd use a discriminated union in F#.
The resulting C# code shows that it is, indeed, possible to 'mechanically' translate discriminated unions to the Visitor design pattern. Given that the Visitor pattern requires multiple interfaces and classes to model just a single discriminated union, it's no surprise that the resulting code is much more complex. As a solution to the Tennis kata itself, all this complexity is unwarranted. On the other hand, as an exercise in getting by with the available tools, it's quite illustrative. If all you have is C# (or a similar language), but you really need discriminated unions, the solution is ready at hand. It'll be complex, but not complicated.
The main insight of this exercise is that translating any discriminated union to a Visitor is, indeed, possible. You can best internalise such insights, however, if you actually do the work yourself. Thus, in this article, I'll only show a few highlights from my own exercise. I highly recommend that you try it yourself.
You can see my typical F# solution in great detail in my article series Types + Properties = Software. To be clear, there are many ways to implement the Tennis kata, even in F#, and the one shown in the articles is neither overly clever nor too boring. As implementations go, this one is quite pedestrian.
My emphasis with that kind of solution to the Tennis kata is on readability, correctness, and testability. Going for a functional architecture automatically addresses the testability concern. In F#, I endeavour to use the excellent type system to make illegal states unrepresentable. Discriminated unions are essential ingredients in that kind of design.
In F#, I'd typically model a Tennis game score as a discriminated union like this:
type Score = | Points of PointsData | Forty of FortyData | Deuce | Advantage of Player | Game of Player
That's not the only discriminated union involved in the implementation. Player
is also a discriminated union, and both PointsData
and FortyData
compose a third discriminated union called Point
:
type Point = Love | Fifteen | Thirty
Please refer to the older article for full details of the F# 'domain model'.
This was the sort of design I wanted to try to translate to C#, using the Visitor design pattern in place of discriminated unions.
In F# you must declare all types and functions before you can use them. To newcomers, this often looks like a constraint, but is actually one of F#'s greatest strengths. Since other types transitively use the Player
discriminated union, this is the first type you have to define in an F# code file:
type Player = PlayerOne | PlayerTwo
This one is fairly straightforward to translate to C#. You might reach for an enum
, but those aren't really type-safe in C#, since they're little more than glorified integers. Using a discriminated union is safer, so define a Visitor:
public interface IPlayerVisitor<T> { T VisitPlayerOne(); T VisitPlayerTwo(); }
A Visitor interface is where you enumerate the cases of the discriminated union - in this example player one and player two. You can idiomatically prefix each method with Visit
as I've done here, but that's optional.
Once you've defined the Visitor, you can declare the 'actual' type you're modelling: the player:
public interface IPlayer { T Accept<T>(IPlayerVisitor<T> visitor); }
Those are only the polymorphic types required to model the discriminated union. You also need to add concrete classes for each of the cases. Here's PlayerOne
:
public struct PlayerOne : IPlayer { public T Accept<T>(IPlayerVisitor<T> visitor) { return visitor.VisitPlayerOne(); } }
This is an example of the Visitor pattern's central double dispatch mechanism. Clients of the IPlayer
interface will dispatch execution to the Accept
method, which again dispatches execution to the visitor
.
I decided to make PlayerOne
a struct
because it holds no data. Perhaps I also ought to have sealed it, or, as Design Patterns likes to suggest, make it a Singleton.
Hardly surprising, PlayerTwo
looks almost identical to PlayerOne
.
Apart from a single-case discriminated union (which is degenerate), a discriminated union doesn't get any simpler than Player
. It has only two cases and carries no data. Even so, it takes four types to translate it to a Visitor: two interfaces and two concrete classes. This highlights how the Visitor pattern adds significant complexity.
And it only gets worse with more complex discriminated unions.
I'm going to leave the translation of Point
as an exercise. It's similar to the translation of Player
, but instead of two cases, it enumerates three cases. Instead, consider how to enumerate the cases of Score
. First, add a Visitor:
public interface IScoreVisitor<T> { T VisitPoints(IPoint playerOnePoint, IPoint playerTwoPoint); T VisitForty(IPlayer player, IPoint otherPlayerPoint); T VisitDeuce(); T VisitAdvantage(IPlayer advantagedPlayer); T VisitGame(IPlayer playerWhoWonGame); }
Notice that these methods take arguments, apart from VisitDeuce
. I could have made that member a read-only property instead, but for consistency's sake, I kept it as a method.
All the other methods take arguments that are, in their own right, Visitors.
In addition to the Visitor interface, you also need an interface to model the score itself:
public interface IScore { T Accept<T>(IScoreVisitor<T> visitor); }
This one defines, as usual, just a single Accept
method.
Since IScoreVisitor
enumerates five distinct cases, you must also add five concrete implementations of IScore
. Here's Forty
:
public struct Forty : IScore { private readonly IPlayer player; private readonly IPoint otherPlayerPoint; public Forty(IPlayer player, IPoint otherPlayerPoint) { this.player = player; this.otherPlayerPoint = otherPlayerPoint; } public T Accept<T>(IScoreVisitor<T> visitor) { return visitor.VisitForty(player, otherPlayerPoint); } }
I'm leaving other concrete classes as an exercise to the reader. All of them are similar, though, in that they all implement IScore
and unconditionally dispatch to 'their' method on IScoreVisitor
- Forty
calls VisitForty
, Points
calls VisitPoints
, and so on. Each concrete implementation has a distinct constructor, though, since what they need to dispatch to the Visitor differs.
Deuce
, being degenerate, doesn't have to explicitly define a constructor:
public struct Deuce : IScore { public T Accept<T>(IScoreVisitor<T> visitor) { return visitor.VisitDeuce(); } }
The C# compiler automatically adds a parameterless constructor when none is defined. An alternative implementation would, again, be to make Deuce
a Singleton.
In all, it takes seven types (two interfaces and five concrete classes) to model Score
- a type that requires only a few lines of code in F# (six lines in my code, but you could format it more densely if you want to compromise readability).
In order to calculate the score of a game, I also translated the score
function. I put that in an extension method so as to not 'pollute' the IScore
interface:
public static IScore BallTo(this IScore score, IPlayer playerWhoWinsBall) { return score.Accept(new ScoreVisitor(playerWhoWinsBall)); }
Given an IScore
value, there's little you can do with it, apart from calling its Accept
method. In order to do that, you'll need an IScoreVisitor
, which I defined as a private nested class:
private class ScoreVisitor : IScoreVisitor<IScore> { private readonly IPlayer playerWhoWinsBall; public ScoreVisitor(IPlayer playerWhoWinsBall) { this.playerWhoWinsBall = playerWhoWinsBall; } // Implementation goes here...
Some of the methods are trivial to implement, like VisitDeuce
:
public IScore VisitDeuce() { return new Advantage(playerWhoWinsBall); }
Most others are more complicated. Keep in mind that the method arguments (IPlayer
, IPoint
) are Visitors in their own right, so in order to do anything useful with them, you'll have to call their Accept
methods with a corresponding, specialised Visitor.
I quickly realised that this would become too tedious, even for an exercise, so I leveraged my knowledge that the Visitor pattern is isomorphic to a Church encoding. Instead of defining umpteen specialised Visitors, I just defined a generic Match
method for each Visitor-based object. I put those in extension methods as well. Here's the Match
method for IPlayer
:
public static T Match<T>(this IPlayer player, T playerOne, T playerTwo) { return player.Accept(new MatchVisitor<T>(playerOne, playerTwo)); }
The implementation is based on a private nested MatchVisitor
:
private class MatchVisitor<T> : IPlayerVisitor<T> { private readonly T playerOneValue; private readonly T playerTwoValue; public MatchVisitor(T playerOneValue, T playerTwoValue) { this.playerOneValue = playerOneValue; this.playerTwoValue = playerTwoValue; } public T VisitPlayerOne() { return playerOneValue; } public T VisitPlayerTwo() { return playerTwoValue; } }
This enables pattern matching, upon which you can implement other reusable methods, such as Other
:
public static IPlayer Other(this IPlayer player) { return player.Match<IPlayer>( playerOne: new PlayerTwo(), playerTwo: new PlayerOne()); }
It's also useful to be able to compare two players and return two alternative values depending on the result:
public static T Equals<T>( this IPlayer p1, IPlayer p2, T same, T different) { return p1.Match( playerOne: p2.Match( playerOne: same, playerTwo: different), playerTwo: p2.Match( playerOne: different, playerTwo: same)); }
You can add similar Match
and Equals
extension methods for IPoint
, which enables you to implement all the methods of the ScoreVisitor
class. Here's VisitForty
as an example:
public IScore VisitForty(IPlayer player, IPoint otherPlayerPoint) { return playerWhoWinsBall.Equals(player, same: new Game(player), different: otherPlayerPoint.Match<IScore>( love: new Forty(player, new Fifteen()), fifteen: new Forty(player, new Thirty()), thirty: new Deuce())); }
If playerWhoWinsBall.Equals(player
the implementation matches on same
, and returns new Game(player)
. Otherwise, it matches on different
, in which case it then has to Match
on otherPlayerPoint
to figure out what to return.
Again, I'll leave the remaining code as an exercise to the reader.
While all this code is written in C#, it's all pure functions. Thus, it's intrinsically testable. Knowing that, I could have added tests after writing the 'production code', but that's so boring, so I still developed this code base using test-driven development. Here's an example of a test:
[Theory, MemberData(nameof(Player))] public void TransitionFromDeuce(IPlayer player) { var sut = new Deuce(); var actual = sut.BallTo(player); var expected = new Advantage(player); Assert.Equal(expected, actual); }
I wrote all tests as properties for all. The above test uses xUnit.net 2.4.0. The Player
data source is a private MemberData
defined as a read-only property:
public static IEnumerable<object[]> Player { get { yield return new object[] { new PlayerOne() }; yield return new object[] { new PlayerTwo() }; } }
Other tests are defined in a likewise manner.
Once you've tried to solve problems with algebraic data types it can be frustrating to return to languages that don't have sum types (discriminated unions). There's no need to despair, though. Sum types are isomorphic to the Visitor design pattern, so it is possible to solve problems in the same way.
The resulting code can easily seem complex because a simple discriminated union translates to multiple C# files. Another option is to use Church encoding, but many developers who consider themselves object-oriented often balk at such constructs. When it comes to policy, the Visitor design pattern offers the advantage that it's described in Design Patterns. While it may be a bit of an underhanded tactic, it effectively deals with some teams' resistance to ideas originating in functional programming.
The exercise outlined in this article demonstrates that translating from algebraic data types to patterns-based object-oriented code is not only possible, but (once you get the hang of it) unthinking and routine. It's entirely automatable, so you could even imagine defining a DSL for defining sum types and transpiling them to C#.
But really, you don't have to, because such a DSL already exists.
Comments
The most annoying thing about the visitor pattern is that you can't get around declaring
interface IMyLovelyADT { R Accept<R>(IMyLovelyADTVisitor<R> visitor); }
and a separate class implementing this interface for each data variant. One may think that this interface is isomorphic toFunc<IMyLovelyADTVisitor<R>, R>
but it actually is not, look:Yes, all this typechecks and compiles, and you can even write
ShowBool
andBoolToInt
methods, but! You can't combine them:The first two methods are fine, but
CombineBoolFunctions
doesn't compile, because you can't passFunc<IBoolVisitor<R>, R>
to a method that expectsFunc<IBoolVisitor<string>, string>
. What if you try to makeShowBool
andBoolToInt
acceptFunc<IBoolVisitor<R>, R>
?That also doesn't work, for pretty much the same reason:
CombineBoolFunctions
compiles now, but notShowBool
orBoolToInt
. That's why you need a non-generic wrapper interfaceIMyLovelyADT
: it essentially does the same job as Haskell'sforall
, since generic types are not quite proper types in C#'s type system. Interestingly enough, upcoming Go 2's generics will not support this scenario: a method inside an interface will be able to use only the generic parameters that the interface itself declares.Joker_vD, thank you for writing; you explained that well.
I've recently been using C# 9's
record
feature to implement ADTs. For example:It's not as good as F# ADTs, but it's more concise than Visitors, works with
switch
pattern matching, has structural equality semantics, and I haven't found the downside yet.Tyrie, thank you for writing. I haven't tried that yet, but I agree that if this works, it's simpler.
Does
switch
pattern matching check exhaustiveness? What I means is: With sum types/discriminated unions, as well as with the Visitor pattern, the compiler can tell you if you haven't covered all cases. Does the C# compiler also do that withswitch
pattern matching?And do you need to include a
default
label?Looks like you found the flaw. The C# compiler tries, and it will block invalid cases, but it always wants a default case (either
It's also only a warning by default at compile time._
or both"null"
and"not null"
) when switching on one of these. It can't suggest the actually missing cases.


Go Home
Math and Computer Science Experts
This is is the list of all of the Math and Computer Science experts.
These are the people at Centre that are
(maybe)
Math and Computer Science experts
Expert
Image
Michael Bradshaw
Ian Cowan
Drew Meaux
Go Home


ADAGE: Download Sample Annotations Selectively
- Three fields (experiment, sample_name and
ml_data_source) will be always included, the others are optional.
- To exclude a field, click
in front of the field, or drag and drop from left to right.
- To add a field back, click
in front of the field, or drag and drop from right to left.
- To reorder a field in either box, drag and drop inside the box.
- When you are ready:
Included Annotation Fields:
-
1: experiment
-
2: sample_name
-
3: ml_data_source
-
{{$index + 4}}: {{item}}
Excluded Annotation Fields:


Class: Aws::SSM::Types::CommandFilter
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
self,
Struct
|
|
|
Instance Chain:
self,
::Aws::Structure ,
Struct
|
|
| Inherits: |
Struct
|
| Defined in: | gems/aws-sdk-ssm/lib/aws-sdk-ssm/types.rb |
Overview
Describes a command filter.
Pending
because the command hasn't run on the node yet.
Constant Summary
Instance Attribute Summary
-
#key ⇒ String
rw
The name of the filter.
-
#value ⇒ String
rw
The filter value.
Instance Method Summary
::Aws::Structure
- Included
| #to_hash | Alias for Aws::Structure#to_h. |
Instance Attribute Details
#key ⇒ String
(rw)
The name of the filter.
ExecutionStage
filter can't be used with the
ListCommandInvocations
operation, only with ListCommands
.
#value ⇒ String
(rw)
The filter value. Valid values for each filter key are as follows:
InvokedAfter: Specify a timestamp to limit your results. For example, specify
2021-07-07T00:00:00Z
to see a list of command executions occurring July 7, 2021, and later.InvokedBefore: Specify a timestamp to limit your results. For example, specify
2021-07-07T00:00:00Z
to see a list of command executions from before July 7, 2021.Status: Specify a valid command status to see a list of all command executions with that status. The status choices depend on the API you call.
The status values you can specify for ListCommands
are:
Pending
InProgress
Success
Cancelled
Failed
TimedOut
(this includes both Delivery and Execution time outs)AccessDenied
DeliveryTimedOut
ExecutionTimedOut
Incomplete
NoInstancesInTag
LimitExceeded
The status values you can specify for ListCommandInvocations
are:
Pending
InProgress
Delayed
Success
Cancelled
Failed
TimedOut
(this includes both Delivery and Execution time outs)AccessDenied
DeliveryTimedOut
ExecutionTimedOut
Undeliverable
InvalidPlatform
Terminated
- DocumentName: Specify name of the Amazon Web Services Systems
Manager document (SSM document) for which you want to see command
execution results. For example, specify
AWS-RunPatchBaseline
to see command executions that used this SSM document to perform security patching operations on managed nodes. - ExecutionStage: Specify one of the following values
(
ListCommands
operations only):
- DocumentName: Specify name of the Amazon Web Services Systems
Manager document (SSM document) for which you want to see command
execution results. For example, specify
Executing
: Returns a list of command executions that are currently still running.Complete
: Returns a list of command executions that have already completed.


Launch Timeline
Currently being tested. Skoot will be launched in mid 2015
We will contact you when Skoot will be ready for pre-orders
Formed with a unique passion and drive for outstanding products,
our team has a wide range of indrusty experience.
Thomas
Dario
Lillan
Iranga
Hugh
Alex
Salman
Currently being tested. Skoot will be launched in mid 2015
We will contact you when Skoot will be ready for pre-orders


--- layout: post title: Advice From 1st Grade for Presidential Debaters date: 2012-10-21 07:18:15.000000000 -07:00 type: post parent_id: '0' published: true pd: '' status: publish categories: - Classroom Talk - Tales From 1st Grade tags: - behavior - debate - manners author: login: k email: k@k display_name: mcary first_name: '' last_name: '' ---
The presidential debate is coming to Boca Raton, my hometown. In the midst of this truly exciting event I'd just like the candidates to remember a few ground rules that they probably learned in 1st grade.
1. Be kind.
2. Stay in your own personal space.
3. Tell the truth.
4. Take responsibility for your actions.
5. No interrupting each other.
I could go on but 5 rules is usually the perfect number to be able to follow in 1st Grade.


!%nick% what do you want to do ?
[scripts_services.villagemasters.Clan:CheckCreateClan|Create New Clan]
[npc_%objectId%_Link villagemaster/clan-03.htm|Increase Clan Level]
[scripts_services.villagemasters.Clan:CheckDissolveClan|Dissolve Clan]
[npc_%objectId%_Link villagemaster/clan-05.htm|Restore Clan]
[npc_%objectId%_learn_clan_skills|Acquire Clan Skill]
[npc_%objectId%_Link villagemaster/clan-12.htm|Create an Academy]
[npc_%objectId%_Link villagemaster/clan-13.htm|Create a Royal Guard Unit]
[npc_%objectId%_Link villagemaster/clan-14.htm|Create an Order of Knights Unit]
[npc_%objectId%_Link villagemaster/clan-15.htm|Assign new sub-unit leader]
[npc_%objectId%_Link villagemaster/clan-16.htm|Delegate Clan Leader]


{% extends "layout.html" %} {% include 'navigation_bar.html' %} {% block body %}
"The limits of my language are the limits of my mind. All I know is what I have words for."
"We hope you may like this phone."


---
layout: post
title: Functional programming in hardware..
date: '2011-01-11T22:00:00.000-08:00'
author: daryoush
tags:
modified_time: '2011-01-11T22:06:33.309-08:00'
blogger_id: tag:blogger.com,1999:blog-5623577383635787454.post-7228981299568558087
blogger_orig_url: http://onfp.blogspot.com/2011/01/functional-programming-in-hardware.html
---
On the tangible programming there is also the Conal Elliot talk that shows the same idea in Haskell


Login
Sign Up
Home
Tuberculosis
Malaria
Management
Trends
Intelligence
Ask anything, powered by AI
Type a question relating to tuberculosis.
{{ errorMessage }}
Ask!
{{ response }}
©2020 Tuber. All rights reserved.


Plugin Information |
|---|
View External Monitor Job Type on the plugin site for more information. |
Adds the ability to monitor the result of externally executed jobs.
Jenkins is useful for monitoring the non-interactive execution of processes, such as cron jobs, procmail, inetd-launched processes. Often those tasks are completely unmonitored (which makes it hard for you to notice when things go wrong), or they send e-mails constantly regardless of the success or failure (which results into the same situation as you'll quickly start ignoring them anyway.) Using Jenkins enables you to monitor a large number of such tasks with little overhead.
Setting up a project
Create a new job and choose "Monitor an external job" as the job type.
Monitoring an execution
For Debian / Ubuntu:
sudo apt-get install jenkins-external-job-monitor # obviously you should replace localhost with a FQDN if you want to run jobs from other machines. export JENKINS_HOME=http://@localhost:8080/ java -jar /usr/share/jenkins/external-job-monitor/java/jenkins-core-*.jar "external-build-job-name" command-to-run java -jar /usr/share/jenkins/external-job-monitor/java/jenkins-core-*.jar "external-build-test" ls -l
Once you set up a project, you can monitor an execution by running a command like this:
$ export<EMAIL_ADDRESS>$ java -jar /path/to/WEB-INF/lib/jenkins-core-*.jar "job name" <program arg1 arg2...>
For Windows:
> set<EMAIL_ADDRESS>> java -jar \path\to\WEB-INF\lib\jenkins-core-*.jar "job name" cmd.exe /c <program arg1 arg2...>
If your webserver extracts the jenkins.war
file when it deploys Jenkins then you may use the path directly to the WEB-INF/lib
directory and all other required jars will be found there. Otherwise you may extract these from the war file:
jenkins-core-*.jar remoting-*.jar ant-1.7.0.jar commons-io-1.4jar commons-lang-2.4.jar jna-posix-*.jar xstream-*.jar
All are found in the WEB-INF/lib
path inside the war file. As long as they are all in the same directory, the java -jar /path/to/jenkins-core-*.jar
command will find the other required jars.
- Note: Older versions of Jenkins (before 1.324) also require
winstone.jar
in order to run this command. This jar is found at the top level directory inside the war file, and must be manually added to the classpath (with-classpath
or-cp
) in the java command.
The JENKINS_HOME variable is used to locate the server Jenkins is running, so this must be set. Unless your Jenkins job has build permission for guest users, include the username:password@
portion of the URL, as seen in the examples above.
- Note: Authentication via username:password in JENKINS_HOME is added in Jenkins 1.324; with previous versions either grant anonymous build permission on the job, or use
curl
to post XML to Jenkins (see below).
You can copy jenkins-core-*.jar
and the other required jars to other machines if you want to monitor jobs that are run on a different machine.
stdout and stderr of the program will be recorded, and a non-zero exit code will be considered as a failure.
Monitoring cron jobs
To monitor a cron job, simply run the above set up from your cron script. To avoid receiving e-mails from cron daemon, you might want to write something like:
JENKINS_HOME=http://myserver.acme.org/path/to/jenkins/ 0 * * * * export JENKINS_HOME=$JENKINS_HOME; java -jar jenkins-core-*.jar "backup" backup.sh 2>&1 > /dev/null
Note that you can also move the cron job itself to Jenkins by using free-style software project, which would also allow you to manually execute the job outside the scheduled executions.
Submit a run programatically
The above command submits the execution and its result by sending XML to HTTP. This means you can submit an execution record from any program, as long as you follow the same XML format.
The format is explained below:
<run> <log encoding="hexBinary">...hex binary encoded console output...</log> <result>... integer indicating the error code. 0 is success and everything else is failure</result> <duration>... milliseconds it took to execute this run ...</duration> <displayName>... The name to be displayed rather than the build number ...</displayName> <description>... Description of the build ...</description> </run>
The duration
element is optional, since 1.429 displayName
and description
can also optionally be appended, these three elements can be in any order, but must appear after log and result in that order. Console output is hexBinary encoded so that you can pass in any control characters that are otherwise disallowed in XML.
The above XML needs to be sent to http://myhost/jenkins/job/_jobName_/postBuildResult
.
A simple example using curl would be (using no real data; the sequence 4142430A
encodes a console output of ABC
plus a trailing line feed symbol):
$ curl -X POST -d '<run><log encoding="hexBinary">4142430A</log><result>0</result><duration>2000</duration></run>' \ http://user:pass@myhost/jenkins/job/_jobName_/postBuildResult
Submit a run per CLI
The easiest option is for the execution can be submitted per CLI/ssh command. The gzipped log file can be transported through pipe:
$ cat result.log.gz | ssh jenkins set-external-build-result --display 7d552c4ba_Linux_tb21 --job buildbot --result 1 -b --duration 42 --log -
Sometimes build number is needed, as the calling program might need to put an URL to the submitted build. The CLI command above returns the new build number. The command above can be called programatically from an Java application. You can find a sample for it here.
Changelog
Version 1.7 (Jan 06, 2017)
- Allowing non-administrators to configure or delete jobs, given appropriate permissions.
- Japanese localization update.
Version 1.6 (July 26, 2016)
- JENKINS-36875 Empty screen when creating new jobs
- Follow up of JENKINS-35284
Version 1.5 (July 12, 2016)
- JENKINS-35284 Updated to the new Parent POM and fixed findbugs warnings.
- JENKINS-31162 Item categorization.
Version 1.4 (Nov 18, 2014)
- Updated item label to match new noun-oriented convention.
Version 1.3 (Nov 14, 2014)
- Refined where Build permission was checked to cover also the CLI command.
Version 1.2 (Aug 29, 2013)
- new CLI command (pull #5)
- JENKINS-19377 workaround for log rotation failure
- NPE fix
- translations


I'm an awesome n00b developer with a Diploma of Software Devlopment. Mostly self taught.
My goals are to comlete the Free Code Camp and CS50 courses. Long term I would like to study Computer Engineering or Computer Science, and work in different cities on exciting projects.
I create websites using HTML5, CSS3, Javascript, JQuery, PHP, and Drupal CMS. I am also proficient in Photoshop and Illustrator.
Happy to create and develop websites.
Feel free to enter your details below and I will give you a buzz!


_Drive_Me_Crazy_ (PG-13) * (out of ****)
As the press notes are so eager to announce, _Drive_Me_Crazy_ takes its title from "(You Drive Me) Crazy," the latest hit single by teen pop phenomenon Britney Spears. Since Fox went so far out of its way to retitle the film for the tune (the original name was the more fitting but Britney-inspiration-lacking _Next_to_You_), I will go through each of this teen comedy's painfully pedestrian plot paces as it relates to the song.
"Baby, I'm so into you/You got that something/What can I do?" In-crowd high school girl Nicole (Melissa Joan Hart) pines for star basketball stud Brad (Gabriel Carpenter). Similarly, her next-door neighbor (hence the film's original title), outcast bad boy Chase (Adrian Grenier) is so into his girlfriend Dulcie (Ali Larter).
"Baby, you spin me around/The earth is moving/But I can't feel the ground." Brad withdraws his invitation to Nicole to a big dance after he falls for a cheerleader. As coincidence would have it, around the same time, Dulcie gives Chase the heave-ho. Determined to win back their respective paramours, Nicole and Chase--now made over into a clean-cut popular guy--pretend to be a couple in order to incite jealousy in their exes.
 Of course, Nicole and Chase find that their false attraction has become real; as the song goes, in one scene, Chase, lost in thought about Nicole, stays up an entire night. With this easily foreseen turn of events comes the major flaw of the screenplay by Rob Thomas. The way these mismatched couple movies are supposed to work is that once the "ugly duckling" is made over, the other person falls for him/her--by seeing through the slick veneer and taking a liking to his/her "true self." In this film, Nicole takes a liking to Chase once he starts acting like the in-crowd and gradually erases all trace of his original personality. So much for not judging a book by its cover.
The film is not helped by Hart's accordingly shallow performance, which never once convinces that there's anything more to Nicole than her popular girl image. Even more ruinous is the complete lack of chemistry between her and Grenier, and Thomas and director John Schultz come up with nothing else to hold the audience's attention; certainly not the routine subplots, including nice guy Dave (Mark Webber)'s cyber romance and the scheming of Nicole's so-called best-friend Alicia (Susan May Pratt). _Drive_Me_Crazy_ feels like another lackluster youth entry into the new fall TV season, a point driven home by one touch that is amusing for all the wrong reasons: there are a number of basketball scenes in the film, and it's hard not to notice that on Brad's team and all the others they play, every single player is Caucasian.
I was expecting _Drive_Me_Crazy_ to follow the same tactic that _Dangerous_Minds_ used with its featured hit single, "Gangsta's Paradise"--that is, milk it to death and then some, exploiting the theatre's Dolby Digital sound system whenever possible to remind patrons exactly what brought them into the theatre. But it didn't; in fact, it got to the point where I was actually _waiting_ for the song to blare on the soundtrack. (For the record, it is played for a brief moment mid-film and then in its entirety during the end credits--the latter instance inspiring some teenybopper girls in the audience to sing along and dance in their seats.) The fact that I was waiting for a Britney Spears song to play speaks volumes about how incredibly boring this film is.
Michael Dequina<EMAIL_ADDRESS>|<EMAIL_ADDRESS>|<EMAIL_ADDRESS>|<EMAIL_ADDRESS>Mr. Brown's Movie Site: http://welcome.to/mrbrown CinemaReview Magazine: http://www.CinemaReview.com on ICQ: #25289934 | on AOL Instant Messenger: MrBrown23
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


2.1.2
- Performance improvements; no compatibility checking for simple selectors,
cached compatibility lookups, and early exit on compatibility mismatches
(thanks to @akx).
2.1.1
- Resolves an issue with
2.1.0
where browserslist
was not being installed
correctly on older Node versions.
2.1.0
- Rules are now merged based on supported browsers, which uses
browserslist
& caniuse-api
. The browsers should be supplied by the standard means of
configuring browserslist
, either using config files or
via environment variables.
2.0.11
- Resolves an issue where partially identical properties would be removed from
a rule erroneously; for example
color: #fff
would be removed if the other
rule contained background-color: #fff
.
2.0.10
- Replaces the internal list of vendor prefixes with the
vendors
module
(now, some less widely used prefixes are supported).
2.0.9
- Resolves an issue where the module would merge rules that had colliding
vendor prefixed properties and specification properties.
2.0.8
- Resolves an issue where selectors inside
@keyframes
would be merged,
causing a break in Safari.
2.0.7
- Resolves an issue where merging was not respecting property order, in cases
where both shorthand definitions and longhand definitions existed. Now,
these cases will not be merged (thanks to @11bit).
2.0.6
- Fixes an issue where forward merging was not checking that the merge candidate
was safe to merge (either contains no vendor prefixes,
or the same vendor prefixes).
2.0.5
- Replaced PostCSS’
cloneBefore
with custom clone method to handle null
values properly.
2.0.4
- Fixes a crash when cloning a
null
object property (thanks to @JMoxey).
2.0.3
- Fixed an issue where the module was incorrectly merging across
@font-face
at-rules.
2.0.2
- Fixed an issue where keyframes with the same name were being merged together
incorrectly.
2.0.1
- Fixed a crash when
rule.nodes
was not defined.
2.0.0
1.3.6
- Minor boost in performance with reduced stringify passes.
1.3.5
- Improves merging of adjacent rules with identical selectors.
1.3.4
- Fixes an issue where in some cases, non-adjacent rule merging was being
performed.
1.3.3
- Fixes an issue where the wildcard hack (
*zoom: 1
) was being propagated to
other properties erroneously.
- Better merging logic in some cases.
1.3.2
- Fixes a behaviour in which comment nodes were being processed by the
partial declaration merging logic.
1.3.1
- Fixes a behaviour in which rule adjacent forward nodes were not being type
checked before they were merged.
- Compatibility fixes for the PostCSS plugin guidelines.
1.3.0
- Better support for merging properties without the existance of a shorthand
override.
- Can now ‘merge forward’ adjacent rules as well as the previous ‘merge behind’
behaviour, leading to better compression.
1.2.2
- Fixed an issue where the plugin crashed if node.parent was undefined.
1.2.1
- Fixed a bug where media queries were being merged when their parameters were
different.
1.2.0
- Now uses the PostCSS
4.1
plugin API.
1.1.1
- Bugfix of last release, now difference is calculated in both directions.
1.1.0
- Less eager moving of properties, to avoid cases where moving a longhand
property would allow a shorthand property to override it.
1.0.0


The TBackend class is the base class for all back-end classes. It defines the bare minimum functionality required to implement a new back-end class. It provides simplified management of surface (re-)allocation and deallocation by implementing ChangeSize in a convenient way. New back-ends shall implement the abstract protected methods InitializeSurface and FinalizeSurface.
It also implements the necessary Assign method for switching back-ends while preserving the surface's contents.
[See also]


Mapzen's joining thousands of enthusiasts and professionals in Washington, D.C. to start off a new year of transportation research, planning, and advocacy.
It’s been an exciting year for Mapzen Search and for our users. So we thought today would be a great time to look back at some of the most exciting things you’re doing with Mapzen Search!
There are many things involved in Searching for Places. It’s not the easiest thing to do because, as it turns out, the world is a complex place. Today, we're tackling addresses and making sense of addresses.


Emotional intelligence (or EQ - Emotional Quotient) involves being aware of your own emotions and how they affect those around you. It also involves being aware of others emotions and being able to respond appropriately to them.
According to Daniel Goleman (author of 'Emotional Intelligence: Why It Can Matter More than IQ'), there are five categories of Emotional Intelligence:
Intelligence Quotient (IQ) is a score derived from a standardised test designed to measure intelligence, which represents cognitive ability as compared to the general population.
IQ may represent abilities including:
Emotional intelligence has been linked to success through qualities such as perseverance, self-control, self-confidence and the ability to get on well with others. Those with higher EQs are also better able to understand, express and regulate their own emotions - so it is no surprise that emotional intelligence has also been linked to increased happiness. The ability to relate to those around them also lends to the formation and maintenance of positive relationships. Individuals with a high EQ are also better able to adapt to change and work well in teams, and is a key distinguishing factor in those who excel in the workforce.


{{ (_("Welcome to the interactive dashboard, where you can control your bot via this easy-to-use interface. Choose a server that you have elevated permissions in below. If you don't see your server below, check to make sure that your server's owner has set roles with {command}").format(command="[p]dashboard roles create"))|safe }}


Boo Williams launches label, Boo Moonman Records, with new Outer Limits EP
The one-track 12-inch is out December 13th.
by Carlos HawthornBoo Williams is starting a record label.
The first release on Boo Moonman Records is Outer Limits, a one-track EP by Williams himself. Out next week on vinyl and digitally from December 13th, it'll be the Chicago artist's first outing of 2019.
Releases on the label will start at catalogue number 100 and work backwards "until it's time to start a new label," according to the press release.
Listen to a clip of "Outer Limits" over at Red Eye Records.
Tracklist
01. Outer Limits
Boo Moonman Records will release Outer Limits on December 13th, 2019.


Command-line and 'shiny' GUI implementation of the GenEst models for estimating bird and bat mortality at wind and solar power facilities, following Dalthorp, et al. (2018) <doi:10.3133/tm7A2>.
| Version: | 1.2.0 |
| Depends: | R (≥ 3.5.0) |
| Imports: | cbinom (≥ 1.3), corpus, DT, gsl, gtools, htmltools, lubridate, matrixStats, mvtnorm, Rcpp, shiny, shinyjs, sticky, survival, zip |
| LinkingTo: | Rcpp |
| Suggests: | knitr, rmarkdown, testthat |
| Published: | 2018-12-06 |
| Author: | Daniel Dalthorp [aut, cre], Juniper Simonis [aut], Lisa Madsen [aut], Manuela Huso [aut], Paul Rabie [aut], Jeffrey Mintz [aut], Robert Wolpert [aut], Jared Studyvin [aut], Franzi Korner-Nievergelt [aut] |
| Maintainer: | Daniel Dalthorp <ddalthorp at usgs.gov> |
| License: | CC0 |
| NeedsCompilation: | yes |
| Materials: | README |
| CRAN checks: | GenEst results |
| Reference manual: | GenEst.pdf |
| Vignettes: |
GenEst - 4. Graphic User Interface GenEst - 3. Command Line Walkthrough GenEst - 2. A Solar Example with Carcass Size GenEst - 1. A Tutorial with Wind Examples |
| Package source: | GenEst_1.2.0.tar.gz |
| Windows binaries: | r-devel: GenEst_1.2.0.zip, r-release: GenEst_1.2.0.zip, r-oldrel: not available |
| OS X binaries: | r-release: GenEst_1.2.0.tgz, r-oldrel: not available |
| Old sources: | GenEst archive |
Please use the canonical form https://CRAN.R-project.org/package=GenEst to link to this page.


Breen St Medical Clinic is a fully accredited medical practice, emphasizing the best care for our patients. Our General Practitioners (GP) and healthcare staff provide high quality patient-centered care for the Bendigo and Quarry Hill region.
We are open from Monday to Friday 9:00am - 5:00pm. Outside of these hours, we also offer an after-hours services during weekdays between 6:00pm-8:00am, Saturdays from midday, and all day Sunday and public holidays: call 137 425 for this service.
Our practice has many services to offer, inluding: general medical care, skin cancer checks, BP monitoring, glucose testing, antenatal/postnatal care, immunisations, and more.


This is the Debian GNU/Linux prepackaged version of Net-SNMP.
This package was put together by David Engel , from
sources obtained from http://net-snmp.sourceforge.net/.
It is now maintained by Jochen Friedrich .
As of version 5.4, the upstream sources contain non DFSG-free RFCs in the
doc directory which has been removed for Debian.
Copyright:
Various copyrights apply to this package, listed in various separate parts
below. Please make sure that you read all the parts. Up until 2001,
the project was based at UC Davis, and the first part covers all code
written during this time. From 2001 onwards, the project has been
based at SourceForge, and Networks Associates Technology, Inc hold the
copyright on behalf of the wider Net-SNMP community, covering all
derivative work done since then. An additional copyright section has
been added as Part 3 below also under a BSD license for the work
contributed by Cambridge Broadband Ltd. to the project since 2001.
An additional copyright section has been added as Part 4 below also
under a BSD license for the work contributed by Sun Microsystems, Inc.
to the project since 2003.
Code has been contributed to this project by many people over
the years it has been in development, and a full list of contributors
can be found in the README file under the THANKS section.
---- Part 1: CMU/UCD copyright notice: (BSD like) -----
Copyright 1989, 1991, 1992 by Carnegie Mellon University
Derivative Work - 1996, 1998-2000
Copyright 1996, 1998-2000 The Regents of the University of California
All Rights Reserved
Permission to use, copy, modify and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appears in all copies and
that both that copyright notice and this permission notice appear in
supporting documentation, and that the name of CMU and The Regents of
the University of California not be used in advertising or publicity
pertaining to distribution of the software without specific written
permission.
 IN NO EVENT SHALL CMU OR
THE REGENTS OF THE UNIVERSITY OF CALIFORNIA BE LIABLE FOR ANY SPECIAL,
INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
FROM THE LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
---- Part 2: Networks Associates Technology, Inc copyright notice (BSD) -----
Copyright (c) 2001-2003, Networks Associates Technology, Inc
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the Networks Associates Technology, Inc nor the
names of its contributors may be used to endorse or promote
products derived from this software without specific prior written
permission.

---- Part 3: Cambridge Broadband Ltd. copyright notice (BSD) -----
Portions of this code are copyright (c) 2001-2003, Cambridge Broadband Ltd.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* The name of Cambridge Broadband Ltd. may not be used to endorse or
promote products derived from this software without specific prior
written permission.

---- Part 4: Sun Microsystems, Inc. copyright notice (BSD) -----
Copyright © 2003 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
California 95054, U.S.A. All rights reserved.
Use is subject to license terms below.
This distribution may include materials developed by third parties.
Sun, Sun Microsystems, the Sun logo and Solaris are trademarks or registered
trademarks of Sun Microsystems, Inc. in the U.S. and other countries.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the Sun Microsystems, Inc. nor the
names of its contributors may be used to endorse or promote
products derived from this software without specific prior written
permission.

---- Part 5: Sparta, Inc copyright notice (BSD) -----
Copyright (c) 2003-2006, Sparta, Inc
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of Sparta, Inc nor the names of its contributors may
be used to endorse or promote products derived from this software
without specific prior written permission.

---- Part 6: Cisco/BUPTNIC copyright notice (BSD) -----
Copyright (c) 2004, Cisco, Inc and Information Network
Center of Beijing University of Posts and Telecommunications.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of Cisco, Inc, Beijing University of Posts and
Telecommunications, nor the names of their contributors may
be used to endorse or promote products derived from this software
without specific prior written permission.

---- Part 7: Fabasoft R&D Software GmbH & Co KG copyright notice (BSD) -----
Copyright (c) Fabasoft R&D Software GmbH & Co KG, 2003
<EMAIL_ADDRESS>Author: Bernhard Penz
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* The name of Fabasoft R&D Software GmbH & Co KG or any of its subsidiaries,
brand or product names may not be used to endorse or promote products
derived from this software without specific prior written permission.