This document provide note and summary of RFC 4686, Analysis of Threats Motivating DomainKeys Identified Mail (DKIM).
1. Introduction
The DKIM protocol defines a mechanism by which email messages can be cryptographically signed by Message Submission Agent (MSA) based on domain name. Recipients then can verify the signature by querying the signer’s domain directly to retrieve the appropriate public key, and thereby confirm that the message was attested to by a party in possession of the private key for the signing domain.
1.1. Terminology and Model
An administrative unit (AU) is the portion of the path of an email message that is under common administration.
The following diagram illustrates a typical usage flowchart for DKIM:
+---------------------------------+ | SIGNATURE CREATION | | (Originating or Relaying AU) | | | | Sign (Message, Domain, Key) | | | +---------------------------------+ | - Message (Domain, Key) | [Internet] | V +---------------------------------+ +-----------+ | SIGNATURE VERIFICATION | | | | (Relaying or Delivering AU) | | KEY | | | | QUERY +--->| Verify (Message, Domain, Key) | | | | | +-----------+ +----------------+----------------+ | - Verified Domain +-----------+ V - [Report] | SENDER | +----------------+----------------+ | SIGNING | | | | PRACTICES +--->| SIGNER EVALUATION | | QUERY | | | +-----------+ +---------------------------------+
DKIM operates entirely on the content (body and selected header fields) of the message.
The following definitions were used as rough criteria for scoring the attacks:
-
Impact:
-
High: Affects the verification of messages from an entire domain or multiple domains
-
Medium: Affects the verification of messages from specific users, Mail Transfer Agents (MTAs), and/or bounded time periods
-
Low: Affects the verification of isolated individual messages only
-
-
Likelihood:
-
High: All email users should expect this attack on a frequent basis
-
Medium: Email users should expect this attack occasionally; frequently for a few users
-
Low: Attack is expected to be rare and/or very infrequent
-
2. The Bad Actors
The bad actors are expected to have access to the following:
-
An extensive corpus of messages from domains they might wish to impersonate
-
Knowledge of the business aims and model for domains they might wish to impersonate
-
Access to public keys and associated authorization records associated with the domain
The bad actors are expected to be able to,
-
Submit messages to MTAs MSAs at multiple locations in the Internet
-
Construct arbitrary message header fields, including those claiming to be mailing lists, resenders, and other mail agents
-
Sign messages on behalf of domains under their control
-
Generate substantial numbers of either unsigned or apparently-signed messages that might be used to attempt a denial-of-service attack
-
Resend messages that may have been previously signed by the domain
-
Transmit messages using any envelope information desired
-
Act as an authorized submitter for messages from a compromised computer
-
Manipulation of IP routing. This could be used to submit messages from specific IP addresses or difficult-to-trace addresses, or to cause diversion of messages to a specific domain.
-
Limited influence over portions of DNS using mechanisms such as cache poisoning. This might be used to influence message routing or to falsify advertisements of DNS-based keys or signing practices.
-
Access to significant computing resources, for example, through the conscription of worm-infected "zombie" computers. This could allow the bad actor to perform various types of brute-force attacks.
-
Ability to eavesdrop on existing traffic, perhaps from a wireless network.
2.1. Location
The bad actors can reside inside the AU or outside the AU.
External bad actors usually try to send unwanted message to local mailbox, either without signature, with incorrect signature, or valid signature.
When the bad actors come from inside, DKIM is not directly effective because the signature is generated after the message has been submitted. One of defense againts internal bad actors is by applying authentication to MSA.
3. Representative Bad Acts
One of the most fundamental bad acts being attempted is the delivery of messages that are not intended to have been sent by the alleged originating domain.
3.1. Use of Arbitrary Identities
DKIM is not effective against the use of addresses controlled by bad actors.
Accreditation and reputation systems and locally-maintained whitelists and blacklists can be used to enhance the accountability of DKIM-verified addresses and/or the likelihood that signed messages are desirable.
3.2. Use of Specific Identities
DKIM is not effective against the domains controlled by bad actors.
DKIM is effective against the use of specific identities only when there is an expectation that such messages will, in fact, be signed. The primary means for establishing this is the use of Sender Signing Practices (SSP).
3.2.1. Exploitation of Social Relationships
DKIM could be effective in mitigating these acts by limiting the scope of origin addresses for which a valid signature can be obtained when sending the messages from other locations.
3.2.2. Identity-Related Fraud
DKIM is effective in defending against the fraudulent use of origin addresses on signed messages. When the published sender signing practices of the origin address indicate that all messages from that address should be signed, DKIM further mitigates against the attempted fraudulent use of the origin address on unsigned messages.
3.2.3. Reputation Attacks
It is for this reason that reputation systems must be based on an identity that is, in practice, fairly reliable.
3.2.4. Reflection Attacks
It is common and useful practice for a message’s return path not to correspond to the origin address. For these reasons, DKIM is not effective against reflection attacks.
4. Attacks on Message Signing
4.1. Attacks against Message Signatures
The following is a summary of postulated attacks against DKIM signatures:
| Attack Name | Impact | Likelihood |
|---|---|---|
Theft of private key for domain |
High |
Low |
Theft of delegated private key |
Medium |
Medium |
Private key recovery via side channel attack |
High |
Low |
Chosen message replay |
Low |
Medium/High |
Signed message replay |
Low |
High |
Denial-of-service attack against verifier |
High |
Medium |
Denial-of-service attack against key service |
High |
Medium |
Canonicalization abuse |
Low |
Medium |
Body length limit abuse |
Medium |
Medium |
Use of revoked key |
Medium |
Low |
Compromise of key server |
High |
Low |
Falsification of key service replies |
Medium |
Medium |
Publication of malformed key records and/or signatures |
High |
Low |
Cryptographic weaknesses in signature generation |
High |
Low |
Display name abuse |
Medium |
High |
Compromised system within originator’s network |
High |
Medium |
Verification probe attack |
Medium |
Medium |
Key publication by higher-level domain |
High |
Low |
4.2. Attacks against Message Signing Practices
The following is a summary of postulated attacks against signing practices:
| Attack Name | Impact | Likelihood |
|---|---|---|
Look-alike domain names |
High |
High |
Internationalized domain name abuse |
High |
High |
Denial-of-service attack against signing practices |
Medium |
Medium |
Use of multiple From addresses |
Low |
Medium |
Abuse of third-party signatures |
Medium |
High |
Falsification of Sender Signing Practices replies |
Medium |
Medium |
4.3. Other Attacks
| Attack Name | Impact | Likelihood |
|---|---|---|
Packet amplification attacks via DNS |
N/A |
Medium |
5. Derived Requirements
These requirements include:
-
The store for key and SSP records must be capable of utilizing multiple geographically-dispersed servers.
-
Key and SSP records must be cacheable, either by the verifier requesting them or by other infrastructure.
-
The cache time-to-live for key records must be specifiable on a per-record basis.
-
The signature algorithm identifier in the message must be one of the ones listed in a key record for the identified domain.
-
The algorithm(s) used for message signatures need to be secure against expected cryptographic developments several years in the future.


Assign Judges
Assign the judges for the given phases
Available Judges
-
{% for judge in judge_profiles %}
- {{ judge.display_name }} {% endfor%}
{% extends "admin/base_site.html" %} {% block title %}Assign Judges to Phases{% endblock title %} {% block content %}
Assign the judges for the given phases


climate change frames importance issue policy individuals public effects framing support change. {border-style political px;} security #ffffff;} Political United global Climate environmental human policy. scientific Fig assign effect Science beliefs national relative evidence frame frames, information opinion American examine treatment absolute control findings MTurk National affect partisan rights MS. Public Republicans Social experiment framed health ideology issue. likely policy, potential px; respondents studies {font-family ./j.-...x Environmental Note: Research Schuldt U.S. University Wiest attitudes font-size local null opinions regard use Change. Department Frame, International Petrovic Quarterly. Sciences Severson Source, States Table does double; hypothesis ideological importance, importance. increase issues mitigation number overall presented provided rankings science source suggest survey that, vary Aklin Available Coleman Democrats Global Hypothesis Kahan Myers Nations Nisbet SS. Science. Security Urpelainen Yarnal [cited additional associated border-color border-width certain change, conclude confidence consensus data different economic existing expect experimental exposed from: groups groups. indicate individuals’ likelihood mean participants people ratings results sample solid; sources study test threat treatments trust way {font-style {font-weight (DOCX) Academy Analysis. Click Data Health Horizontal LINK Leiserowitz March Politics. Review. States, according action assigned bars bold changing conservatives courier; differences em; file. focus greater group high impact impacts implications increasing independents, international intervals. issue, lead little natural outcome phenomenon policies pt;} question rank rate right risks samples security, shape shown significant sourced statistically suggests treatments, using warming


Deploy and Upgrade notes¶
3.2¶
Requires configurations for HATHITRUST_OAUTH_KEY and HATHITRUST_OAUTH_SECRET in order to use HathiTrust Data API for adding new items from HathiTrust.
New functionality for adding items from HathiTrust requires that Django application have permission to add new files and directories from the HathiTrust pairtree data stored in HATHI_DATA.
An update to Solr to include last modification dates for use in HTTP response headers requires a schema update and work reindex:
python manage.py solr_schema python manage.py index
3.0.1¶
- Title searching and boosting requires an update to
solrconfig.xml
. Before deploying new code,solr_conf/solconfig.xml
should be copied to the core’s conf directory and the core reloaded, or Solr restarted.
3.0¶
Solr field boosting requires an updated
solrconfig.xml
. Before deploying new code,solr_conf/solconfig.xml
should be copied to the core’s conf directory and the core reloaded, or Solr restarted.Revised Solr field names, updated collection search logic, and field boosting require the index to be cleared and reindexed:
python manage.py index --clear all --index none python manage.py solr_schema python manage.py index
Admin functionality for suppressing digitized works requires that the Django application have permission to delete files and directories from the HathiTrust pairtree data stored in HATHI_DATA.
Adds a new contributor page type, which allows selecting a list of people to display as project members and board members. If there is an existing contributor content page, it should be removed and replaced with a contributor page with the slug contributor.
0.11¶
GTAGS_ANALYTICS_ID
should include the property ID for the site, in order- to enable Google Analytics on non-preview pages.
0.10¶
Switching from Mezzanine to Wagtail requires a manual migration before installing the new version to avoid migration dependency conflicts:
python manage.py migrate pages zero
Wagtail provides predefined groups for Editor and Moderator. Users who were previously in the Content Editor group should be added to one of these, and the Content Editor group should be removed.
To benefit from new logic for cleaning metadata fields on import, the HathiTrust import should be run:
python manage.py hathi_import -v 0 --progress --update
Solr schema changes for this release require an updated
solrconfig.xml
with additional<lib/>
declarations. Copysolr_conf/solrconfig.xml
to the Solr core’s conf directory, and then restart the Solr server to enable the new library paths.Because this includes a Solr schema field type change that cannot be converted automatically, the index must be cleared before changing the schema, and then all content must be reindexed:
python manage.py index --clear all --index none python manage.py solr_schema python manage.py index
Run
python manage.py setup_site_pages
to create stub pages for all site content needed for main site navigation.
0.9¶
Configure a TECHNICAL_CONTACT email address in local settings to set a From header on requests made against the HathiTrust API.
Logic for populating local records from HathiTrust has changed; records need to be updated:
python manage.py hathi_import -v 0 --progress --update
This update requires a Solr schema update and a full reindex; due to changes in page indexing, pages must also be cleared from the Solr index:
python manage.py solr_schema python manage.py index --clear pages
0.8 Search filtering and highlighting¶
The Solr schema has been modified and must be updated:
python manage.py solr_schema
The Solr schema change requires reindexing content. It is recommended to clear out your Solr index and reindex everything:
python manage.py index
A fixture has been provided with site page content. Load via:
python manage.py loaddata ppa/archive/fixtures/pages.json
Note
The previous import and index script has been broken into two scripts. For a fresh install, run hathi_import as before to import content into the Django database and then run index to index work and page content into Solr.
0.5 Bulk Import and Simple Search¶
Configure your database in local settings and run migrations:
python manage.py migrate
Create a new Solr core with a basic configuration and managed schema:
solr create -c SOLR_CORE -n basic_configs
Configure the Solr core name and urls in local settings, and then update the schema:
python manage.py solr_schema
Bulk import assumes you already have a local copy of the desired HathiTrust materials retrieved via rsync (see https://www.hathitrust.org/datasets). Be sure to include pairtree version and prefix files in the rsync data. The path to the top directory of the local Hathi data should be configured in localsettings as HATHI_DATA. Once the data is present and the path is configured, run the import script (with optional progress bar):
python manage.py hathi_import python manage.py hathi_import -v 0 --progress


This point-of-use system delivers crystal clear ice from pure water. Combining technology, design and convenience, you get water purification and ice-making capability from a single source. Reverse Osmosis technology provides great tasting, pure water, so you also get great tasting beverages and ice.
Features
Touch Button Controlled
Hot, Cold and Ambient Water
Hot Water/Ice Locking function with touch sensor
Features Reverse Osmosis Filtration
Single spout delivery of cold, hot or ambient water
Single-touch continuous dispensing
Produces 44 lbs. of ice per day
Modern Streamlined Design
Leak Detector
Capacities
Hot Tank: 1.5 gal
Cold Tank 5.3 gal
Ice Storage: 8.8 lbs
Ice Production: 44 lbs. per day
Good for the Earth
Office H2O coolers have been shown to reduce carbon footprint by up to 55% compared to bottled water coolers.
Bottleless water coolers reduce plastic bottle contribution to landfills.


Feedback in DBC
October 19, 2014
Pairing and Sharing
I admit to being skeptical about the practice of paired programming. In the abstract, it makes sense. Problems in a system could be handled more quickly with two trained minds fully concentrating on it. Problems would be astronomically less likely to stall both people at the same time. It's a lot like two pilots operating a badass giant robot via a neural bridge, as in Pacific Rim:
...but I figured it was only applicable to really tough problem, whereas one solid programmer should (I thought) be able to work through a standard-issue problem solo.
I was wrong. The ability to not get stuck is one benefit to pairing. It's not the biggest. The biggest benefit is the transfer of skills between people.
So far my best pairs have been those where one person has an authoritative grasp on the problem, relative to the other. I say this having been on both sides of that dynamic. If you are the person who knows less--for instance, as I knew way less about CSS layout conventions--you get to go to school in an especially hands-on way. If you are the person who is taking the lead, you have the chance to solidify your skills by articulating them. In the process you figure out other, better ways of finishing a task.
That's where the key benefit of pairing has been for me so far. Pairing is a chance for me to crystalize my ideas about how to get things done.
I had expected it to be better overall to simply run through all of the DBC exercises myself--assuming that if I solved all the problems on my own, I'd be better off--but the reality is that talking things over and justifying my decisions to someone else is a stickier, and I suspect more efficient, way to learn.
Feedback; how did you feel when you read it?
So far I've been unsurprised by my feedback. My feedback has tracked with how I perceived my pairing sessions having gone. Fortunately, every session has felt positive and successful; even the most arduous. So overall my feedback has been helpful in, at best, an ambient sense.
Please don't take ambient as a pejorative. I do recognize the benefit to the feedback being such a routine part of the DBC program. It's good that I have a pattern of data that says I'm, apparently, doing pretty well. I suspect that the existence of such a pattern will mean that, should I do poorly for a session or two, I'll be able to recognize that without it being a crisis situation.
Based on the feedback you've received, how are you going to improve?
So far what I've taken away from pairing sessions is that it's best to agree to driver-navigator roles early. We can always switch, and it's easy to waffle on the subject, but the best course so far has been to agree on roles quickly and see where things go from there.
How was it to write feedback?
Writing feedback is easy for me; it helps that my pairs so far have always felt productive.
What was most difficult about writing feedback for your pair?
I suspect I'll have to really push myself to give someone truly bad feedback, even were it to be warranted. We've all given up a lot of time, money, and opportunity to be here, so I see myself being loathe to actively obstruct someone else's path through DBC. Yet: I think I'll be able to provide acute criticism if I have to, largely because I know that if my bad feedback is one outlier in the bulk of feedback we all give, I'll serve only as a critic, not a naysayer.


Test a package
npm.commands.test(packages, callback)
This runs a package's "test" script, if one was provided.
To run tests as a condition of installation, set the npat
config to
true.
npm can run tests on multiple packages. Just specify multiple packages
in the packages
parameter.


Course Outline: Introduction to Object Oriented Concepts – Procedural vs Object Oriented (OO) Programming, What is an Object – Object Data and Behavior, What is a Class – Attributes, Methods and Messages, Using UML to model a Class Diagram, Encapsulation and Data Hiding: Interfaces and Implementations, Inheritance: Superclasses and Subclasses, Abstraction and Is-a Relationships; Polymorphism, Composition: Abstraction and Has- a Relationships; How to think in terms of Objects – Interface vs Implementation, Abstract thinking when designing Interfaces and Giving the user minimal Interface possible; Object Oriented concepts in details – Constructors: Default constructor, When is a constructor called, Using multiple constructors and The design of constructors, Error handling and The concept of scope; The Anatomy of a Class – The Name, Comments, Attributes, Constructors, Accessors, Public Interface methods and Private implementation methods; Class Design Guidelines – Modeling Real World Systems, Identifying Public Interfaces, Designing Robust Constructors, Designing Error Handling to a Class, Documenting a Class and Using Comments, Designing with Reuse, Extensibility, Maintainability in Mind and Using Object Persistence; Designing with Objects – Proper Analysis, Statement of Work, Requirements Collection, Prototype of User Interface, Identifying the Classes, Determining the responsibilities of Each Class, Class Collaboration, Class Model to Describe the System; Mastering Inheritance – Reusing Objects, Generalization and Specialization, How Inheritance weakens Encapsulation; Frameworks and Reuse – When should we Reuse, Frameworks, Contract: Abstract Classes and Interfaces. Programming lessons - Introduction to Java – Java Virtual Machine (JVM) and Java Runtime (JRE), Java Development Kit (JDK), Integrated Development Environment (IDE) for Java, Java installation, Hello World! Program, compiling and running Java program, using Java classpath and JVM Architecture; Java syntax – Package, Import, Class, Fields, Methods, Constructors, Primitive data types, Strings and literal, Wrapper class, Nonexistence type: null. Object Oriented Programming (OOP) - The students will implement each of the object oriented concepts which are discussed in the class. Java features to support practical OOP – String Operations: String creations and operations, immutability property of String, String comparison and searching, String buffers and builders; Java I/O: Streams, Input and Output Stream, File, Path, Directory and tree; Exception handling: try and catch, checked exception vs unchecked exceptions, throw and throws, Common exception and User defined exceptions; Logger and Debugging: Logger, Log levels, Formatters and Filters, Logger Handlers and Manager, Configuration, Introduction to Debugging and Debugging Workflow.


New functions are provided to supplement the type manipulation functions that have address sized integer arguments. The new functions will use, in their Fortran binding, address-sized INTEGERs, thus solving problems currently encountered when the application address range is > 232. Also, a new, more convenient type constructor is provided to modify the lower bound and extent of a datatype. The deprecated functions replaced by the new functions here are listed in Section Deprecated Names and Functions .


Home
Logout
Health Survey
Gender
Female
Male
Other
What is your age?
On a scale of 1-10, how would you rate your day?
Do you have a history of mental illness?
Today's Date
Healthcare Clinic
Submit


Next: eq, Previous: not, Up: Data and Control Flow Dictionary
t.
The boolean representing true, and the canonical generalized boolean representing true. Although any object other than nil is considered true, t is generally used when there is no special reason to prefer one such object over another.
The symbol t is also sometimes used for other purposes as well. For example, as the name of a class, as a designator (e.g., a stream designator) or as a special symbol for some syntactic reason (e.g., in case and typecase to label the otherwise-clause).
t ⇒ T (eq t 't) ⇒ true (find-class 't) ⇒ #<CLASS T 610703333> (case 'a (a 1) (t 2)) ⇒ 1 (case 'b (a 1) (t 2)) ⇒ 2 (prin1 'hello t) |> HELLO ⇒ HELLO


-
mr crowley keyboard tab
Color Wheel Expert 4.2 Free Download | 5 Star Shareware
Jan 21, 2003 . Color Wheel Expert 4.2: An innovative and easy-to-use professional color utility application. . License: Shareware, OS: Win 95, 98, ME, NT, 2000, XP . color utility application designed specifically for web designers and artists, . Based on the color wheel and color harmony theory, the program enables .
http://www.5star-shareware.com/WebDev/HTML/color-wheel.html
-
water falls in georgia
Color Wheel Expert - Free Trial Download - Tucows Downloads
When you select a color, 12 harmonious colors are displayed in the . Visit author .tucows.com to learn how to submit your software to Tucows Downloads. User Name . Color Wheel Expert 4.2 . Hardware Requirements for Windows 7 . to learn all you all you need to know about upgrading from Windows XP to Windows 7 .
http://www.tucows.com/preview/194545
-
fort myers newspress gulf coasting
color wheel free download for Windows XP
color wheel free download for Windows XP - Free Colorwheel 1.2.2: Color picker, Color scheme creator., and much more programs. . Safe downloads and expert advice. Search Softonic. Search: Choose platform. All software, Windows, Web .
http://en.softonic.com/s/color-wheel/windows-xp
-
air hockey sand paper disks
ColorWheel Harmony - Download
More author programs. ColorWheel Harmony. - Create best looking color schemes for your web-sites with support for all the CSS Color Module Level 3 .
http://colorwheel-harmony.en.softonic.com/
-
university of wisconsin logo paper
Expert color by number pages trend: Color Expert, Color Wheel ...
Selection of software according to "Expert color by number pages" topic. . Color Wheel Expert V4.5 Designed specifically for web designers and artists, but user- friendly for . Color Wheel Expert runs on Windows 7/Vista/XP/NT/2000/ME/98.
http://windows.podnova.com/trends/expert_color_by_number_pages.html
-
roland xp-50 noise problem
Photoshop plugin color wheel - Podnova Windows Library
Selection of software according to "Photoshop plugin color wheel" topic. . Color Wheel Expert V4.5 Designed specifically for web designers and artists, but user- friendly for . Color Wheel Expert runs on Windows 7/Vista/XP/NT/2000/ME/98.
http://windows.podnova.com/trends/photoshop_plugin_color_wheel.html
-
des moines catholic schools
Download Color Harmony Pdf Software: Color4design, Aquarelle ...
It works in 4 popular Color spaces: RGB, HSB, CMYK and Lab. . Based on the Color wheel and Color Harmony theory, Color Wheel Expert enables . is a print -to-file driver that enables any Windows 2000/XP/2003/Vista application to create .
http://www.filebuzz.com/files/Color_Harmony_Pdf/1.html
-
super mario throwing a fireball
Free Colorwheel - Download
Apr 25, 2012 . Safe downloads and expert advice. . More author programs . Free Colorwheel is a free application for creating correct color schemes for .
http://colorwheel.en.softonic.com/
-
home
Free wheel daemon downloads
There are a lot of programs where the mouse wheel is not used . . Based on the color wheel and color harmony theory, Color Wheel Expert enables . Bandwidth Daemon is an advanced network bandwidth monitor for Windows 2000/XP.
http://www.2000shareware.com/downloads/wheel/daemon/
-
nine south africa provinces
Color Wheel - Generate HTML code from the online color wheel chart
Use the online color wheel to find the right color and HTML codes. Or, download the Color Wheel Expert software for a free trial of an easy-to-use but powerful program - find the right color . Requirements: Windows 95/98/NT/2000/ME/XP .
http://www.allprofitallfree.com/color-wheel3.html
-
how to add my own ringtones
Color Blindness Test for Android
Aug 29, 2012 . If you Want Color Blindness Test,It's good choice for you. . Color Wheel Expert runs on Windows 7/Vista/XP/NT/2000/ME/98. . share, and manage ideas and information using all four Office 2004 for Mac programs: Word, .
http://udm4.com/Android/Color_Blindness_Test-3370798
-
flowers above ear in hawaii means
Color Wheel Pro 2.0 - Color Wheel Pro is a software tool that helps ...
Oct 13, 2011 . Color Wheel Pro includes numerous presets for every type of color . Platforms : Windows NT, Windows 98, Windows XP, Windows 2000, . Based on the color wheel and color harmony theory, Color Wheel Expert enables .
http://www.fileflash.com/program/29864/
-
become a kid secret agent
Color Wheel Animated at Powerpoint Software Informer
Powerpoint Color Wheel Animated. software . Developer Tiger Color. ColorImpact helps you select harmonious colors for your designs. . Color Wheel Expert 4.2 . Animated Photo Album - A Free Add In for PowerPoint XP onwards.
http://powerpoint.software.informer.com/download-powerpoint-color-wheel-animated/
-
wholesale vending machine candy
Scania color wheel for ets - Recent - Informer Technologies, Inc.
Free download scania color wheel for ets Files at Software Informer - What is Elvan? YS Elvan is a . Expert,colour ,innovative, professional, utility, application.
http://softwaretopic.informer.com/scania-color-wheel-for-ets/
-
final cut pro interline deinterlace
Free colour wheel vector downloads
MagicTracer is a raster to vector conversion software for the Windows platform. . Based on the color wheel and color harmony theory, Color Wheel Expert enables users . Windows, Windows XP, Windows Vista and Microsoft are Registered .
http://www.2000shareware.com/downloads/colour/wheel/vector/
-
home foreclosures san diego auctions
Color Selection Software Informer: HVC Color Composer - An ...
Latest updates on everything Color Selection Software related. . Color Wheel Expert V4.5 Designed specifically for web designers and artists, but user-friendly for anyone who works with color. . color xp color selection delphi vcl » color xp .
http://color-selection.software.informer.com/
-
critics reviews of hbo soprano's finale
Free Ucom Wheel Downloads: Color Wheel Expert by Abitom ...
Based on the color wheel and color harmony theory, Color Wheel Expert enables users to . There are a lot of programs where the mouse wheel is not used or where it is used in some other way than you'd like. . For Windows 98/ME/XP/ 2000.
http://www.fileguru.com/apps/ucom_wheel
-
reverse polarity electric test meters
Download Color Wheel De Tv Philips Software: Color Wheel Pro ...
Based on the Color Wheel and Color harmony theory, Color Wheel Expert enables . The program is based on the Color Wheel used by artists for centuries.
http://www.filebuzz.com/findsoftware/Color_Wheel_De_Tv_Philips/1.html
-
biodex operation parts manual
Download Color Wheel Psd File - Color Wheel Psd File Software
Design Color Wheel was specifically developed for the professional HTML and Graphic . Color Wheel Expert enables users to select a color and then have 12 . 64-bit and 32-bit versions of Windows 7, Windows Vista, and Windows XP.
http://www.bluechillies.com/software/color-wheel-psd-file.html
-
blood diamond in america
Emoticon Palette Software Downloads
Products 1 - 30 . The Palette program is a tool for the creation of 'theoretically correct' melodies. . With Color Wheel Expert, it's easy to find analogous colors, triads, and . to use fractal exploration program for Windows, especially Windows XP.
http://www.download32.com/emoticon-palette-software.html


--- title: Stats Quiz sitetitle: Stats Quiz summary: "EC200 - Stats Quiz Prep (EC200) " date: "2020-09-13" # Academic page type (do not modify). type: docs menu: content: parent: Exam prep weight: 2 output: blogdown::html_page: toc: true pdf: /slides/ch3-slides.pdf thumb: /slides/ch3-slides.png ---
Make sure you are comfortable with the material chapter guides from Week 2 and Week 3. What does comfortable mean? That you’re familiar with definitions and terminology, and that you can work through problems at the level of PS1 and PS21.
There will not be a Stata component to the exam.
I recommend the following resources:
The exam will “go live” during our scheduled class time at 2:20pm on Monday, September 21. We will not meet :cry:. It will be “due” at 3:20pm the same day. I’ve added an extra 10 minutes for scanning/deep breaths, but I didn’t add more to avoid conflicts with those who have class at 3:30pm.
If you have a scheduling issue, please let me know ASAP.
You will be asked to work through about 3-4 multi-part questions worth 30 points total. There are multiple versions of the exam.
Work through on paper, then scan a copy and upload it onto Blackboard. Please use something like Adobe Scan so that you can submit just one file in pdf form. In the past, I’ve found that uploading photos yields huge files that are difficult to grade.
What should you make sure you include?
Here are the problems we covered/attempted to cover on Monday, September 14.
And a video with solutions! I recommend working through the problems on your own first.
{{< youtube q_NbBSDWcpI >}}Or, download a pdf of the solutions
Just to make sure we’re feeling good about logistics, I’ll post a “practice exam” on Blackboard that will go live at 3:30pm on Friday, September 18 (after our optional meet up) with one question. You can download it, work through the problem, scan it and upload your exam. It will be available until 11:59 pm Sunday.
I’ll review your submission and make sure there aren’t any problems with viewing your work.
Completion of the practice exam will be worth 2 points toward the exam (regardless of the accuracy of your answer).
Two things that may be useful to you:
Formula chart: Is this all the knowledge you need to know? Of course not! But, this should cover most of the formulas you might need.
Fall 2018 Practice Exam Solutions (I strongly recommend doing the practice exam in its entirety before reviewing the solutions)
If you haven’t noticed already, PS1 solutions are available on Blackboard already. PS2 solutions will be available by the end of day Friday on Blackboard↩


Production
Machine Name
Shift No
Date
Submit
S.NO
Part Start Time
Part End Time
Part Count
Actions
1
04-02-2020
08-02-2020
21


What did you find interesting?
I particularly enjoyed reading about the correlation between mindfulness and productivity, and the various habits of success.
Which will you experiment further with
I agree with the concept that confidence is just ability displayed and, in that sense, can be developed through our actions. This is something that I am hoping to take ownership of at Dev Academy. I am also keen to experiement with further meditation (wide interpretation of meditation) as I can see the merits of this, especially in terms of creativity and my ability to approach problems from different angles.


Choose valid Categories
Choose valid regions
Enter valid first name please
Enter valid last name please
Enter a 10 character password
Enter confirm password
Password does not match
Enter at least 10 character valid contact number
Enter valid address
Choose valid Ad
Image should be {{ad_width}}(width) * {{ad_height}}(height)
File Dimensions are not correct


Appointment scheduling is a critical tool to manage bookings, expand your customer base and, ultimately, increase your revenues. Browse through these informative articles on how to use appointmantic.com as a booking scheduler for your services..
Best hair salon scheduling software free for online appointment booking; preferred by hair salon owners and hair studio artists. Try today to track income and manage staff easily!
Try our online appointment booking software which is ideal for busy massage therapists balancing work and scheduling. Free to sign up, no credit card required!
The best free online meeting scheduling software, ideal for small business and startups owners who are looking to organize meeting appointments and scheduling.


Full name:
com.carrotgarden.maven:scalor-maven-plugin_2.12:<IP_ADDRESS>90502181145:format-main
Description:
Attributes:
| Name | Type | Since | Description |
|---|---|---|---|
| <buildMainResourceFolders> | Resource[] | - | Resource root folders to be included in compilation scope=main.
Normally uses src/main/resources. Absolute path.
Component reference: Resource .
Example custom entry in pom.xml:
<buildMainResourceFolders> <resource> <directory>${project.basedir}/src/main/resources</directory> </resource> <resource> <directory>${project.basedir}/target/generated/main/resources</directory> </resource> </buildMainResourceFolders> Default value is: ${project.build.resources}. User property is: scalor.buildMainResourceFolders. |
| <buildMainSourceJavaFolders> | File[] | - | Java source root folders to be included in compilation scope=main.
Absolute path. Normally uses src/main/java. Example
custom entry in pom.xml:
<buildMainSourceJavaFolders> <source>${project.build.sourceDirectory}</source> <source>${project.basedir}/target/generated/main/java</source> </buildMainSourceJavaFolders> Default value is: ${project.build.sourceDirectory}. User property is: scalor.buildMainSourceJavaFolders. |
| <buildMainSourceScalaFolders> | File[] | - | Scala source root folders to be included in compilation scope=main.
Absolute path. Normally uses src/main/scala. Example
custom entry in pom.xml:
<buildMainSourceScalaFolders> <source>${project.build.sourceDirectory}/../scala</source> <source>${project.basedir}/target/generated/main/scala</source> </buildMainSourceScalaFolders> Default value is: ${project.build.sourceDirectory}/../scala. User property is: scalor.buildMainSourceScalaFolders. |
| <formatJavaEnable> | boolean | - | Java formatter enablement parameter. Enable formatter invocation in
Maven. Enable formatter settings transfer in Eclipse. Default value is: true. User property is: scalor.formatJavaEnable. |
| <formatJavaSettings> | String | - | Java formatter (org.eclipse.jdt.core) configuration file. Relative
path to ${project.basedir}. Settings reference.
Normally located in Maven project configuration folder
.mvn. Applied to Eclipse JDT with goal=eclipse-format. Default value is: .mvn/format-java.xml. User property is: scalor.formatJavaSettings. |
| <formatLogChanged> | boolean | - | Enable logging of formatted changed files. Default value is: true. User property is: scalor.formatLogChanged. |
| <formatLogFailure> | boolean | - | Enable logging of files with formatting failures. Default value is: true. User property is: scalor.formatLogFailure. |
| <formatLogSuccess> | boolean | - | Enable logging of successful (both changed and not changed) files. Default value is: false. User property is: scalor.formatLogSuccess. |
| <formatLogTotal> | boolean | - | Enable logging of format invocation statistics: number of files in
each category: total, changed, success, failure. Default value is: true. User property is: scalor.formatLogTotal. |
| <formatLogTraces> | boolean | - | Enable logging of formatting failures stack traces. Default value is: false. User property is: scalor.formatLogTraces. |
| <formatParentLookup> | boolean | - | Enable format configuration file lookup in parents of multi-module
projects. In each project canditate, plugin will check for
existence of relevant files: formatJavaSettings, formatScalaSettings. Default value is: true. User property is: scalor.formatParentLookup. |
| <formatRegexJavaExclude> | String | - | Regular expression for Java source file discovery via exclusion by
match against absolute path. File match is defined as:
include.hasMatch && ! exclude.hasMatch.
Matches no files when empty by default. User property is: scalor.formatRegexJavaExclude. |
| <formatRegexJavaInclude> | String | - | Regular expression for Java source file discovery via inclusion by
match against absolute path. File match is defined as:
include.hasMatch && ! exclude.hasMatch.
Matches files with java extension by default. Default value is: .+[.]java. User property is: scalor.formatRegexJavaInclude. |
| <formatRegexScalaExclude> | String | - | Regular expression for Scala source file discovery via exclusion by
match against absolute path. File match is defined as:
include.hasMatch && ! exclude.hasMatch.
Matches no files when empty by default. User property is: scalor.formatRegexScalaExclude. |
| <formatRegexScalaInclude> | String | - | Regular expression for Scala source file discovery via inclusion by
match against absolute path. File match is defined as:
include.hasMatch && ! exclude.hasMatch.
Matches files with scala extension by default. Default value is: .+[.]scala. User property is: scalor.formatRegexScalaInclude. |
| <formatScalaEnable> | boolean | - | Scala formatter enablement parameter. Enable formatter invocation
in Maven. Enable formatter settings transfer in Eclipse. Default value is: true. User property is: scalor.formatScalaEnable. |
| <formatScalaSettings> | String | - | Scala formatter (scala-ide/scalariform) configuration file.
Relative path to ${project.basedir}. Settings reference.
Normally located in Maven project configuration folder
.mvn. Applied to Scala IDE with goal=eclipse-format. Default value is: .mvn/format-scala.props. User property is: scalor.formatScalaSettings. |
| <formatSourceEncoding> | String | - | Charset for source file reading and writing. Default value is: UTF-8. User property is: scalor.formatSourceEncoding. |
| <skip> | boolean | - | Force to skip all executions of this plugin. Default value is: false. User property is: scalor.skip. |
| <skipFormat> | boolean | - | Flag to skip goal execution: format-*. Default value is: false. User property is: scalor.skipFormat. |
| <skipLogReason> | boolean | - | Enable logging of reason for skipping an execution. Default value is: true. User property is: scalor.skipLogReason. |
| <skipPackagingList> | String[] | - | List of packaging types, which are skipped by this plugin. Default value is: pom. User property is: scalor.skipPackagingList. |
<buildMainResourceFolders> <resource> <directory>${project.basedir}/src/main/resources</directory> </resource> <resource> <directory>${project.basedir}/target/generated/main/resources</directory> </resource> </buildMainResourceFolders>
<buildMainSourceJavaFolders> <source>${project.build.sourceDirectory}</source> <source>${project.basedir}/target/generated/main/java</source> </buildMainSourceJavaFolders>
<buildMainSourceScalaFolders> <source>${project.build.sourceDirectory}/../scala</source> <source>${project.basedir}/target/generated/main/scala</source> </buildMainSourceScalaFolders>


Sebastian Brown
Software DeveloperSoftware Developer living in Newcastle Australia.
I like to make things and solve difficult problems.
Skills
I love to learn new ways to tackle problems and enjoy trying out new technologies.
These are some of the languages, frameworks and tools I work with.
Languages
Frameworks and Tools
Platforms
Projects
GitHub Actions Hackathon
For a bit of fun I submitted a repo to the GitHub Actions Hackathon. My submission allowes a GitHub Action to send a message to a Microsoft Teams channel.
I built this action to allow releases to Production from my team's repos to be announced in our MS Teams chat. I had fun building this app and recieved a prize pack of GitHub merch for my effort!
Event Management System
To help keep track of attendees to an event I helped run I created an Event Management System. The application uses a Firebase Real Tine Database to allow multiple users to view and edit the same data in real time.
You can give the app a try by visiting hbc-ems.netlify.appUni Timetable Exporter
My university's enrollment service did not offer any timetable export function.
This meant that students were forced to either take a screenshot of their class schedule or sign in to the enrollment service to check their class times.
A friend and I set about rectifying this by creating Uon Myhub Calendar Exporter a service that allows students to extract their class sechedule from the university enrollment service and add it to their calendar.
Raspberry Pi Robot
I made a robot! Using the chassy of an old remote control car, some servos, and a Raspberry Pi I was able to build an autonomous vehicle that can find it's way around obsticles.
Using an ultrasonic rangefinder, the robot is able to determine where obstacles are positioned and how far it is from them. It then tries to drive toward where there are the fewest obsticles.
I had loads of fun building the robot and experimenting with different behaviours
Education & Employment
-
Biscit Pty Ltd
Senior Software Developer
2020 - Current -
Forsythes Technology
Software Developer
2019 - 2020 -
Highway Group
Web Engineer
2017 - 2019During my time at Highway Group I was part of a team of programmers working to produce internal and consumer facing web services.
-
Forefront Productions
Production Assistant
2016 - 2020 -
University of Newcastle
Bachelor of Engineering (Honours) (Software)
2015 - 2019Graduated with Honours Class II Division 2
Awarded the Engineers Australia First Year Engineering Design Prize - Newcastle Division
-
Challenge Community Services
Technology Support Officer
2014 - 2015While working at Challenge I was part of a small team of IT professionals.
My duties included working in a help desk environment and contributing to IT infrastrustre projects.
-
Studio Two Architecture & Design
CAD Technician
2013 - 2014While working at Studio Two I was employed to generate 3D models and mesured drawings of buildings and designs.
-
Carinya Christian School Tamworth
2001 - 2013Higher School Certificate
School Certificate
Pssst! Scroll back to the top and click on my name. 🤫


•••
Stencilate
Logo, workmark and website design for a crafter of DIY onesie kits for baby showers.
View stencilate.com
•••
NOAA Ocean Explorer
A World Oceans Day campaign website and an online annual report designed for the National Oceanic and Atmospheric Administration.
View World Oceans Day site or annual report


{% from 'macros.html' import include_src %}
{% extends "base.html" %}
{% block title %}bagofcharsd3{% endblock %}
{% block head %}
{% endblock %}
{% block content %}
Bag of Chars
{% filter markdown %}
### Documentation
This demo shows the interaction between a frontend input field, a `Python`
backend that does a trivial analysis and a `d3.js` visualization of the
analysis. So when you change the phrase, the frontend sends a message to the
backend with the new input, which replies with a simple dictionary that is also
shown in the `log` view below and the `d3.js` visualization is updated.
{% endfilter %}


Loading...
Welcome to the home page of {{pageTitle}}
For registration or login please scan the QR code with your Identity Wallet
Welcome to the home page of {{pageTitle}}
For creating relation please scan the QR code with your Identity Wallet
{{doc.model.documentName}}
{{doc.model.hash}}
{{doc.model.documentName}}
{{doc.model.hash}}


 She tells him not to play with meat (animals that will be eaten).
Comments
1) This story is also called 'Regarding the Leveret', 2) See also The death of the !kau (a lizard of the genus Agama) and Remarks by |han≠kass'o on the preceding story (The death of the !kau), 3) This story is found in Book VIII-14
Contributors
|han≠kass'o (Klein Jantje) (VIII)
Date
10 – 12 July 1878
Categories
Keywords
prohibition (against 'playing' with meat) , prohibition (against making pets of animals that are eaten) , meat (animals that are eaten) , meat ('food-animals') , meat ('playing' with) , meat (prohibitions against playing with) , leveret (or hare) , leveret (and 'playing' with meat) , leveret (the killing of |han≠kass'o's pet) , pet (the killing of |han≠kass'o's) , pet (leveret or hare) , pet (and avoiding 'playing' with meat) , !khau (!kau) , !khau (the kochelman) , !khau (lizard of the genus Agama) , !khau (the occasion upon which the story of the !khau was related to |han≠kass'o by his mother) , Agama lizard (!khau or !kau) , Agama lizard (the kochelman) , Agama lizard (the occasion upon which the story of the !khau was related to |han≠kass'o by his mother) , lizard (Agama) , lizard (!khau or !kau) , lizard (the kochelman) , lizard (the occasion upon which the story of the !khau was related to |han≠kass'o by his mother) , |han≠kass'o ('s pet leveret) , |han≠kass'o (his personal history) , |han≠kass'o (the occasion upon which the story of the !khau was related to him by his mother |xabbi-an) , |han≠kass'o (the names of his relations) , personal history (|han≠kass'o's pet leveret is killed) , personal history (the occasion upon which the story of the !khau was related to him by his mother |xabbi-an) , food (avoidance behaviour relating to) , food (and 'playing' with meat) , hare (how |han≠kass'o's pet leveret was killed) , hare (the occasion upon which the story of the !khau was related to |han≠kass'o by his mother) , name (of |han≠kass'o's mother) , name (the occasion upon which the story of the !khau was related to |han≠kass'o by his mother) , animals (that are to be eaten must not be played with or taken as pets) , animals (the occasion upon which the story of the !khau was related to |han≠kass'o by his mother)
Story Pages
7206opp, 7207v-7213v, 7214


For more information about our activities, check out out fundraising page , education page, sponsorship pack (8MB), and assessment sheets (Word).


Interface CallableSql
-
public interface CallableSql
For making calls to stored procedures. Refer to the Ebean execute() method.Note that UpdateSql is designed for general DML sql and CallableSql is designed for use with stored procedures. Also note that when using this in batch mode the out parameters are not read.
Example 1:
String sql = "{call sp_order_mod(?,?)}"; CallableSql cs = DB.createCallableSql(sql); cs.setParameter(1, "turbo"); cs.registerOut(2, Types.INTEGER); DB.execute(cs); // read the out parameter Integer returnValue = (Integer) cs.getObject(2);
Example 2:
Includes batch mode, table modification information and label. Note that the label is really only to help people reading the transaction logs to identify the procedure called etc.String sql = "{call sp_insert_order(?,?)}"; CallableSql cs = DB.createCallableSql(sql); // Inform Ebean this stored procedure inserts into the // oe_order table and inserts + updates the oe_order_detail table. // this is used to invalidate objects in the cache cs.addModification("oe_order", true, false, false); cs.addModification("oe_order_detail", true, true, false); try (Transaction t = DB.beginTransaction()) { // execute using JDBC batching 10 statements at a time t.setBatchMode(true); t.setBatchSize(10); cs.setParameter(1, "Was"); cs.setParameter(2, "Banana"); DB.execute(cs); cs.setParameter(1, "Here"); cs.setParameter(2, "Kumera"); DB.execute(cs); cs.setParameter(1, "More"); cs.setParameter(2, "Apple"); DB.execute(cs); // DB.externalModification("oe_order",true,false,false); // DB.externalModification("oe_order_detail",true,true,false); t.commit(); }
- See Also:
SqlUpdate
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description CallableSql
addModification(String tableName, boolean inserts, boolean updates, boolean deletes)
Add table modification information to the TransactionEvent.CallableSql
bind(int position, Object value)
Bind a parameter that is bound as a IN parameter.boolean
executeOverride(CallableStatement cstmt)
You can extend this object and override this method for more advanced stored procedure calls.String
getLabel()
Return the label that is put into the transaction log.Object
getObject(int position)
Return an OUT parameter value.String
getSql()
Return the callable sql.int
getTimeout()
Return the statement execution timeout.CallableSql
registerOut(int position, int type)
Register an OUT parameter.CallableSql
setLabel(String label)
Set the label that is put in the transaction log.CallableSql
setParameter(int position, Object value)
Bind a positioned parameter (same as bind method).CallableSql
setSql(String sql)
Set the callable sql.CallableSql
setTimeout(int secs)
Set the statement execution timeout.
-
-
-
Method Detail
-
setLabel
CallableSql setLabel(String label)
Set the label that is put in the transaction log.
-
getTimeout
int getTimeout()
Return the statement execution timeout.
-
setTimeout
CallableSql setTimeout(int secs)
Set the statement execution timeout. Zero implies unlimited time.This is set to the underlying CallableStatement.
-
setSql
CallableSql setSql(String sql)
Set the callable sql.
-
bind
CallableSql bind(int position, Object value)
Bind a parameter that is bound as a IN parameter.position starts at value 1 (not 0) to be consistent with CallableStatement.
This is designed so that you do not need to set params in index order. You can set/register param 2 before param 1 etc.
- Parameters:
position
- the index position of the parameter.value
- the value of the parameter.
-
setParameter
CallableSql setParameter(int position, Object value)
Bind a positioned parameter (same as bind method).- Parameters:
position
- the index position of the parameter.value
- the value of the parameter.
-
registerOut
CallableSql registerOut(int position, int type)
Register an OUT parameter.Note that position starts at value 1 (not 0) to be consistent with CallableStatement.
This is designed so that you do not need to register params in index order. You can set/register param 2 before param 1 etc.
- Parameters:
position
- the index position of the parameter (starts with 1).type
- the jdbc type of the OUT parameter that will be read.
-
getObject
Object getObject(int position)
Return an OUT parameter value.position starts at value 1 (not 0) to be consistent with CallableStatement.
This can only be called after the CallableSql has been executed. When run in batch mode you effectively can't use this method.
-
executeOverride
boolean executeOverride(CallableStatement cstmt) throws SQLException
You can extend this object and override this method for more advanced stored procedure calls. This would be the case when ResultSets are returned etc.- Throws:
SQLException
-
addModification
CallableSql addModification(String tableName, boolean inserts, boolean updates, boolean deletes)
Add table modification information to the TransactionEvent.This would be similar to using the
DB.externalModification()
method. It may be easier and make more sense to set it here with the CallableSql.For UpdateSql the table modification information is derived by parsing the sql to determine the table name and whether it was an insert, update or delete.
-
-


health COVID- {border-style reproductive px;} #ffffff;} sexual care women px; {font-family access font-size global risk Elsevier Global Lancet collab: double; pregnant research Health border-color border-width gender including justice rights solid; {font-style {font-weight COVID-. abortion bold centre courier; em; essential girls, health, human policy pregnancy pt;} resource response services social


The 'dreadful game of rugby' that bored the world
by Josh RaiseyIt was a mixed bag last weekend for the rugby world, as the unbridled intensity of England’s win over the All Blacks in the Rugby World Cup semi-final fizzled into the tedium of a kicking battle 24 hours later in South Africa’s win over Wales.
The Springboks won the game 19-16, but it was far from an engrossing match. Both side’s reluctance to attack kept the game close on the scoreboard throughout and that at least ramped up the nerves, as there was something major at stake.
The same could not be said for a match played across the ocean.
In terms of boring matches, the semi-final was easily eclipsed by the Pro14 contest between Zebre and Leinster played the day before in Parma, in which the reigning champions won 3-0 in wet conditions.
The good thing that often comes from games like these is the reaction on social media, particularly as this may have been the first time that a team came away with more league points than they actually scored in the match.
Moreover, with Leicester City winning 9-0 the day before against Southampton in football’s Premier League, the fact that only a third of the points were scored the following day makes the game all the more bizarre.
This was the reaction:
Leinster are still missing all of their players who represented Ireland at the RWC. They will give the Pro14 side a major boost upon their return. Regardless, Leinster fans, and indeed all rugby fans, will hope that there will be no more games like this in the interim.
All Blacks Dane Coles couldn’t hold back the emotion in a Rugby World Cup press conference:


Multilayer Perceptron¶
Note
This section assumes the reader has already read through Classifying MNIST digits using Logistic Regression. Additionally, it uses the following new Theano functions and concepts: T.tanh, shared variables, basic arithmetic ops, T.grad, L1 and L2 regularization, floatX. If you intend to run the code on GPU also read GPU.
Note
The code for this section is available for download here.
The next architecture we are going to present using Theano is the single-hidden-layer Multi-Layer Perceptron (MLP). An MLP can be viewed as a logistic regression classifier where the input is first transformed using a learnt non-linear transformation \Phi. This transformation projects the input data into a space where it becomes linearly separable. This intermediate layer is referred to as a hidden layer. A single hidden layer is sufficient to make MLPs a universal approximator. However we will see later on that there are substantial benefits to using many such hidden layers, i.e. the very premise of deep learning. See these course notes for an introduction to MLPs, the back-propagation algorithm, and how to train MLPs.
This tutorial will again tackle the problem of MNIST digit classification.
The Model¶
An MLP (or Artificial Neural Network - ANN) with a single hidden layer can be represented graphically as follows:
Formally, a one-hidden-layer MLP is a function f: R^D \rightarrow R^L, where D is the size of input vector x and L is the size of the output vector f(x), such that, in matrix notation:
f(x) = G( b^{(2)} + W^{(2)}( s( b^{(1)} + W^{(1)} x))),
with bias vectors b^{(1)}, b^{(2)}; weight matrices W^{(1)}, W^{(2)} and activation functions G and s.
The vector h(x) = \Phi(x) = s(b^{(1)} + W^{(1)} x) constitutes the hidden layer. W^{(1)} \in R^{D \times D_h} is the weight matrix connecting the input vector to the hidden layer. Each column W^{(1)}_{\cdot i} represents the weights from the input units to the i-th hidden unit. Typical choices for s include tanh, with tanh(a)=(e^a-e^{-a})/(e^a+e^{-a}), or the logistic sigmoid function, with sigmoid(a)=1/(1+e^{-a}). We will be using tanh in this tutorial because it typically yields to faster training (and sometimes also to better local minima). Both the tanh and sigmoid are scalar-to-scalar functions but their natural extension to vectors and tensors consists in applying them element-wise (e.g. separately on each element of the vector, yielding a same-size vector).
The output vector is then obtained as: o(x) = G(b^{(2)} + W^{(2)} h(x)). The reader should recognize the form we already used for Classifying MNIST digits using Logistic Regression. As before, class-membership probabilities can be obtained by choosing G as the softmax function (in the case of multi-class classification).
To train an MLP, we learn all parameters of the model, and here we use Stochastic Gradient Descent with minibatches. The set of parameters to learn is the set \theta = \{W^{(2)},b^{(2)},W^{(1)},b^{(1)}\}. Obtaining the gradients \partial{\ell}/\partial{\theta} can be achieved through the backpropagation algorithm (a special case of the chain-rule of derivation). Thankfully, since Theano performs automatic differentiation, we will not need to cover this in the tutorial!
Going from logistic regression to MLP¶
This tutorial will focus on a single-hidden-layer MLP. We start off by implementing a class that will represent a hidden layer. To construct the MLP we will then only need to throw a logistic regression layer on top.
class HiddenLayer(object):
def __init__(self, rng, input, n_in, n_out, W=None, b=None,
activation=T.tanh):
"""
Typical hidden layer of a MLP: units are fully-connected and have
sigmoidal activation function. Weight matrix W is of shape (n_in,n_out)
and the bias vector b is of shape (n_out,).
NOTE : The nonlinearity used here is tanh
Hidden unit activation is given by: tanh(dot(input,W) + b)
:type rng: numpy.random.RandomState
:param rng: a random number generator used to initialize weights
:type input: theano.tensor.dmatrix
:param input: a symbolic tensor of shape (n_examples, n_in)
:type n_in: int
:param n_in: dimensionality of input
:type n_out: int
:param n_out: number of hidden units
:type activation: theano.Op or function
:param activation: Non linearity to be applied in the hidden
layer
"""
self.input = input
The initial values for the weights of a hidden layer i should be uniformly sampled from a symmetric interval that depends on the activation function. For tanh activation function results obtained in [Xavier10] show that the interval should be [-\sqrt{\frac{6}{fan_{in}+fan_{out}}},\sqrt{\frac{6}{fan_{in}+fan_{out}}}], where fan_{in} is the number of units in the (i-1)-th layer, and fan_{out} is the number of units in the i-th layer. For the sigmoid function the interval is [-4\sqrt{\frac{6}{fan_{in}+fan_{out}}},4\sqrt{\frac{6}{fan_{in}+fan_{out}}}]. This initialization ensures that, early in training, each neuron operates in a regime of its activation function where information can easily be propagated both upward (activations flowing from inputs to outputs) and backward (gradients flowing from outputs to inputs).
# `W` is initialized with `W_values` which is uniformely sampled
# from sqrt(-6./(n_in+n_hidden)) and sqrt(6./(n_in+n_hidden))
# for tanh activation function
# the output of uniform if converted using asarray to dtype
# theano.config.floatX so that the code is runable on GPU
# Note : optimal initialization of weights is dependent on the
# activation function used (among other things).
# For example, results presented in [Xavier10] suggest that you
# should use 4 times larger initial weights for sigmoid
# compared to tanh
# We have no info for other function, so we use the same as
# tanh.
if W is None:
W_values = numpy.asarray(
rng.uniform(
low=-numpy.sqrt(6. / (n_in + n_out)),
high=numpy.sqrt(6. / (n_in + n_out)),
size=(n_in, n_out)
),
dtype=theano.config.floatX
)
if activation == theano.tensor.nnet.sigmoid:
W_values *= 4
W = theano.shared(value=W_values, name='W', borrow=True)
if b is None:
b_values = numpy.zeros((n_out,), dtype=theano.config.floatX)
b = theano.shared(value=b_values, name='b', borrow=True)
self.W = W
self.b = b
Note that we used a given non-linear function as the activation function of the hidden layer. By default this is tanh
, but in many cases we might want
to use something else.
lin_output = T.dot(input, self.W) + self.b
self.output = (
lin_output if activation is None
else activation(lin_output)
)
If you look into theory this class implements the graph that computes
the hidden layer value h(x) = \Phi(x) = s(b^{(1)} + W^{(1)} x).
If you give this graph as input to the LogisticRegression
class,
implemented in the previous tutorial Classifying MNIST digits using Logistic Regression, you get the output
of the MLP. You can see this in the following short implementation of
the MLP
class.
class MLP(object):
"""Multi-Layer Perceptron Class
A multilayer perceptron is a feedforward artificial neural network model
that has one layer or more of hidden units and nonlinear activations.
Intermediate layers usually have as activation function tanh or the
sigmoid function (defined here by a ``HiddenLayer`` class) while the
top layer is a softmax layer (defined here by a ``LogisticRegression``
class).
"""
def __init__(self, rng, input, n_in, n_hidden, n_out):
"""Initialize the parameters for the multilayer perceptron
:type rng: numpy.random.RandomState
:param rng: a random number generator used to initialize weights
:type input: theano.tensor.TensorType
:param input: symbolic variable that describes the input of the
architecture (one minibatch)
:type n_in: int
:param n_in: number of input units, the dimension of the space in
which the datapoints lie
:type n_hidden: int
:param n_hidden: number of hidden units
:type n_out: int
:param n_out: number of output units, the dimension of the space in
which the labels lie
"""
# Since we are dealing with a one hidden layer MLP, this will translate
# into a HiddenLayer with a tanh activation function connected to the
# LogisticRegression layer; the activation function can be replaced by
# sigmoid or any other nonlinear function
self.hiddenLayer = HiddenLayer(
rng=rng,
input=input,
n_in=n_in,
n_out=n_hidden,
activation=T.tanh
)
# The logistic regression layer gets as input the hidden units
# of the hidden layer
self.logRegressionLayer = LogisticRegression(
input=self.hiddenLayer.output,
n_in=n_hidden,
n_out=n_out
)
In this tutorial we will also use L1 and L2 regularization (see L1 and L2 regularization). For this, we need to compute the L1 norm and the squared L2 norm of the weights W^{(1)}, W^{(2)}.
# L1 norm ; one regularization option is to enforce L1 norm to
# be small
self.L1 = (
abs(self.hiddenLayer.W).sum()
+ abs(self.logRegressionLayer.W).sum()
)
# square of L2 norm ; one regularization option is to enforce
# square of L2 norm to be small
self.L2_sqr = (
(self.hiddenLayer.W ** 2).sum()
+ (self.logRegressionLayer.W ** 2).sum()
)
# negative log likelihood of the MLP is given by the negative
# log likelihood of the output of the model, computed in the
# logistic regression layer
self.negative_log_likelihood = (
self.logRegressionLayer.negative_log_likelihood
)
# same holds for the function computing the number of errors
self.errors = self.logRegressionLayer.errors
# the parameters of the model are the parameters of the two layer it is
# made out of
self.params = self.hiddenLayer.params + self.logRegressionLayer.params
As before, we train this model using stochastic gradient descent with
mini-batches. The difference is that we modify the cost function to include the
regularization term. L1_reg
and L2_reg
are the hyperparameters
controlling the weight of these regularization terms in the total cost function.
The code that computes the new cost is:
# the cost we minimize during training is the negative log likelihood of
# the model plus the regularization terms (L1 and L2); cost is expressed
# here symbolically
cost = (
classifier.negative_log_likelihood(y)
+ L1_reg * classifier.L1
+ L2_reg * classifier.L2_sqr
)
We then update the parameters of the model using the gradient. This code is
almost identical to the one for logistic regression. Only the number of
parameters differ. To get around this ( and write code that could work
for any number of parameters) we will use the list of parameters that
we created with the model params
and parse it, computing a gradient
at each step.
# compute the gradient of cost with respect to theta (sorted in params)
# the resulting gradients will be stored in a list gparams
gparams = [T.grad(cost, param) for param in classifier.params]
# specify how to update the parameters of the model as a list of
# (variable, update expression) pairs
# given two lists of the same length, A = [a1, a2, a3, a4] and
# B = [b1, b2, b3, b4], zip generates a list C of same size, where each
# element is a pair formed from the two lists :
# C = [(a1, b1), (a2, b2), (a3, b3), (a4, b4)]
updates = [
(param, param - learning_rate * gparam)
for param, gparam in zip(classifier.params, gparams)
]
# compiling a Theano function `train_model` that returns the cost, but
# in the same time updates the parameter of the model based on the rules
# defined in `updates`
train_model = theano.function(
inputs=[index],
outputs=cost,
updates=updates,
givens={
x: train_set_x[index * batch_size: (index + 1) * batch_size],
y: train_set_y[index * batch_size: (index + 1) * batch_size]
}
)
Putting it All Together¶
Having covered the basic concepts, writing an MLP class becomes quite easy. The code below shows how this can be done, in a way which is analogous to our previous logistic regression implementation.
"""
This tutorial introduces the multilayer perceptron using Theano.
A multilayer perceptron is a logistic regressor where
instead of feeding the input to the logistic regression you insert a
intermediate layer, called the hidden layer, that has a nonlinear
activation function (usually tanh or sigmoid) . One can use many such
hidden layers making the architecture deep. The tutorial will also tackle
the problem of MNIST digit classification.
.. math::
f(x) = G( b^{(2)} + W^{(2)}( s( b^{(1)} + W^{(1)} x))),
References:
- textbooks: "Pattern Recognition and Machine Learning" -
Christopher M. Bishop, section 5
"""
from __future__ import print_function
__docformat__ = 'restructedtext en'
import os
import sys
import timeit
import numpy
import theano
import theano.tensor as T
from logistic_sgd import LogisticRegression, load_data
# start-snippet-1
class HiddenLayer(object):
def __init__(self, rng, input, n_in, n_out, W=None, b=None,
activation=T.tanh):
"""
Typical hidden layer of a MLP: units are fully-connected and have
sigmoidal activation function. Weight matrix W is of shape (n_in,n_out)
and the bias vector b is of shape (n_out,).
NOTE : The nonlinearity used here is tanh
Hidden unit activation is given by: tanh(dot(input,W) + b)
:type rng: numpy.random.RandomState
:param rng: a random number generator used to initialize weights
:type input: theano.tensor.dmatrix
:param input: a symbolic tensor of shape (n_examples, n_in)
:type n_in: int
:param n_in: dimensionality of input
:type n_out: int
:param n_out: number of hidden units
:type activation: theano.Op or function
:param activation: Non linearity to be applied in the hidden
layer
"""
self.input = input
# end-snippet-1
# `W` is initialized with `W_values` which is uniformely sampled
# from sqrt(-6./(n_in+n_hidden)) and sqrt(6./(n_in+n_hidden))
# for tanh activation function
# the output of uniform if converted using asarray to dtype
# theano.config.floatX so that the code is runable on GPU
# Note : optimal initialization of weights is dependent on the
# activation function used (among other things).
# For example, results presented in [Xavier10] suggest that you
# should use 4 times larger initial weights for sigmoid
# compared to tanh
# We have no info for other function, so we use the same as
# tanh.
if W is None:
W_values = numpy.asarray(
rng.uniform(
low=-numpy.sqrt(6. / (n_in + n_out)),
high=numpy.sqrt(6. / (n_in + n_out)),
size=(n_in, n_out)
),
dtype=theano.config.floatX
)
if activation == theano.tensor.nnet.sigmoid:
W_values *= 4
W = theano.shared(value=W_values, name='W', borrow=True)
if b is None:
b_values = numpy.zeros((n_out,), dtype=theano.config.floatX)
b = theano.shared(value=b_values, name='b', borrow=True)
self.W = W
self.b = b
lin_output = T.dot(input, self.W) + self.b
self.output = (
lin_output if activation is None
else activation(lin_output)
)
# parameters of the model
self.params = [self.W, self.b]
# start-snippet-2
class MLP(object):
"""Multi-Layer Perceptron Class
A multilayer perceptron is a feedforward artificial neural network model
that has one layer or more of hidden units and nonlinear activations.
Intermediate layers usually have as activation function tanh or the
sigmoid function (defined here by a ``HiddenLayer`` class) while the
top layer is a softmax layer (defined here by a ``LogisticRegression``
class).
"""
def __init__(self, rng, input, n_in, n_hidden, n_out):
"""Initialize the parameters for the multilayer perceptron
:type rng: numpy.random.RandomState
:param rng: a random number generator used to initialize weights
:type input: theano.tensor.TensorType
:param input: symbolic variable that describes the input of the
architecture (one minibatch)
:type n_in: int
:param n_in: number of input units, the dimension of the space in
which the datapoints lie
:type n_hidden: int
:param n_hidden: number of hidden units
:type n_out: int
:param n_out: number of output units, the dimension of the space in
which the labels lie
"""
# Since we are dealing with a one hidden layer MLP, this will translate
# into a HiddenLayer with a tanh activation function connected to the
# LogisticRegression layer; the activation function can be replaced by
# sigmoid or any other nonlinear function
self.hiddenLayer = HiddenLayer(
rng=rng,
input=input,
n_in=n_in,
n_out=n_hidden,
activation=T.tanh
)
# The logistic regression layer gets as input the hidden units
# of the hidden layer
self.logRegressionLayer = LogisticRegression(
input=self.hiddenLayer.output,
n_in=n_hidden,
n_out=n_out
)
# end-snippet-2 start-snippet-3
# L1 norm ; one regularization option is to enforce L1 norm to
# be small
self.L1 = (
abs(self.hiddenLayer.W).sum()
+ abs(self.logRegressionLayer.W).sum()
)
# square of L2 norm ; one regularization option is to enforce
# square of L2 norm to be small
self.L2_sqr = (
(self.hiddenLayer.W ** 2).sum()
+ (self.logRegressionLayer.W ** 2).sum()
)
# negative log likelihood of the MLP is given by the negative
# log likelihood of the output of the model, computed in the
# logistic regression layer
self.negative_log_likelihood = (
self.logRegressionLayer.negative_log_likelihood
)
# same holds for the function computing the number of errors
self.errors = self.logRegressionLayer.errors
# the parameters of the model are the parameters of the two layer it is
# made out of
self.params = self.hiddenLayer.params + self.logRegressionLayer.params
# end-snippet-3
# keep track of model input
self.input = input
def test_mlp(learning_rate=0.01, L1_reg=0.00, L2_reg=0.0001, n_epochs=1000,
dataset='mnist.pkl.gz', batch_size=20, n_hidden=500):
"""
Demonstrate stochastic gradient descent optimization for a multilayer
perceptron
This is demonstrated on MNIST.
:type learning_rate: float
:param learning_rate: learning rate used (factor for the stochastic
gradient
:type L1_reg: float
:param L1_reg: L1-norm's weight when added to the cost (see
regularization)
:type L2_reg: float
:param L2_reg: L2-norm's weight when added to the cost (see
regularization)
:type n_epochs: int
:param n_epochs: maximal number of epochs to run the optimizer
:type dataset: string
:param dataset: the path of the MNIST dataset file from
http://www.iro.umontreal.ca/~lisa/deep/data/mnist/mnist.pkl.gz
"""
datasets = load_data(dataset)
train_set_x, train_set_y = datasets[0]
valid_set_x, valid_set_y = datasets[1]
test_set_x, test_set_y = datasets[2]
# compute number of minibatches for training, validation and testing
n_train_batches = train_set_x.get_value(borrow=True).shape[0] // batch_size
n_valid_batches = valid_set_x.get_value(borrow=True).shape[0] // batch_size
n_test_batches = test_set_x.get_value(borrow=True).shape[0] // batch_size
######################
# BUILD ACTUAL MODEL #
######################
print('... building the model')
# allocate symbolic variables for the data
index = T.lscalar() # index to a [mini]batch
x = T.matrix('x') # the data is presented as rasterized images
y = T.ivector('y') # the labels are presented as 1D vector of
# [int] labels
rng = numpy.random.RandomState(1234)
# construct the MLP class
classifier = MLP(
rng=rng,
input=x,
n_in=28 * 28,
n_hidden=n_hidden,
n_out=10
)
# start-snippet-4
# the cost we minimize during training is the negative log likelihood of
# the model plus the regularization terms (L1 and L2); cost is expressed
# here symbolically
cost = (
classifier.negative_log_likelihood(y)
+ L1_reg * classifier.L1
+ L2_reg * classifier.L2_sqr
)
# end-snippet-4
# compiling a Theano function that computes the mistakes that are made
# by the model on a minibatch
test_model = theano.function(
inputs=[index],
outputs=classifier.errors(y),
givens={
x: test_set_x[index * batch_size:(index + 1) * batch_size],
y: test_set_y[index * batch_size:(index + 1) * batch_size]
}
)
validate_model = theano.function(
inputs=[index],
outputs=classifier.errors(y),
givens={
x: valid_set_x[index * batch_size:(index + 1) * batch_size],
y: valid_set_y[index * batch_size:(index + 1) * batch_size]
}
)
# start-snippet-5
# compute the gradient of cost with respect to theta (sorted in params)
# the resulting gradients will be stored in a list gparams
gparams = [T.grad(cost, param) for param in classifier.params]
# specify how to update the parameters of the model as a list of
# (variable, update expression) pairs
# given two lists of the same length, A = [a1, a2, a3, a4] and
# B = [b1, b2, b3, b4], zip generates a list C of same size, where each
# element is a pair formed from the two lists :
# C = [(a1, b1), (a2, b2), (a3, b3), (a4, b4)]
updates = [
(param, param - learning_rate * gparam)
for param, gparam in zip(classifier.params, gparams)
]
# compiling a Theano function `train_model` that returns the cost, but
# in the same time updates the parameter of the model based on the rules
# defined in `updates`
train_model = theano.function(
inputs=[index],
outputs=cost,
updates=updates,
givens={
x: train_set_x[index * batch_size: (index + 1) * batch_size],
y: train_set_y[index * batch_size: (index + 1) * batch_size]
}
)
# end-snippet-5
###############
# TRAIN MODEL #
###############
print('... training')
# early-stopping parameters
patience = 10000 # look as this many examples regardless
patience_increase = 2 # wait this much longer when a new best is
# found
improvement_threshold = 0.995 # a relative improvement of this much is
# considered significant
validation_frequency = min(n_train_batches, patience // 2)
# go through this many
# minibatche before checking the network
# on the validation set; in this case we
# check every epoch
best_validation_loss = numpy.inf
best_iter = 0
test_score = 0.
start_time = timeit.default_timer()
epoch = 0
done_looping = False
while (epoch < n_epochs) and (not done_looping):
epoch = epoch + 1
for minibatch_index in range(n_train_batches):
minibatch_avg_cost = train_model(minibatch_index)
# iteration number
iter = (epoch - 1) * n_train_batches + minibatch_index
if (iter + 1) % validation_frequency == 0:
# compute zero-one loss on validation set
validation_losses = [validate_model(i) for i
in range(n_valid_batches)]
this_validation_loss = numpy.mean(validation_losses)
print(
'epoch %i, minibatch %i/%i, validation error %f %%' %
(
epoch,
minibatch_index + 1,
n_train_batches,
this_validation_loss * 100.
)
)
# if we got the best validation score until now
if this_validation_loss < best_validation_loss:
#improve patience if loss improvement is good enough
if (
this_validation_loss < best_validation_loss *
improvement_threshold
):
patience = max(patience, iter * patience_increase)
best_validation_loss = this_validation_loss
best_iter = iter
# test it on the test set
test_losses = [test_model(i) for i
in range(n_test_batches)]
test_score = numpy.mean(test_losses)
print((' epoch %i, minibatch %i/%i, test error of '
'best model %f %%') %
(epoch, minibatch_index + 1, n_train_batches,
test_score * 100.))
if patience <= iter:
done_looping = True
break
end_time = timeit.default_timer()
print(('Optimization complete. Best validation score of %f %% '
'obtained at iteration %i, with test performance %f %%') %
(best_validation_loss * 100., best_iter + 1, test_score * 100.))
print(('The code for file ' +
os.path.split(__file__)[1] +
' ran for %.2fm' % ((end_time - start_time) / 60.)), file=sys.stderr)
if __name__ == '__main__':
test_mlp()
The user can then run the code by calling:
python code/mlp.py
The output one should expect is of the form:
Optimization complete. Best validation score of 1.690000 % obtained at iteration 2070000, with test performance 1.650000 %
The code for file mlp.py ran for 97.34m
On an Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz the code runs with approximately 10.3 epoch/minute and it took 828 epochs to reach a test error of 1.65%.
To put this into perspective, we refer the reader to the results section of this page.
Tips and Tricks for training MLPs¶
There are several hyper-parameters in the above code, which are not (and, generally speaking, cannot be) optimized by gradient descent. Strictly speaking, finding an optimal set of values for these hyper-parameters is not a feasible problem. First, we can’t simply optimize each of them independently. Second, we cannot readily apply gradient techniques that we described previously (partly because some parameters are discrete values and others are real-valued). Third, the optimization problem is not convex and finding a (local) minimum would involve a non-trivial amount of work.
The good news is that over the last 25 years, researchers have devised various rules of thumb for choosing hyper-parameters in a neural network. A very good overview of these tricks can be found in Efficient BackProp by Yann LeCun, Leon Bottou, Genevieve Orr, and Klaus-Robert Mueller. In here, we summarize the same issues, with an emphasis on the parameters and techniques that we actually used in our code.
Nonlinearity¶
Two of the most common ones are the sigmoid and the tanh function. For reasons explained in Section 4.4, nonlinearities that are symmetric around the origin are preferred because they tend to produce zero-mean inputs to the next layer (which is a desirable property). Empirically, we have observed that the tanh has better convergence properties.
Weight initialization¶
At initialization we want the weights to be small enough around the origin so that the activation function operates in its linear regime, where gradients are the largest. Other desirable properties, especially for deep networks, are to conserve variance of the activation as well as variance of back-propagated gradients from layer to layer. This allows information to flow well upward and downward in the network and reduces discrepancies between layers. Under some assumptions, a compromise between these two constraints leads to the following initialization: uniform[-\frac{\sqrt{6}}{\sqrt{fan_{in}+fan_{out}}},\frac{\sqrt{6}}{\sqrt{fan_{in}+fan_{out}}}] for tanh and uniform[-4*\frac{\sqrt{6}}{\sqrt{fan_{in}+fan_{out}}},4*\frac{\sqrt{6}}{\sqrt{fan_{in}+fan_{out}}}] for sigmoid. Where fan_{in} is the number of inputs and fan_{out} the number of hidden units. For mathematical considerations please refer to [Xavier10].
Learning rate¶
There is a great deal of literature on choosing a good learning rate. The simplest solution is to simply have a constant rate. Rule of thumb: try several log-spaced values (10^{-1},10^{-2},\ldots) and narrow the (logarithmic) grid search to the region where you obtain the lowest validation error.
Decreasing the learning rate over time is sometimes a good idea. One simple rule for doing that is \frac{\mu_0}{1 + d\times t} where \mu_0 is the initial rate (chosen, perhaps, using the grid search technique explained above), d is a so-called “decrease constant” which controls the rate at which the learning rate decreases (typically, a smaller positive number, 10^{-3} and smaller) and t is the epoch/stage.
Section 4.7 details procedures for choosing a learning rate for each parameter (weight) in our network and for choosing them adaptively based on the error of the classifier.
Regularization parameter¶
Typical values to try for the L1/L2 regularization parameter \lambda are 10^{-2},10^{-3},\ldots. In the framework that we described so far, optimizing this parameter will not lead to significantly better solutions, but is worth exploring nonetheless.


What is our History?
In 2010, a group of inspired community members and individuals from non-profits in our county came together in conversation over a year’s time to talk about capturing excess produce that was grown in our county and sharing it locally with those in need. We gathered in cafes, homes, and meeting spaces hosted by Cal Poly’s SUSTAIN team while we brainstormed, researched, read, and talked over many cups of tea, coffee and snacks.Together, we envisioned a community where neighbors shared their produce with each other, where people were not hungry, where there was abundance around and a feeling that we had enough. We looked at our world with connection, not isolation. We shared stories in person, in real time. We longed for opportunities to learn together ways that had been lost — togetherness over leisurely meals, over harvest, of skills that used to be common - the art of canning, tending to the earth, of multi-generations talking and being there for each other. We longed to share with each other stories about our lives. Stories about community. We envisioned connections forming with people over a backyard citrus tree, a large field or bountiful orchard — many people who wouldn’t otherwise have the chance to meet.
It is from this idea of togetherness, of helping each other, caring for our county, our planet, our community, that GleanSLO was born. In recognizing our history and accomplishments, there are many people we are grateful for who gathered around those tables and dedicated endless hours of visioning and brainstorming to make this happen. We won’t forget the grassroots way we started and the people who believed this was possible.
-Carolyn Eicher, GleanSLO co-founder
2010
• A few individuals from SLO Grown Kids start gleaning from local San Luis Obispo backyards in February 2010. The Backyard Harvest (BYH) Founder from Moscow, Idaho, Amy Grey, guides our work along with Paso Robles resident Gail McNichols who had started a local Paso Robles BYH chapter
• Cal Poly’s SUSTAIN team work with the new SLO Backyard Harvest to co-create the local gleaning initiative for San Luis Obispo county, hosting and leading the visioning meetings
• In Fall of 2010, a group of engaged individuals from various organizations meet monthly realizing that there is a shared vision and passion for establishing a county-wide gleaning effort
• Partners include the Food Bank Coalition of SLO County, Cal Poly's STRIDE, Cal Poly's SUSTAIN, Transition Towns, SLO Grown Kids, and One Cool Earth
• Poundage for the first year: 22,000; Volunteers: N/A; Employees: 0; Vehicles: 0
2011
• In February 2011 "GleanSLO" is formed with the Food Bank taking a leadership role and facilitating gleans at larger farms, fields and orchards
• SLO Grown Kids hire designer, Marjorie Collins, to design the new GleanSLO logo
• United Way awards GleanSLO $5,000 for the Innovation Grant. Funds are matched by the Food Bank and Caroline Ginsberg is hired as the first GleanSLO employee through the AmeriCorps program from August 2011 through June 2012
• Food Bank begins serving as the fiscal agency thanks to this grant opportunity
• Poundage: 37,988; Volunteers: N/A; Employees: 1 part time; Vehicles: 0
2012
• Carolyn Eicher, co-founders of GleanSLO, becomes the Program Manager in June 2012 when Caroline Ginsberg leaves GleanSLO after finishing her AmeriCorps term
• Jeanine Lacore joins the team as the new AmeriCorps VIP member from August 2012-June 2013, and is hired on full-time by the Food Bank in July 2013 as the full-time Program Coordinator
• The first-ever Farmers’ Market Collection begins at the weekly Saturday Templeton Farmers’ Market in June with volunteer teams collecting excess produce that is taken back to the Paso Food Bank warehouse
• The Farmers' Market Collection Program expands to the Thursday San Luis Obispo downtown Farmers' Market in August of 2012, partnering with The Salvation Army to collect and distribute the produce
• Poundage: 99,165; Volunteers: N/A; Employees: 2 part-time; Vehicles: 0
2013
• In March, the updated website is launched thanks to the generosity of Dick Yates of Salem Harvest. Features include online registration for crop donors and volunteer sign-ups for gleans, which increases the efficiency and quantity of gleans
• The community’s response to GleanSLO continues to blossom. The first City-wide Fruit Drive is held in San Luis Obispo in the spring collecting nearly 1,500 lbs of citrus
• A local family creates and funds the GleanSLO yard signs “My Garden Feeds Hungry Families” to thank homeowners donating produce and raise awareness about GleanSLO
• The first statewide Gleaning Conference is held in San Jose, which Jeanine Lacore and Carolyn Eicher attend
• In the fall, the Food Bank receives the USDA Community Food Project grant to build infrastructure and capacity of GleanSLO
• In September 2013, Carolyn Eicher passes the 'Program Manager' baton to Jen Miller as the title transitions to a full-time position
• Chuck Asmus is hired in November as a driver of GleanSLO’s grant-funded refrigerated box truck
• Jeanine Lacore and Jen Miller attend the SoCal Gleaning Conference hosted by Food Forward in Los Angeles
• Poundage: 212,109; Volunteers: 401; Farm Harvests: 85; Backyard Harvests: 152; Employees: 2 full-time, 1 part-time; Vehicles: 1 refrigerated box truck
2014
• The first cohort of GleanSLO Neighborhood Harvest Leaders are trained to lead small gleans in their local cities.
• A replicable model for a student-led School Fruit Drive is developed and implemented in 7 schools in San Luis Obispo collecting nearly 2,000 pounds of fruit and raising awareness about food waste, hunger and sharing
• The Food Bank Nutrition Outreach Program and the UC Cooperative Extension use gleaned produce in cooking demonstrations at distribution sites to educate Food Bank recipients about nutritional value, recipes, and techniques for canning, freezing and dehydrating
• Jen Miller and Jeanine Lacore attend Community Jam Gleaning Conference in Layfayette, CA hosted by The Urban Farmers and Village Harvest
• More farmers begin working with GleanSLO, increasing the number of farm harvests by nearly 50% from 2013
• Poundage: 200,092; Volunteers: 572; Farm Harvests: 143; Backyard Harvests: 188; Employees: 2 full-time, 1 part time; Vehicles: 1 refrigerated box truck
2015
• Susan Singley hired as GleanSLO Program Manager to replace Jen Miller, who was promoted to Director of Programs with the Food Bank
• Jeanine Lacore moves out of state and Josh Ayers is hired to fill the GleanSLO Program Coordinator position
• GleanSLO partners with AmeriCorp and brings on AmeriCorp VIP Fellow Emily Wilson to focus on volunteer engagement and recruitment
• GleanSLO teams up with other gleaning organizations in Ventura and Santa Barbara Counties to have a joint gleaning day event called Glean805. Multiple gleaning events were scheduled across the Tri-County region. GleanSLO’s 60 volunteers at Talley Farms rescued almost 6,000 pounds of bell peppers
• Susan Singley passes GleanSLO Program Manager baton on to Joshua Ayers
• Poundage: 209,013; Volunteers: 545; Farm Harvests: 160; Backyard Harvests: 150; Employees: 2 full-time, 1 part time, 1 AmeriCorp Member; Vehicles: 1 refrigerated box truck
2016
• Margaux Inman joins the GleanSLO team as Program Coordinator
• Emily Wilson attends Community Jam Gleaning Conference in Rohnert Park, CA hosted by Farm To Pantry, Petaluma Bounty, SONOMA Food Runners, Sonoma Valley Gleaning Project, and UC Cooperative Extension Sonoma County
• AmeriCorp VIP Fellow Emily Wilson fulfills her one year service as Volunteer Coordinator and Dylan Jones jumps in to fill her shoes
• Josh Ayers passes the Program Manager baton to Roxanne Sanders
• We reach ONE MILLION POUNDS gleaned since our program’s inception!
• Poundage: 239,389; Volunteers: 533; Farm Harvests: 194; Backyard Harvests: 208; Employees: 2 full-time, 1 part time, 1 AmeriCorp Member; Vehicles: 2


ESCO v0
ESCO v1
Matched CVs for
"Franchisenemer bij Au Croquant Bakkerij at Au Croquant Bakkerij in Brussel , Bruxelles - Job | LinkedIn"
Matching type
Implicit
Explicit
Combined
Original document
Skills view
Some language
Your vacancy
Job description
Job title
Job description
Hiring Organization
Au Croquant Bakkerij
Employment Type
fulltime
Experience Level
entryLevel
Geoname
Bruxelles Jette
Occupational Category
Business Development, General Business, Distribution
Nace codes (ESCO)
No nace codes found in the CV
some nace stuff
URL
https://www.linkedin.com/jobs2/view/12381940
Direct v0 skills (ESCO)
No direct v0 ESCO skills found for this JV
Direct v0 skill label here
Direct v1 skills (ESCO)
No direct v1 ESCO skills found for this JV
Direct v1 skill label here
Occupations v0 (ESCO)
No ESCO v0 occupations defined for this JV
Occupation label here
No ESCO skills defined for this ESCO occupation
Skill label here...
Occupations v1 (ESCO)
No ESCO v1 occupations defined for this JV
Occupation label here
No ESCO skills defined for this ESCO occupation
Skill label here...
Matched CV
98%
CV description
No description found for the CV.
CV ID
someId
Given name
givenName
Skills (v0)
No v0 skills found in the CV
Skill v0
Experience (v0)
No v0 experience found in the CV
occupation v0
Skills (v1)
No v1 skills found in the CV
skill v1
Experience (v1)
No v1 experience found in the CV
occupation v0
Matching skills
Customer services
Customer services
Missing skills
Customer services
Customer services
Additional skills
Customer services
Customer services
‹
›
Matched CVs
givenName
98%


This page is a part of the Grokking Nemerle tutorial.
Tuples are forms of nameless data structures. They are usable when you
need to return two or three values from a function.
A tuple is constructed with:
(expr1, expr2, ..., exprN)
and deconstructed with:
def (id1, id2, ..., idN) = expr;
This def thing defines values called id1
through idN
and puts respective tuple members into them.
Tuple types are written using the *
operator. For example, pair
of integers (42, 314)
has the type int * int
, while
("Zephod", 42.0, 42)
has the type string * float * int
.
An example follows:
/** Parses time in HH:MM format. */
parse_time (time : string) : int * int
{
def arr = time.Split (array [':']);
(System.Int32.Parse (arr[0]), System.Int32.Parse (arr[1]))
}
seconds_since_midnight (time : string) : int
{
def (hours, minutes) = parse_time (time);
(hours * 60 + minutes) * 60
}
foo () : void
{
def secs = seconds_since_midnight ("17:42");
...
}
Another example could be:
// split (3.7) => (3, 0.7)
split (x : double) : int * double
{
def floor = System.Math.Floor (x);
(System.Convert.ToInt32 (floor), x - floor)
}
List literals are special forms of writing lists. Lists are data
structures that are used very often in Nemerle - often enough to get
their own syntax. Lists in Nemerle are somewhat different than the
ArrayList
type in .NET.
- the lists in Nemerle are immutable (cannot be changed once created)
- items can be appended at the beginning only (constructing new lists)
Of course you are free to use the .NET
ArrayList
.
Anyway, to construct a list consisting of a given head
(first
element) and a tail
(rest of elements, also a list), write:
To construct a list with specified elements write:
[ element_1, element_2, ..., element_n ]
This way you can also construct an empty list ([]
).