| Path: | vendor/plugins/simple_localization/README |
| Last Update: | Wed Aug 22 12:19:56 CEST 2007 |
This plugin supports a simple localization for Ruby on Rails and was born in the first half of 2006 by searching a simple way to localize model and attribute names of ActiveRecord models. Time after time more and more features became necessary and the plugin grew. It supports multiple language localization for Ruby on Rails based on language files, localizes the Date and Time classes, many helpers, some methods of ActiveSupport, the ActiveRecord error messages and provides two ways to localize models and their attributes. You can also use the language file to easily localize your own application. You‘ll find an overview just below.
If you have some questions, want to report a bug or just want to talk about the plugin you can write a comment at the homepage of this plugin.
To make the plugin more felxible and extendable most of the functionality is split into small "features". These "features" are source files located in the lib/features directory of the plugin and each one localizes a small part of Ruby on Rails. When initializing the plugin you can choose the featurs you want to use. This avoids conflicts in case you have already localized some parts of your application by other means.
To easily support new languages all language specific strings are extracted into language files. These language files can be found in the languages directory of the plugin (or a custom directory) and are written in the YAML format. They also contain meta data about the author of the language file and can be extended with Ruby code (eg. configuring the Rails Inflector). More detailed information or instructions for creating a new language file can be found in the corresponding section at the end of this file.
You can install the newest version of the plugin (for Rails 1.1 and 1.2) directly from the SubVersion repository:
./script/plugin install http://svn.arkanis-development.de/projects/rails_plugins/current/simple_localization
The next and already last thing is to call the simple_localization method at the end of your environment.rb file:
simple_localization :language => :de
With this you’re done. The :language parameter lets you define the language you want to use. Just specify the name of the language file without the .yml extension as a symbol or string. Currently german (de.yml), Dutch (nl.yml), France (fr.yml) and English (en.yml) language files are available. The english language file just serves as a reference and template for new language files. To load multiple languages just specify them in an array:
simple_localization :languages => [:de, :en, :nl, :fr]
This one call of the simple_localization method gives you quite more control over the plugin but this is described in the next chapter.
Things get a bit complicated when using Rails model observers. Features which are accessed when the models are loaded are preloaded by the plugin. To disable a preloaded feature set the ArkanisDevelopment::SimpleLocalization::SUPPRESS_FEATURES constant to the name (symbol) of the feature. This have to be done before the Rails::Initializer.run call in the environment.rb. This is neccessary because an observer (and with it the correponding model) is loaded before the plugin is initialized in the environment.rb. Thanks to MK for reporting this problem.
With the simple_localization method you can control how the plugin is set up and which features are loaded. It takes a hash of options and the main purpose of this method is to initialize the plugin (therefor called in environment.rb) and to specify which language files should be used:
simple_localization :language => :de # initializes the plugin with just one language (german) simple_localization :languages => [:en, :de, :nl, :fr] # initializes the plugin with four languages
The second and more powerful purpose of this method is to control which features should be loaded. Just specify an option with the name of the feature source file and set it to false to prevent it from loading:
simple_localization :language => :de, :class_based_field_error_proc => false
This example will initialize the plugin with a german language file named de.yml but without loading the class_based_field_error_proc.rb feature file. To make this more readable you can also use :only and :except options like known from Rails before and after filters:
simple_localization :language => :de, :except => [:class_based_field_error_proc, :localized_date_and_time] simple_localization :language => :de, :only => :localized_models
If you use the language files to localize your application (the localized_application feature) it may come in handy to move the directory containing the language files to another more public place.
simple_localization :language => :de, :lang_file_dir => "#{RAILS_ROOT}/app/languages", :only => [:localized_application]
This example expects the language files to be located in the app/languages directory of your application. By default language files are located in the languages directory of the Simple Localization plugin.
To not break rails model observers this plugin preloads the localized_models feature. This is neccessary because the observers (and with them the models) are loaded before the plugin is initialized by the simple_localization call in the environment.rb. However such a preloaded feature can not be suppressed by specifing an option to the simple_localization method.
simple_localization :language => :de, :except => :localized_models
This won’t work because the localized_models feature is already loaded. But there is another way to kick out a preloaded feature: add it to the list of suppressed featurs in the ArkanisDevelopment::SimpleLocalization::SUPPRESS_FEATURES constant. You have to do this before the plugin is loaded and therefore before the Rails::Initializer.run call in the environment.rb.
# Bootstrap the Rails environment, frameworks, and default configuration require File.join(File.dirname(__FILE__), 'boot') # This suppresses the localized_models feature from being preloaded ArkanisDevelopment::SimpleLocalization::SUPPRESS_FEATURES = [:localized_models] Rails::Initializer.run do |config| ... end simple_localization :language => :de
If multiple languages are loaded by the simple_localization method you can easily swicht between them.
environment.rb
simple_localization :language => [:de, :en]
somewhere in your app
ArkanisDevelopment::SimpleLocalization::Language.use :en l(:test) # will return something from the English language file ArkanisDevelopment::SimpleLocalization::Language.use :de l(:test) # and this something from the German language file ArkanisDevelopment::SimpleLocalization::Language.current_language # => :de
Using a before filter it’s quite easy to let every request (or user) choose it’s own language.
class ApplicationController < ActionController::Base before_filter :set_language ... private def set_language ArkanisDevelopment::SimpleLocalization::Language.use @user.language end end
This is a list describing the currently available features. Each one can be turned on or off to best match your needs. Detailed information about a feature can be found in the RDoc documentation of the feature source file.
Provides a way to specify localized model and attribute names for ActiveRecord models. Asume the following model Computer has the attributes name, description, ip_address and user.
class Computer < ActiveRecord::Base belongs_to :user validates_presence_of :name, :ip_address, :user localized_names 'Der Computer', :name => 'Der Name', :description => 'Die Beschreibung', :ip_address => 'Die IP-Adresse', :user => 'Der Besitzer' end
This stores the localized (in this case german) name of the model and it�s attributes in the model class. The first parameter of the localized_names method is the name of the model followed by a hash defining the localized names for the attributes.
The feature also overwrites ActiveRecords human_attribute_name method to return the localized names if available. The model name can be accessed by the class method localized_model_name.
Computer.localized_model_name # => 'Der Computer' Computer.human_attribute_name(:ip_address) # => 'Die IP-Adresse'
This feature provides a way to localize ActiveRecord models based on translated model and attribute names in the language file. Where the localized_models feature depends on translated names written in the source code of the models this feature reads all necessary strings from the loaded language file.
This feature is the right choice if your application should support multiple languages, but only one at runtime. If your application is strictly developed for just one language localized_models may is the better choice.
To localize a model with this feature you just have to add the necessary entries to the models section to the languge file. The following example localizes the Computer model and it�s attributes name, description, ip_address and user.
models: computer: name: Der Computer attributes: name: Der Name description: Die Beschreibung ip_address: Die IP-Adresse user: Der Besitzer
This feature will convert the name of the model class (Compuer) using String#underscore (results in computer) and will look in the corresponding subsection of the models section. Each model section in turn contains the name of the model ("Der Computer") and a map translating the model attributes. Like the localized_models feature this one defines the localized_model_name method to access the localized model name and modifies the human_attribute_name to use the localized attributes names.
Computer.localized_model_name # => 'Der Computer' Computer.human_attribute_name(:ip_address) # => 'Die IP-Adresse'
This feature allows you to use the language file to localize your application. You can add your own translation strings to the app section of the language file and read them with the l global method. You can use this method in your controllers, views, mail templates, simply everywhere.
app: title: Simple Localization Rails plugin subtitle: The plugin should make it much easier to localize Ruby on Rails headings: wellcome: Wellcome to the RDoc Documentation of this plugin l(:title) # => "Simple Localization Rails plugin" l(:headings, :wellcome) # => "Wellcome to the RDoc Documentation of this plugin"
The l method is just like the ArkanisDevelopment::SimpleLocalization::Language#[] operator but is limited to the app section of the language file. There is no need to access language file sections of other features.
Overwrites the english ActiveRecord error messages with localized ones from the language file. If the user submits an invalid form Rails� error_messages_for helper generates a box detailing why the record is invalid. This feature localizes the error messages used to build the box. However to get a completely localized error box you’ll have to localize your models (localized_models or localized_models_by_lang_file feature) as well as the ActiveRecord helpers (localized_active_record_helpers feature).
Localizes the error_messages_for helper. Uses the language file to generate the heading and explaination paragraph of the error box and makes it also possible to redefine the generated HTML output using an associated block.
Localizes the Time and Date classes. Updates the month and day name constants of the Date class with proper localized ones from the language file. Also makes the Time#strftime method using the month and day names of the Date class (based on the work of Patrick Lenz).
The date and time formats used by the to_formatted_s method are updated, too.
Localizes the Array#to_sentence method added by ActiveSupport.
Localizes the date_select and distance_of_time_in_words helpers. These helpers are used by many other helpers to and therefor many other helpers gets localized too.
Updates the country names used by the FormOptionsHelper module with localized names from the language file.
Modifies the number helpers of Rails to use a localized seperator, delimiter, percision and currency unit.
This feature extends Rails template handling and allows the use of localized templates like index.de.rhtml. The plugin will then pick the template matching the currently used language (Language#current_language).
This feature replaces the default ActionView field_error_proc which is responsible for marking form fields with invalid input. The original one wraps invalid form fields into and div element of the class fieldWithErrors.

<input type="text" class="txt" ... />

The new one just adds the class @invalid@ to the corresponding form field element.
<input type="text" class="txt invalid" ... />
This feature is based on a code snippet of Duane Johnson found in the Rails wiki and isn�t really a localization feature. However while working with the ActiveRecord error messages the new div-element around invalid fields was one of the most annoying things of Rails. So this feature can my be considered as a "goody".
The language files contain all language specific strings the plugin uses and are written in simple YAML. Take a look at the english language file (languages/en.yml) and you’ll see how simple they are.
YAML may be nice but sometimes a language may require more complex things (eg. configuring the Rails Inflector). Usually these complex tasks can be done by some Ruby magic and therefor you can extend a YAML language file with Ruby code. This is done by creating a Ruby file with the same name as the YAML language file but with an rb extension instead of an yml extension. The Ruby file will be loaded right after the YAML file. For example languages/en.yml contains the translated language strings and languages/en.rb could contain some complex Ruby code to further setup the english language.
The YAML language file also contains some information about the author of the language file. This information can be accessed using the ArkanisDevelopment::SimpleLocalization::Language#about method.
By default all language files are located in the languages direcotry of the plugin. You can specify your own directory with the :lang_file_dir option of the simple_localization method.
It�s very easy to define new languages for this plugin. Just copy the english language file (languages/en.yml) and translate the entries into your language. If you need to do some Ruby stuff to setup your language (eg. configuring the Rails Inflector) you can do this in the Ruby file with the same name as your language file.
For example if you want to create a france language file you could just copy en.yml to fr.yml and translate the necessary strings. If you need some Ruby stuff you can create a file named fr.rb and write usual Ruby code which will be loaded right after the YAML file.
Copyright © 2006 Stephan Soller<EMAIL_ADDRESS>and contributors
The MIT License
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


Move Planner
Address
Find Place
Here's how it looks like
Some related Wikipedia articles
Some related New York Times articles


All samples are using Ink.requireModules
, please read how to use it at Ink.requireModules section
Displays off-canvas content which can be triggered by clicking elements with the 'left-drawer-trigger' and 'right-drawer-trigger', respectively.
The left drawer has the 'left-drawer' class, and the right drawer has the 'right-drawer' class. The content drawer (EG your <div id="main">
) must have the 'content-drawer' class. For more, see the example below, or try the sample.
| Method name | Description |
|---|---|
| new Drawer_1([options]) | Constructor |
options
Configuration options.options.mode
'push'This can be 'push' or 'over'.options.sides
'both'Can be 'left', 'right', or 'both'. Controls what sides have a drawer.Example
{% highlight html %}{% raw %}


Heather Shrimpton, who had been in the Stirling show, told me about Forth Dimension in South Queensferry, where she was choreographer. It sounded like fun, so I went along.
The amazing thing about Forth Dimension was the amount of work that the company did to convert the school hall into an authentic-looking theatre. A few lighting towers and an abundance of blacks can make a place look really impressive! And then , of course, it all has to be taken down after the show is over.
Anyone who complains about noise levels in today's digital cameras should go back and look at real-world scans of 35mm negatives.Marie did a great job with these dress rehearsal pictures, but the noise levels were so high that even the ones that are in focus look bad. Any imperfect exposure and the images look dreadful. This is Fuji HG1600 film, and beside it my "dated" Canon EOS350D looks wonderful!


Before Change
outputs_first = segmaps
outputs_second = segmaps
for i, (outputs_first_i, outputs_second_i) in enumerate(zip(outputs_first, outputs_second)):
// Segmap augmentation also works channel-wise based on image
// channels, even though the channels have different meanings
// between images and segmaps. This is done in order to keep the
// random values properly synchronized with the image augmentation
if per_channel[i] > 0.5:
nb_channels_i = segmaps[i].shape[2] if len(segmaps[i].shape) >= 3 else 1
alpha = np.average(alphas[i, 0:nb_channels_i])
else:
alpha = alphas[i, 0]
assert 0 <= alpha <= 1.0, (
"Expected "alpha" to be in the interval [0.0, 1.0]. "
"Got %.4f." % (alpha,))
// We cant choose "just a bit" of one segmentation map augmentation
// result without messing up the positions (interpolation doesn"t
// make much sense here),
// so if the alpha is >= 0.5 (branch A is more visible than
// branch B), the result of branch A, otherwise branch B.
if alpha >= 0.5:
result[i] = outputs_first_i
else:
result[i] = outputs_second_i
After Change
outputs_first = segmaps
outputs_second = segmaps
gen = enumerate(zip(outputs_first, outputs_second))
for i, (outputs_first_i, outputs_second_i) in gen:
// Segmap augmentation also works channel-wise based on image
// channels, even though the channels have different meanings
// between images and segmaps. This is done in order to keep the
// random values properly synchronized with the image augmentation
if per_channel[i] > 0.5:
nb_channels_i = (
segmaps[i].shape[2] if len(segmaps[i].shape) >= 3 else 1)
alpha = np.average(alphas[i, 0:nb_channels_i])
else:
alpha = alphas[i, 0]
assert 0 <= alpha <= 1.0, (
"Expected "alpha" to be in the interval [0.0, 1.0]. "
"Got %.4f." % (alpha,))
// We cant choose "just a bit" of one segmentation map augmentation
// result without messing up the positions (interpolation doesn"t
// make much sense here),
// so if the alpha is >= 0.5 (branch A is more visible than
// branch B), the result of branch A, otherwise branch B.
if alpha >= 0.5:
result[i] = outputs_first_i
else:
result[i] = outputs_second_i


{% extends "index.html" %} {% block contents %}
Email Blast List
You may use this form to add/remove your email address to/from MARGY’s email blast list. We use this list only to inform users of important information, such as new features or outages. If you have questions, please email admin@margymail.com.


public interface PubSubService
Implementations of PubSubService are expected to collaborate with a PubSubEngine
that will take care of handling packets sent to the service.
The separation between PubSubService
and PubSubEngine
allows to
reuse the handling of packets and at the same time be able to create different pubsub
services with different configurations. Examples of different pubsub services are:
JEP-60: Publish-Subscribe and JEP-163: Personal Eventing Protocol.
| Modifier and Type | Method and Description |
|---|---|
void |
addNode(Node node)
Adds an already persistent node to the service.
|
void |
broadcast(Node node,
org.xmpp.packet.Message message,
Collection<org.xmpp.packet.JID> jids)
Broadcasts the specified Message containing an event notification to a list
of subscribers to the specified node.
|
boolean |
canCreateNode(org.xmpp.packet.JID creator)
Returns true if the pubsub service allows the specified user to create nodes.
|
org.xmpp.packet.JID |
getAddress()
Returns the XMPP address of the service.
|
Map<String,Map<String,String>> |
getBarePresences()
Returns a registry of the presence's show value of users that subscribed to a node of
the pubsub service and for which the node only delivers notifications for online users
or node subscriptions deliver events based on the user presence show value.
|
DefaultNodeConfiguration |
getDefaultNodeConfiguration(boolean leafType)
Returns the default node configuration for the specified node type or null
if the specified node type is not supported by the service.
|
AdHocCommandManager |
getManager()
Returns the ad-hoc commands manager used for this service.
|
Node |
getNode(String nodeID)
Returns the
Node that matches the specified node ID or null if
none was found. |
Collection<Node> |
getNodes()
Retuns the collection of nodes hosted by the pubsub service.
|
CollectionNode |
getRootCollectionNode()
Returns the
CollectionNode that acts as the root node of the entire
node hierarchy. |
String |
getServiceID()
Returns a String that uniquely identifies this pubsub service.
|
Collection<String> |
getShowPresences(org.xmpp.packet.JID subscriber)
Returns the show values of the last know presence of all connected resources of the
specified subscriber.
|
boolean |
isCollectionNodesSupported()
Returns true if the pubsub service supports collection nodes.
|
boolean |
isInstantNodeSupported()
Returns true if the pubsub service allows users to create nodes without specifying
the node ID.
|
boolean |
isMultipleSubscriptionsEnabled()
Returns true if a user may have more than one subscription with the node.
|
boolean |
isServiceAdmin(org.xmpp.packet.JID user)
Returns true if the specified user is a sysadmin of the pubsub service or has
admin privileges.
|
void |
presenceSubscriptionNotRequired(Node node,
org.xmpp.packet.JID user)
Requests the pubsub service to unsubscribe from the presence of the user.
|
void |
presenceSubscriptionRequired(Node node,
org.xmpp.packet.JID user)
Requests the pubsub service to subscribe to the presence of the user.
|
void |
removeNode(String nodeID)
Removes the specified node from the service.
|
void |
send(org.xmpp.packet.Packet packet)
Sends the specified packet.
|
void |
sendNotification(Node node,
org.xmpp.packet.Message message,
org.xmpp.packet.JID jid)
Sends the specified Message containing an event notification to a specific
subscriber of the specified node.
|
org.xmpp.packet.JID getAddress()
String getServiceID()
Map<String,Map<String,String>> getBarePresences()
boolean canCreateNode(org.xmpp.packet.JID creator)
creator
- the JID of the entity trying to create a new node.boolean isServiceAdmin(org.xmpp.packet.JID user)
user
- the user to check if he has admin privileges.boolean isInstantNodeSupported()
boolean isCollectionNodesSupported()
CollectionNode
may only hold children nodes of type CollectionNode
or LeafNode
. On the
other hand, LeafNode
can only hold PublishedItem
.CollectionNode getRootCollectionNode()
CollectionNode
that acts as the root node of the entire
node hierarchy. The returned node does not have a node identifier. If collection
nodes is not supported then return null.Node getNode(String nodeID)
Node
that matches the specified node ID or null if
none was found.nodeID
- the ID that uniquely identifies the node in the pubsub service.Collection<Node> getNodes()
void addNode(Node node)
node
- the persistent node to add to the service.void removeNode(String nodeID)
A future version may support unloading of inactive nodes even though they may still exist in the database.
nodeID
- the ID that uniquely identifies the node in the pubsub service.void broadcast(Node node, org.xmpp.packet.Message message, Collection<org.xmpp.packet.JID> jids)
node
- the node that triggered the event notification.message
- the message containing the event notification.jids
- the list of entities to get the event notification.void send(org.xmpp.packet.Packet packet)
packet
- the packet to send.void sendNotification(Node node, org.xmpp.packet.Message message, org.xmpp.packet.JID jid)
node
- the node that triggered the event notification.message
- the message containing the event notification.jid
- the entity to get the event notification.DefaultNodeConfiguration getDefaultNodeConfiguration(boolean leafType)
leafType
- true when requesting default configuration of leaf nodesCollection<String> getShowPresences(org.xmpp.packet.JID subscriber)
subscriber
- the JID of the subscriber. This is not the JID of the affiliate.void presenceSubscriptionRequired(Node node, org.xmpp.packet.JID user)
node
- the node that originated the subscription request.user
- the JID of the affiliate to subscribe to his presence.void presenceSubscriptionNotRequired(Node node, org.xmpp.packet.JID user)
node
- the node that originated the unsubscription request.user
- the JID of the affiliate to unsubscribe from his presence.boolean isMultipleSubscriptionsEnabled()
AdHocCommandManager getManager()
Copyright © 2003-2008 Jive Software.


Here, debounce
is applied on the string interpolation instructions displaying the input's value.
Undebounced: ${input.value}
Debounced (default delay): ${input.value & debounce}
Debounced (1s delay): ${input.value & debounce:1000}
Here, debounce
is applied on the binding of the value
attribute of the input
.
They are all bound to the same view-model property, so you can clearly see that debounce
is applied when
the updates flow from the input to the view-model when decorating a two-way binding.
Here, debounce
is applied on an event binding. As such, the dispatching of the event
to the view-model will be debounced accordingly.


classes and annotations
vmlens provides one class and one annotation to define the behavior of vmlens. You can download those classes from maven central or using the following dependency in your maven pom:
<dependency> <groupId>com.vmlens</groupId> <artifactId>api</artifactId> <version>1.1.5</version> </dependency>
The JavaDoc is available here.
Class AllInterleavings
The class com.vmlens.api.AllInterleavings let you test all thread interleavings for your test. Enclose your test in a while loop to iterate through all thread interleavings like in the following example:
import com.vmlens.api.AllInterleavings; public class TestUniqueId { long firstId; long secondId; @Test public void testUniqueId() throws InterruptedException { try (AllInterleavings allInterleavings = new AllInterleavings("ConcurrencyTestUniqueId");) { while (allInterleavings.hasNext()) { firstId = 0L; secondId = 0L; UniqueId uniqueId = new UniqueId(); Thread first = new Thread(() -> { firstId = uniqueId.nextId(); }); first.start(); secondId = uniqueId.nextId(); first.join(); assertTrue(firstId != secondId); } } } }
Annotation DoNotTrace
The com.vmlens.annotation.DoNotTrace annotation lets you define methods that should not be traced by vmlens. This allows you to enforce a specific ordering of your thread without influencing the data race detection of vmlens. In the following example, the CountDownLatch creates a happens-before relation between the i++ in the methods updateBefore and updateAfter:
import com.vmlens.annotation.DoNotTrace; public class UpdateWithDoNotTrace { private int i = 0; final CountDownLatch countDownLatch = new CountDownLatch(1); @DoNotTrace private void signal() { countDownLatch.countDown(); } @DoNotTrace private void wait4Signal() throws InterruptedException { countDownLatch.await(); } public void updateBefore() { i++; signal(); } public void updateAfter() throws InterruptedException { wait4Signal(); i++; } }
So without DoNotTrace vmlens would not flag this as a data race. With DoNotTrace detects a data race when the two methods are run in parallel.


SweetFreeStuff.com
///////////////////////////////////////////
Free Birthday Gift for Sephora Beauty Insiders
Posted: 14 Jan 2015 11:13 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Get the gift at checkout in stores or online anytime during your birthday
month. Free Birthday Gift for Sephora Beauty Insiders
The post Free Birthday Gift for Sephora Beauty Insiders appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Fluke Networks 802.11ac Poster
Posted: 14 Jan 2015 10:51 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Free Fluke Networks 802.11ac Poster
The post Free Fluke Networks 802.11ac Poster appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Subscription to Marlin Magazine
Posted: 14 Jan 2015 04:53 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
The post Free Subscription to Marlin Magazine appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Amele Essentials Intimate Sample Kit
Posted: 14 Jan 2015 03:54 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Free Amele Essentials Intimate Sample Kit
The post Free Amele Essentials Intimate Sample Kit appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Nordic Naturals Wellness Sample Kit
Posted: 14 Jan 2015 12:15 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Click Free Sample on the lower right side of the page,
The post Free Nordic Naturals Wellness Sample Kit appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Lab Series Max LS Age-Less Power V Lifting Cream (Expired)
Posted: 13 Jan 2015 09:59 PM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Scroll to the bottom of the page and complete the form to receive a free
sample. Free Lab Series Max LS Age-Less Power V Lifting Cream
The post Free Lab Series Max LS Age-Less Power V Lifting Cream (Expired)
appeared first on SweetFreeStuff.com.


The aim of this first objective was to demonstrate the advantage of modified Ovsynch protocol, combined with artificial insemination of goats on fixed time, compared to other methods used to control fertility of this species.
The project "OPTIMIZATION OF REPRODUCTIVE, GENETICS AND HEALTH PARAMETERS IN ORDER TO IMPROVE PRODUCTION IN GOAT HERDS" - "OH, MA CHEVRE!", aims to create a network of scientific staff focused on different aspects of goats breeding and exploatation (reproductive management, out of seson breeding and production, health status management, goat genetics, infectious and hoof diseases), which would allow the integration of research results and the development of some new solutions for goat breeders within the ECO area in line with current challenges.
The aim of this first objective was to demonstrate the advantage of modified Ovsynch protocol, combined with artificial insemination of goats on fixed time, compared to other methods used to control fertility of this species.
The second objective of the project was to explain the role of natural antioxidants (substances with antioxidant protective effect) (melatonin, vitamin A), added in feed rations and quantifying their effect on different reproductive parameters. The research purpose is to study the effect of adding antioxidants during defrosting, which could improve the "in vitro" fertility of goat, ram sperm and at the same time to determin the possible individual differences between males.
This objective was to establish a correlation between hoof mold but also on productive and reproductive parameters. Another purpose was to determine reproduction parameters (appearance and lenght of heat, early pregnancy diagnosis, prolificity) and milk production in both sick animals and those without underlying problems. The last goal of this objective was to analyze the effect of local and parenteral treatment of hoof mold and to evaluate the effectiveness of classical and galenic therapeutic protocols.
The fourth objective of the project was to monitor the status of genetic resources of local goat populations in order to improve selection; genetic markers determining of economic interest (αS1C; βCn; κCn; βLg) involved in improving production and quality of milk. An important objective was to ensure food security and competitiveness increase of dairy products, as well as to bring a contribution into conserving local genetic resources.
The last objective was to evaluate the health status in goat herds which will allow for the future determination of biosecurity measures. These measures will result in a risk reduction of introducing and spreading disease within the herd. A herd health status will be assessed in relation to goats infectious diseases: respiratory (contagious agalactia), parasitic (helminthiasis, coccidiosis) and reproductive (infectious abortions).
Faculty of Veterinary Medicine, University of Zagreb
Prof. Juraj Grizelj
Prof. Silvijo Vince
Prof. Nada Kučer
Prof. Danijel Špoljarić
Prof. Renata Barić Rafaj
Dr. Branimira Špoljarić
Ivan Butković (junior researcher)
Faculty of Veterinary Science, University of Thessaly
Veterinary Research Institute, Hellenic Agricultural Organization, Thessaly
Prof. Ekaterini Theodossiadou
Prof. Irene Valasi
Faculty of Veterinary Medicine, Ss. Cyril and Methodius University in Skopje
Prof. Toni Dovenski
Prof. Snježana Trojačanec
Ksenija Ilievska (junior researcher)
Animal Husbandry and Biotechnologies, The State Agrarian University of Moldova, Chisinau
Prof. Valentina Petcu
Prof. Elena Scripnic
Prof. Ana Chiţanu
Irina Blîndu (junior researcher)
Faculty of Veterinary Medicine, University of Applied Life Sciences, "Ion Ionescu de la Brad", Iasi
Prof. Gheorghe Savuța
Lecturer dr. Adriana Aniță
Iuliana Mihai (junior researcher)
Ioana Cristina Crivei (junior researcher)


A Short Description about user role.
Some quick example text to build on the card title and make up the bulk of the card's content.


WindowsMalwareCategory extends Enum
WindowsMalwareCategory class
Tags
Table of Contents
- ADWARE = "adware"
- AOL_EXPLOIT = "aolExploit"
- BACKDOOR = "backdoor"
- BEHAVIOR = "behavior"
- BROWSER_MODIFIER = "browserModifier"
- BROWSER_PLUGIN = "browserPlugin"
- COOKIE = "cookie"
- DIALER = "dialer"
- EMAIL_FLOODER = "emailFlooder"
- ENTERPRISE_UNWANTED_SOFTWARE = "enterpriseUnwantedSoftware"
- EXPLOIT = "exploit"
- FILESHARING_PROGRAM = "filesharingProgram"
- HIPS_RULE = "hipsRule"
- HOSTILE_ACTIVE_X_CONTROL = "hostileActiveXControl"
- ICQ_EXPLOIT = "icqExploit"
- INVALID = "invalid"
- The Enum WindowsMalwareCategory
- JOKE_PROGRAM = "jokeProgram"
- KEYLOGGER = "keylogger"
- KNOWN = "known"
- MALWARE_CREATION_TOOL = "malwareCreationTool"
- MONITORING_SOFTWARE = "monitoringSoftware"
- NUKER = "nuker"
- PASSWORD_STEALER = "passwordStealer"
- POLICY = "policy"
- POTENTIAL_UNWANTED_SOFTWARE = "potentialUnwantedSoftware"
- RANSOM = "ransom"
- REMOTE__CONTROL__SOFTWARE = "remoteControlSoftware"
- REMOTE_ACCESS_TROJAN = "remoteAccessTrojan"
- REMOTE_CONTROL_SOFTWARE = "remoteControlSoftware"
- SECURITY_DISABLER = "securityDisabler"
- SETTINGS_MODIFIER = "settingsModifier"
- SOFTWARE_BUNDLER = "softwareBundler"
- SPP = "spp"
- SPYWARE = "spyware"
- STEALTH_NOTIFIER = "stealthNotifier"
- TOOL = "tool"
- TOOL_BAR = "toolBar"
- TROJAN = "trojan"
- TROJAN_DENIAL_OF_SERVICE = "trojanDenialOfService"
- TROJAN_DOWNLOADER = "trojanDownloader"
- TROJAN_DROPPER = "trojanDropper"
- TROJAN_FTP = "trojanFtp"
- TROJAN_MASS_MAILER = "trojanMassMailer"
- TROJAN_MONITORING_SOFTWARE = "trojanMonitoringSoftware"
- TROJAN_PROXY_SERVER = "trojanProxyServer"
- TROJAN_TELNET = "trojanTelnet"
- UNKNOWN = "unknown"
- VIRUS = "virus"
- VULNERABILITY = "vulnerability"
- WORM = "worm"
- $_value : string
- The value of the enum
- $constants : mixed
- __construct() : mixed
- Create a new enum
- has() : bool
- Check if the enum has the given value
- is() : bool
- Check if the enum is defined
- toArray() : mixed
- Create a new class for the enum in question
- value() : string
- Get the value of the enum
Constants
ADWARE
public
mixed
ADWARE
= "adware"
AOL_EXPLOIT
public
mixed
AOL_EXPLOIT
= "aolExploit"
BACKDOOR
public
mixed
BACKDOOR
= "backdoor"
BEHAVIOR
public
mixed
BEHAVIOR
= "behavior"
BROWSER_MODIFIER
public
mixed
BROWSER_MODIFIER
= "browserModifier"
BROWSER_PLUGIN
public
mixed
BROWSER_PLUGIN
= "browserPlugin"
COOKIE
public
mixed
COOKIE
= "cookie"
DIALER
public
mixed
DIALER
= "dialer"
EMAIL_FLOODER
public
mixed
EMAIL_FLOODER
= "emailFlooder"
ENTERPRISE_UNWANTED_SOFTWARE
public
mixed
ENTERPRISE_UNWANTED_SOFTWARE
= "enterpriseUnwantedSoftware"
EXPLOIT
public
mixed
EXPLOIT
= "exploit"
FILESHARING_PROGRAM
public
mixed
FILESHARING_PROGRAM
= "filesharingProgram"
HIPS_RULE
public
mixed
HIPS_RULE
= "hipsRule"
HOSTILE_ACTIVE_X_CONTROL
public
mixed
HOSTILE_ACTIVE_X_CONTROL
= "hostileActiveXControl"
ICQ_EXPLOIT
public
mixed
ICQ_EXPLOIT
= "icqExploit"
INVALID
The Enum WindowsMalwareCategory
public
mixed
INVALID
= "invalid"
JOKE_PROGRAM
public
mixed
JOKE_PROGRAM
= "jokeProgram"
KEYLOGGER
public
mixed
KEYLOGGER
= "keylogger"
KNOWN
public
mixed
KNOWN
= "known"
MALWARE_CREATION_TOOL
public
mixed
MALWARE_CREATION_TOOL
= "malwareCreationTool"
MONITORING_SOFTWARE
public
mixed
MONITORING_SOFTWARE
= "monitoringSoftware"
NUKER
public
mixed
NUKER
= "nuker"
PASSWORD_STEALER
public
mixed
PASSWORD_STEALER
= "passwordStealer"
POLICY
public
mixed
POLICY
= "policy"
POTENTIAL_UNWANTED_SOFTWARE
public
mixed
POTENTIAL_UNWANTED_SOFTWARE
= "potentialUnwantedSoftware"
RANSOM
public
mixed
RANSOM
= "ransom"
REMOTE__CONTROL__SOFTWARE
public
mixed
REMOTE__CONTROL__SOFTWARE
= "remoteControlSoftware"
REMOTE_ACCESS_TROJAN
public
mixed
REMOTE_ACCESS_TROJAN
= "remoteAccessTrojan"
REMOTE_CONTROL_SOFTWARE
public
mixed
REMOTE_CONTROL_SOFTWARE
= "remoteControlSoftware"
SECURITY_DISABLER
public
mixed
SECURITY_DISABLER
= "securityDisabler"
SETTINGS_MODIFIER
public
mixed
SETTINGS_MODIFIER
= "settingsModifier"
SOFTWARE_BUNDLER
public
mixed
SOFTWARE_BUNDLER
= "softwareBundler"
SPP
public
mixed
SPP
= "spp"
SPYWARE
public
mixed
SPYWARE
= "spyware"
STEALTH_NOTIFIER
public
mixed
STEALTH_NOTIFIER
= "stealthNotifier"
TOOL
public
mixed
TOOL
= "tool"
TOOL_BAR
public
mixed
TOOL_BAR
= "toolBar"
TROJAN
public
mixed
TROJAN
= "trojan"
TROJAN_DENIAL_OF_SERVICE
public
mixed
TROJAN_DENIAL_OF_SERVICE
= "trojanDenialOfService"
TROJAN_DOWNLOADER
public
mixed
TROJAN_DOWNLOADER
= "trojanDownloader"
TROJAN_DROPPER
public
mixed
TROJAN_DROPPER
= "trojanDropper"
TROJAN_FTP
public
mixed
TROJAN_FTP
= "trojanFtp"
TROJAN_MASS_MAILER
public
mixed
TROJAN_MASS_MAILER
= "trojanMassMailer"
TROJAN_MONITORING_SOFTWARE
public
mixed
TROJAN_MONITORING_SOFTWARE
= "trojanMonitoringSoftware"
TROJAN_PROXY_SERVER
public
mixed
TROJAN_PROXY_SERVER
= "trojanProxyServer"
TROJAN_TELNET
public
mixed
TROJAN_TELNET
= "trojanTelnet"
UNKNOWN
public
mixed
UNKNOWN
= "unknown"
VIRUS
public
mixed
VIRUS
= "virus"
VULNERABILITY
public
mixed
VULNERABILITY
= "vulnerability"
WORM
public
mixed
WORM
= "worm"
Properties
$_value
The value of the enum
private
string
$_value
$constants
private
static mixed
$constants
= []
Methods
__construct()
Create a new enum
public
__construct(string $value) : mixed
Parameters
- $value : string
-
The value of the enum
Tags
Return values
mixed —has()
Check if the enum has the given value
public
has(string $value) : bool
Parameters
- $value : string
Return values
bool —the enum has the value
is()
Check if the enum is defined
public
is(string $value) : bool
Parameters
- $value : string
-
the value of the enum
Return values
bool —True if the value is defined
toArray()
Create a new class for the enum in question
public
toArray() : mixed
Tags
Return values
mixed —value()
Get the value of the enum
public
value() : string
Return values
string —value of the enum


Invitation to Montenegro, Italy, and Slovenia 2005
Dear potential Speaker:
On behalf of the organizing committee, I would like to extend a cordial invitation for you to attend one of the upcoming IPSI BgD multidisciplinary, interdisciplinary, and transdisciplinary conferences.
The first one will take place in Sveti Stefan, Montenegro: IPSI-2005 MONTENEGRO
Hotel Sveti Stefan (arrival: 1 October 05 / departure: 8 October 05) Deadlines: 1 May 05 (abstract) / 1 July 05 (full paper)
The second one will take place in Venice, Italy: IPSI-2005 VENICE Hotel Luna Baglioni (arrival: 9 November 05 / departure: 14 November 05)
Deadlines: 1 June 05 (abstract) / 1 August 05 (full paper) The third one will take place on the Bled lake, Slovenia: IPSI-2005 SLOVENIA Hotel Toplice (arrival: 8 December 05 / departure: 11 December 05)
Deadlines: 1 July 05 (abstract) & 1 September 05 (full paper)
All IPSI BgD conferences are non-profit. They bring together the elite of the world science; so far, we have had seven Nobel Laureates speaking at the opening ceremonies. The conferences always take place in some of the most attractive places of the world. All those who come to IPSI conferences once, always love to come back (because of the unique professional quality and the extremely creative atmosphere); lists of past participants are on the web, as well as details of future conferences. These conferences are in line with the newest recommendations of the US National Science Foundation and of the EU research sponsoring agencies, to stress multidisciplinary, interdisciplinary, and transdisciplinary research (M+I+T++ research). The speakers and activities at the conferences truly support this type of scientific interaction.
One of the main topics of this conference is "E-education and E-business with Special Emphasis on Semantic Web and Web Datamining" Other topics of interest include, but are not limited to:
* Internet
* Computer Science and Engineering
* Mobile Communications/Computing for Science and Business
* Management and Business Administration
* Education
* e-Medicine
* e-Oriented Bio Engineering/Science and Molecular Engineering/Science
* Environmental Protection
* e-Economy
* e-Law
* Technology Based Art and Art to Inspire Technology Developments
* Internet Psychology
If you would like more information on either conference, please reply to this e-mail message. If you plan to submit an abstract and paper, please let us know immediately for planning purposes. Note that you can submit your paper also to the IPSI Transactions journal.
Sincerely Yours,
Prof. V. Milutinovic, Chairman,
IPSI BgD Conferences


---
layout: post
title: New storyboard template for Adobe InDesign
date: '2017-05-05T08:09:39+02:00'
categories:
- Templates
picture_url: https://film-Storyboards.tumblr.com/post/160333718866/here-is-a-new-Storyboards-template-for-adobe
---
Here is a new Storyboards template for Adobe InDesign (InDesign Markup / IDML format). The frame ratio is 2:1 (18:9), which is the ratio of cinematographer Vittorio Storaro’s universal film format proposal called Univisium.
If you are curious about Univisium, you should read Vittorio Storaro’s PDF presentation of the format.
More and more feature films use this format. Immersive 360° films such as virtual reality videos also use an equirectangular image format with a 2:1 aspect ratio.
This 18 sheets layout is set on a Din A4 horizontal (landscape) format, ready to use for print and screen presentations. This template lets you write your screenplay or treatment notes alongside your pictures and number them. Simply edit the Text and Images layers in InDesign. The text is set in Avenir Light in 10pt. For images, just drop your pictures in the black Images layer. You can toggle on and off the rule of thirds guides in the locked layer to help you frame your compositions.
Fill in the title page, replace the logo and credentials. To edit the footer at once, use the A-Master for white background pages or the B-master for black background.


Telkom rubbishes talk of hostile bid for Cell C
by Duncan McLeodTelkom on Tuesday rubbished talk among some JSE traders that it is planning a hostile bid for Cell C.
Speculation started to swirl on Monday afternoon that the company was looking to buy up Cell C’s debt and that this was a precursor to some sort of hostile takeover attempt.
A Telkom spokeswoman on Monday said emphatically that there is no hostile offer being planned for the deeply indebted mobile operator.
The speculation may have its roots in a recent meeting Telkom had with a financial adviser to Cell C lenders.
“Telkom has made an offer to acquire 100% of Cell C shares,” the spokeswoman said. “Telkom met with the lenders’ financial adviser, at the adviser’s request, to discuss Telkom’s offer.”
She added that Telkom “believes it has made a compelling offer that is beneficial to all stakeholders”.
The latest speculation comes a day after MTN and Cell C said they had signed an expanded roaming agreement that would greatly deepen cooperation between the two operators. The agreement could complicate Telkom’s bid for Cell C, with some analysts warning Telkom may have to pay more.
The new “long-form roaming and services agreement” will allow Cell C to roam on MTN’s network in all areas of South Africa. Previously, it only had access to MTN’s network in selected parts of the country. The deal, which will take up to 36 months to implement, will allow Cell C to cut the capital outlay on its access network and should help it improve its precarious financial position.
Locked in talks
Responding to the news of the new roaming deal, Telkom said on Monday that it expects the “parties involved” will have considered the deal “in the context of the discussions” with it.
“Telkom notes the decision between Cell C and MTN to conclude a roaming agreement which remains subject to conditions,” it said.
Cell C, meanwhile, remains locked in talks regarding a planned recapitalisation involving the Buffet Consortium and other investors. It still hopes to have that deal concluded by year-end. — © 2019 NewsCentral Media


Lists
My top 3 languages:
JavaScript
Python
CoffeScript
Things I like:
Pasta
Pizza:
Sauce and mushrooms
4 cheeses
Pineaples:
It's salty
It's sweet
It's a bit sour
Mandolin


devito.ir.equations package¶
Submodules¶
devito.ir.equations.algorithms module¶
devito.ir.equations.equation module¶
-
class
devito.ir.equations.equation.
LoweredEq
(sympy.Eq)[source]¶ Bases:
sympy.core.relational.Equality
,devito.ir.equations.equation.IREq
LoweredEq(devito.LoweredEq, **kwargs) LoweredEq(lhs, rhs, **kwargs)
A SymPy equation with associated
IterationSpace
andDataSpace
.When created as
LoweredEq(sympy.Eq)
, the iteration and data spaces are automatically derived from analysis ofexpr
.When created as
LoweredEq(devito.LoweredEq, **kwargs)
, the keyword arguments can be anything that appears inLoweredEq._state
(i.e., ispace, dspace, …).When created as
LoweredEq(lhs, rhs, **kwargs)
, all keywords inLoweredEq._state
must appear inkwargs
.-
default_assumptions
= {}¶
-
func
(*args)[source]¶ The top-level function in an expression.
The following should hold for all objects:
>> x == x.func(*x.args)
>>> from sympy.abc import x >>> a = 2*x >>> a.func <class 'sympy.core.mul.Mul'> >>> a.args (2, x) >>> a.func(*a.args) 2*x >>> a == a.func(*a.args) True
-
reads
¶
-
writes
¶
-
xreplace
(rules)[source]¶ Replace occurrences of objects within the expression.
- rule : dict-like
- Expresses a replacement rule
xreplace : the result of the replacement
>>> from sympy import symbols, pi, exp >>> x, y, z = symbols('x y z') >>> (1 + x*y).xreplace({x: pi}) pi*y + 1 >>> (1 + x*y).xreplace({x: pi, y: 2}) 1 + 2*pi
Replacements occur only if an entire node in the expression tree is matched:
>>> (x*y + z).xreplace({x*y: pi}) z + pi >>> (x*y*z).xreplace({x*y: pi}) x*y*z >>> (2*x).xreplace({2*x: y, x: z}) y >>> (2*2*x).xreplace({2*x: y, x: z}) 4*z >>> (x + y + 2).xreplace({x + y: 2}) x + y + 2 >>> (x + 2 + exp(x + 2)).xreplace({x + 2: y}) x + exp(y) + 2
xreplace doesn’t differentiate between free and bound symbols. In the following, subs(x, y) would not change x since it is a bound symbol, but xreplace does:
>>> from sympy import Integral >>> Integral(x, (x, 1, 2*x)).xreplace({x: y}) Integral(y, (y, 1, 2*y))
Trying to replace x with an expression raises an error:
>>> Integral(x, (x, 1, 2*x)).xreplace({x: 2*y}) ValueError: Invalid limits given: ((2*y, 1, 4*y),)
- replace: replacement capable of doing wildcard-like matching,
- parsing of match, and conditional replacements
- subs: substitution of subexpressions as defined by the objects
- themselves.
-
-
class
devito.ir.equations.equation.
ClusterizedEq
(devito.IREq, **kwargs)[source]¶ Bases:
sympy.core.relational.Equality
,devito.ir.equations.equation.IREq
,devito.symbolics.extended_sympy.FrozenExpr
,devito.tools.abc.Pickable
ClusterizedEq(lhs, rhs, **kwargs)
A SymPy equation with associated
IterationSpace
andDataSpace
.There are two main differences between a
LoweredEq
and a ClusterizedEq:* In a ClusterizedEq, the iteration and data spaces must *always* be provided by the caller. * A ClusterizedEq is "frozen", meaning that any call to ``xreplace`` will not trigger re-evaluation (e.g., mathematical simplification) of the expression.
These two properties make a ClusterizedEq suitable for use in a
Cluster
.-
default_assumptions
= {}¶
-
-
class
devito.ir.equations.equation.
DummyEq
(expr)[source]¶ Bases:
devito.ir.equations.equation.ClusterizedEq
DummyEq(lhs, rhs)
A special
ClusterizedEq
that tracks no iteration or data spaces.-
default_assumptions
= {}¶
-


Your inventory
North
West
South
East
You can also use the arrow keys to move!
If nothing happens after killing all the monsters, try moving.
Log
Ok
Ok
Yes
No
Next
Next
Next


Minor Courses
Students may obtain a minor in the CSE Department, they must complete the compulsory course and any 4 courses from the rest.
| Compulsory |
Course Code |
Course Title |
Credit Hours |
|
CSE 103 |
Structured Programming |
3 |
|
CSE 104 |
Structured Programming Lab |
1 |
| Any Four |
Course Code |
Course Title |
Credit Hours |
|
CSE 303 |
Database Systems |
3 |
|
CSE 311 |
Automated Office Management |
3 |
|
CSE 403 |
E-Commerce |
3 |
|
CSE 406 |
Embedded Systems Design |
3 |
|
CSE 412 |
Java Programming and Java Programming Lab |
3+1 |
|
CSE 416 |
.Net Programming using C# |
3 |
|
CSE 419 |
Management Information System |
3 |
|
CSE 427 |
Multimedia Design and Development |
3 |
|
CSE 428 |
Enterprise System Design and Development |
3 |
|
CSE 429 |
Digital Image Processing |
3 |
|
CSE 447 |
VLSI Design |
3 |
|
CSE 480 |
web Technology |
3 |


This topic reveals some nitty-gritty details about Circumflex Web Framework.
The central abstractions of the route matching mechanism are:
Match
— holds parameters extracted during successful match (already familiar helper, uri
, is Match
actually);Matcher
— performs actual matching and yields a sequence of Match
objects on success.Match
objects are designed to be used inside attached blocks of routes, where you can naturally assume that match succeeded:
get("/:name") = uri("name")
Match
also has name
which reflects the context where match has occured. URI-based matcher returns Match
with name uri
while headers-based matchers create Match
objects with the name of corresponding HTTP header.
You can lookup certain Match
object in CircumflexContext
by it's name:
get("/foo" & Accept("text/:format")) = ctx("Accept") match {
case m: Match => "Requested format is " + m("format")
case _ => ""
}
In general you don't have to lookup Match
objects, the param
helper can retrieve named parameters from all matches that appear in CircumflexContext
. So the previous example could be rewritten in much more convenient manner:
get("/foo" & Accept("text/:format")) = "Requested format is " + param("format")
However, there are situations where looking up a Matcher
can come in handy. For example, you cannot access splats (wildcard matches) or indexed parameters with param
:
get("/foo" & Accept("text/+")) = ctx("Accept") match {
case m: Match => "Requested format is " + m(1)
case _ => ""
}
Standard RegexMatcher
can also accept an arbitrary regular expression, the groups will be accessible from Match
by their index:
get("/posts/(\\d+)".r) = {
val id = uri(1).toLong
// lookup the post by id and render response
"..."
}
You may optionally specify the prefix
for request router. All URI-based matchers inside the router will be prepended by this prefix:
class PostsRouter extends RequestRouter("/posts") {
get("/") = "Showing posts" // matches GET /posts/
get("/show/:id") = "Post " + param("id") // matches GET /posts/show/149
}
Alternatively, you can let the enclosing router specify a prefix for subrouter:
class SubRouter(prefix: String) extends RequestRouter(prefix)
class MainRouter extends RequestRouter {
new SubRouter("/prefix-a")
new SubRouter("/prefix-b")
}
Note that main request routers should have the default zero-arguments constructor, so the prefix must be hardcoded. Generally, main routers have ""
prefix (unless different filter mappings are specified in web.xml
).


jpgs (short version of Java Postgres Server) is a java implementation of the server side of the Postgres Frontend/Backend Protocol.
This means that with this library it is possible to create a server that is binary compatible with Postgres 9.4. Written mostly for research purposes, this project can be used to mock a Postgres database for test purposes or to provide a standard and well known interface to a new data container.
There are three big entry points to use this project:


gpg.js live demo
This project [
github.com/primiano/gpg.js
] is a pure HTML/JS port of the
GnuPG project
via emscripten / asm.js.
It is purely a dev concept and should not be used with production keys. A persistent file-system is kept in the browser through IndexedDB.
Args
gpg
Stdin
Output


Politic's plan will invest in making New Zealand a better place to live, work, visit, and do business. Our policies will see major investments in housing, health, education, police, and infrastructure.
We are currently low on funding so we will be making 50,000 less houses. We will still be making 50,000 homes.
Increasing government funding for all practices that lower their fees by $10, lowering the average non-VLCA fee from $42 to $32 and the maximum fee from $69 to $59
Clean water is the birth-right of all of us, and vital to our continued prosperity. Our rivers and lakes are a taonga of huge significance to Māori, a favourite place of recreation for New Zealanders. Water underpins our agriculture.
Build light rail from the CBD to Auckland Airport. This will be part of a new light rail network that will be built over the next decade with routes to the central suburbs, the airport, and West Auckland, and will later be extended to the North Shore
Political believes education gives our young people the freedom and opportunities to be the best they can be and contribute to making New Zealand an even better place to live.
Introduce a Young Entrepreneurs Policy, allowing any New Zealander aged 18 to 23 to apply for up to $20,000 to start a new business based on an innovative idea.
Politcal has designed a Families Package that delivers more money to families with children and reduces child poverty while freeing up more than $2 billion over four years.


Congratulations on choosing the Apache C++ Standard Library, developed and donated to the Apache Software Foundation by Rogue Wave Software. You can use this product with confidence: it is based on the final standard for the C++ language and library ratified in 1998 by the American National Standards Institute (ANSI) and the International Standards Organization (ISO).
Since its development by Dr. Bjarne Stroustrup in the 1980s, the C++ language has been widely used by professional programmers for the world's big, complex applications in telecommunications, finance, business, embedded systems, and computer-aided design. The final standardization of the C++ library now makes it easier to learn C++ and to use it across a wide variety of platforms.
Standardization improves portability and stability. You can build reliable applications faster, and maintain them with less cost and effort, using the C++ Standard Library.


If you require any more information or have any questions about our site's disclaimer, please feel free to contact us. Our Disclaimer was generated with the help of the Disclaimer Generator
All the information on this website - {{ policy.location }} - is published in good faith and for general information purpose only. Memory Game does not make any warranties about the completeness, reliability and accuracy of this information. Any action you take upon the information you find on this website (Memory Game), is strictly at your own risk. Memory Game will not be liable for any losses and/or damages in connection with the use of our website.
From our website, you can visit other websites by following hyperlinks to such external sites. While we strive to provide only quality links to useful and ethical websites, we have no control over the content and nature of these sites. These links to other websites do not imply a recommendation for all the content found on these sites. Site owners and content may change without notice and may occur before we have the opportunity to remove a link which may have gone 'bad'.
Please be also aware that when you leave our website, other sites may have different privacy policies and terms which are beyond our control. Please be sure to check the Privacy Policies of these sites as well as their "Terms of Service" before engaging in any business or uploading any information. Our Privacy Policy was created by the Privacy Policy Generator.
By using our website, you hereby consent to our disclaimer and agree to its terms.
Should we update, amend or make any changes to this document, those changes will be prominently posted here.
Email: {{ policy.email }}


BEST-OS
Buying/Exchanging/Selling Textbooks (and Other Stuff)
Create an account
Login
Delete your account
View the database
Delete all accounts
(click only if you mean it)


{% extends 'core/base.html' %} {% load breadcrumbs from directory_components %} {% block content %}
You can still give feedback on the UK’s temporary tariff regime rates.
Submit your feedback before the form closes on 30 April 2020.
If you need help, call our helpline on<PHONE_NUMBER>0


Learn about the people behind ScholarJet
Tuan came to the United States from Vietnam at the age of 10. He graduated from Boston Latin Academy with high honors. To pay for college, Tuan took matters into his own hands, applied for over 40 scholarships and earned a full ride to get his Bachelor’s degree in Mechanical Engineering from Northeastern University. He is a Boston Public High School Scholar, Yawkey Foundation Scholar and National Association of Asian American Professional Scholar.
Based on his own scholarship experiences, Tuan founded ScholarJet to help make college scholarships more accessible for students bringing out their full potential in hopes that their talents and skills can help create a better future. Tuan is one of the leaders behind ScholarJet’s mission. Ask Tuan about his martial arts skills, if you dare.
Joe is a Brooklyn, NY native who pursued his passion for engineering at Northeastern University, earning a Bachelor's in Mechanical Engineering and a Master's in Engineering Management. He gained engineering experience through co-ops at GE Aviation, Instron and Medtronic.
Joe faced many challenges trying to pay for college and navigating scholarships. Based on his personal experience and seeing many of his peers left behind, he realized the need for a more accessible scholarship model and co-founded ScholarJet. With his engineering mindset, Joe leads ScholarJet’s operations every day.
Around Boston, you’ll often find Joe trying to reach new heights at a local rock climbing gym or zooming around the city on his road bike.
Francisco came to the United States from the Dominican Republic with his mother and brothers when he was 11 years old. He lived and went to school in Boston and went back to the Dominican Republic when he was 14, a decision his mother took to keep him away from the rising crime in their community. At the age of 18, after completing high school, he came back to the United States to pursue a college degree in Computer Science. He first obtained his Associate’s degree in Computer Science from Bunker Hill Community College, and scored a full scholarship to Northeastern University for a degree in Computer Science. Francisco is the man behind all of ScholarJet’s platform code.
Jasmine hails from Bellevue, WA and is a true Pacific Northwest native. She earned her Bachelor’s in Business Administration with a focus in Marketing at the University of Washington and was granted both College and Departmental Honors. She later earned her Master’s in Science for Interactive Digital Media at Trinity College Dublin with Distinction.
Ashley facilitates lead generation strategies, tools and best practices that help ScholarJet get in front of companies, both online and offline.
Ashley brings eight years of marketing, sales and social media expertise, specifically within the talent space, having held individual contributor and manager roles at Bullhorn, John Leonard Employment Services and WinterWyman. Currently she owns her own content consulting firm out of the North Shore of Boston, UntapSocial, coaching professional services organizations to better leverage content and social selling best practices for lead generation and talent acquisition. She's also a national speaker on social media for sales and employer branding.
Ashley facilitates lead generation strategies, tools and best practices that help ScholarJet get in front of companies, both online and offline.
Lindsey Williams has a passion for education, the arts, science and, most prominently, how these subjects can be used to empower other people to pursue their interests. She found this intersection in the core values of Scholar Jet and quickly found herself involved with graphic design and student outreach. After graduating Summa Cum Laude from Rutgers University with a double major in neurobiology and psychology, she subsequently pursued academic research. However, her insatiable interest in working directly with students has driven her into her current roles as the Creative Director of ScholarJet and the Founder of Boston Creative Collective, an organization that connects local artist to jobs in the Boston area.


flixel.util.FlxVelocity
- type
- class
Static Methods
- parameters
Source
The FlxSprite on which the acceleration will be set
Speed
The speed it will accelerate in pixels per second
MaxXSpeed
The maximum speed in pixels per second in which the sprite can move horizontally
MaxYSpeed
The maximum speed in pixels per second in which the sprite can move vertically
- parameters
Source
The FlxSprite on which the acceleration will be set
Dest
The FlxSprite where the source object will move towards
Speed
The speed it will accelerate in pixels per second
MaxXSpeed
The maximum speed in pixels per second in which the sprite can move horizontally
MaxYSpeed
The maximum speed in pixels per second in which the sprite can move vertically
- parameters
Source
The FlxSprite on which the acceleration will be set
Target
The FlxPoint coordinates to move the source FlxSprite towards
Speed
The speed it will accelerate in pixels per second
MaxXSpeed
The maximum speed in pixels per second in which the sprite can move horizontally
MaxYSpeed
The maximum speed in pixels per second in which the sprite can move vertically
- parameters
Source
The FlxSprite on which the acceleration will be set
Touch
The FlxTouch on which to accelerate towards
Speed
The speed it will accelerate in pixels per second
MaxXSpeed
The maximum speed in pixels per second in which the sprite can move horizontally
MaxYSpeed
The maximum speed in pixels per second in which the sprite can move vertically
- parameters
Velocity
Any component of velocity (e.g. 20).
Acceleration
Rate at which the velocity is changing.
Drag
Really kind of a deceleration, this is how much the velocity changes if Acceleration is not set.
Max
An absolute value cap for the velocity (0 for no cap).
- returns
- The altered Velocity value.
- parameters
Source
The FlxSprite to move
Speed
The speed it will move, in pixels per second (default is 60 pixels/sec)
MaxTime
Time given in milliseconds (1000 = 1 sec). If set the speed is adjusted so the source will arrive at destination in the given number of ms
- parameters
Source
The FlxSprite on which the velocity will be set
Dest
The FlxSprite where the source object will move to
Speed
The speed it will move, in pixels per second (default is 60 pixels/sec)
MaxTime
Time given in milliseconds (1000 = 1 sec). If set the speed is adjusted so the source will arrive at destination in the given number of ms
- parameters
Source
The FlxSprite to move
Target
The FlxPoint coordinates to move the source FlxSprite towards
Speed
The speed it will move, in pixels per second (default is 60 pixels/sec)
MaxTime
Time given in milliseconds (1000 = 1 sec). If set the speed is adjusted so the source will arrive at destination in the given number of ms
- parameters
source
The FlxSprite to move
speed
The speed it will move, in pixels per second (default is 60 pixels/sec)
maxTime
Time given in milliseconds (1000 = 1 sec). If set the speed is adjusted so the source will arrive at destination in the given number of ms
- parameters
Angle
The angle (in degrees) calculated in clockwise positive direction (down = 90 degrees positive, right = 0 degrees positive, up = 90 degrees negative)
Speed
The speed it will move, in pixels per second sq
- returns
- A FlxPoint where FlxPoint.x contains the velocity x value and FlxPoint.y contains the velocity y value
- parameters
Parent
The FlxSprite to get the facing value from
Speed
The speed it will move, in pixels per second
- returns
- An FlxPoint where FlxPoint.x contains the velocity x value and FlxPoint.y contains the velocity y value


|
OpenM++ runtime library (libopenm)
|
log implementation class: log to console and into log files. More...
Public Member Functions | |
| Log (bool i_logToConsole=false, const char *i_basePath="openm.log", bool i_logToFile=false, bool i_useTimeStamp=false, bool i_usePidStamp=false) | |
| create log instance. More... | |
| ~Log (void) noexcept | |
| cleanup log resources | |
| void | init (bool i_logToConsole, const char *i_basePath, bool i_logToFile, bool i_useTimeStamp=false, bool i_usePidStamp=false, bool i_noMsgTime=false, bool i_isLogSql=false) noexcept override |
| re-initialize log file name(s) and other log settings. More... | |
| const string | lastLogPath (void) noexcept override |
| if log to file enabled return "last" log file path. | |
| const string | stampedLogPath (void) noexcept override |
| if log to "stamped" file enabled return "stamped" log file path. | |
| const string | getMessage (const char *i_sourceMsg) noexcept override |
| get language-specific message by source non-translated message | |
| const list< string > | getLanguages (void) noexcept override |
| get list of language name for the messages, eg: (en-ca, en) | |
| const unordered_map< string, string > | getLanguageMessages (void) noexcept override |
| get copy of language-specific messages | |
| void | swapLanguageMessages (const list< string > &i_langLst, unordered_map< string, string > &io_msgMap) noexcept override |
| set language-specific messages and update list of languages | |
| void | logMsg (const char *i_msg, const char *i_extra=NULL) noexcept override |
| log message | |
| void | logFormatted (const char *i_format,...) noexcept override |
| log message formatted with vsnprintf() | |
| void | logErr (const exception &i_ex, const char *i_msg=nullptr) noexcept override |
| log exception | |
| void | logSql (const char *i_sql) noexcept override |
| log sql query | |
| Public Member Functions inherited from openm::LogBase | |
| LogBase (bool i_logToConsole, const char *i_basePath, bool i_logToFile, bool i_useTimeStamp, bool i_usePidStamp, bool i_noMsgTime) | |
| create log instance. More... | |
| ~LogBase (void) noexcept | |
| cleanup log resources | |
| const string | timeStamp (void) noexcept override |
| return timestamp part of log file name: 2012_08_17_16_04_59_148. More... | |
| const bool | isEnabled (void) noexcept override |
| return true if log to console or to file enabled. | |
| void | init (bool i_logToConsole, const char *i_basePath, bool i_logToFile, bool i_useTimeStamp=false, bool i_usePidStamp=false, bool i_noMsgTime=false) noexcept |
| re-initialize log file name(s) and other log settings. More... | |
| void | setRank (int i_rank, int i_worldSize) noexcept override |
| use process rank as log message prefix | |
| Public Member Functions inherited from openm::ILog | |
| virtual void | swapLanguageMessages (const std::list< std::string > &i_langLst, std::unordered_map< std::string, std::string > &io_msgMap) noexcept=0 |
| set language-specific messages and update list of languages | |
Additional Inherited Members | |
| Protected Member Functions inherited from openm::LogBase | |
| void | doLogMsg (const char *i_msg, const char *i_extra) noexcept |
| implement log message: log to console and log files | |
| bool | logFileCreate (const string &i_path) noexcept |
| void | writeToLog (ostream &i_ost, const chrono::system_clock::time_point &i_msgTime, const char *i_msg, const char *i_extra=nullptr) |
| Protected Attributes inherited from openm::LogBase | |
| recursive_mutex | theMutex |
| bool | isConsoleEnabled |
| bool | isLastEnabled |
| bool | isLastCreated |
| bool | isStampedEnabled |
| bool | isStampedCreated |
| string | tsPart |
| string | pidPart |
| string | lastPath |
| string | stampedPath |
| bool | isNoMsgTime |
| string | rankPrefix |
| bool | isMsgRank |
| char | msgBuffer [msgBufferSize+1] |
| Static Protected Attributes inherited from openm::LogBase | |
| static const size_t | msgBufferSize = 32768 |
log implementation class: log to console and into log files.
log can be enabled/disabled for 3 independent streams:
console - cout stream
"last run" file - log file with specified name, truncated on every model run
"stamped" file - log file with unique name, created for every model run
"stamped" name produced from "last run" name by adding time-stamp and pid-stamp, i.e.:
modelOne.log => modelOne.2012_08_17_16_04_59_148.1234.log
| Log::Log | ( | bool | i_logToConsole = false , |
| const char * | i_basePath = "openm.log" , |
||
| bool | i_logToFile = false , |
||
| bool | i_useTimeStamp = false , |
||
| bool | i_usePidStamp = false |
||
| ) |
create log instance.
| [in] | i_logToConsole | if true then log to console |
| [in] | i_basePath | path to "last" log file, if NULL or empty "" then no log file |
| [in] | i_logToFile | if true then enable log to "last" file |
| [in] | i_useTimeStamp | if true then use timestamp suffix in "stamped" file name |
| [in] | i_usePidStamp | if true then use PID suffix in "stamped" file name |
|
overridevirtualnoexcept |
re-initialize log file name(s) and other log settings.
| [in] | i_logToConsole | if true then log to console |
| [in] | i_basePath | path to "last" log file, if NULL or empty "" then no log file |
| [in] | i_logToFile | if true then enable log to "last" file |
| [in] | i_useTimeStamp | if true then use timestamp suffix in "stamped" file name |
| [in] | i_usePidStamp | if true then use PID suffix in "stamped" file name |
| [in] | i_noMsgTime | if true then not prefix log messages with date-time |
| [in] | i_isLogSql | if true then log SQL into log file |
Implements openm::ILog.


{% extends 'base.html' %} {% block Content %}
We would like you to Enter your ID so we can direct you to our patients for consult please.
{{ Message }}


{% extends "base.html" %} {% block title %}RMG: Input File Generated{% endblock %} {% block navbar_items %}
You have successfully created an RMG-Py input file to use for running RMG! You may now download it by clicking on the link below.
Now, you can run the input file using a copy of RMG-Py installed on your local machine or server. {% endblock %}


Almost 500 Gardaí disciplined in less than three years
by Josh CrosbieNearly 500 Gardaí have faced disciplinary action in less than three years.
Breaches of discipline can result in officers being sacked or having their wages cut.
These figures show there has been a decline in disciplinary cases within the force over the past three years.
Justice Minister Charlie Flanagan released the figures to Fianna Fáil's Jim O' Callaghan following a request.
They show 190 officers were punished in 2017, 167 in 2018 and so far this year 136 members of on An Garda Síochána have been disciplined.
The numbers also include 14 sergeants or higher-ranked Gardaí this year.
As part of the 'Policing Service for the Future' report, a Discipline Review Committee has been set up to oversee the process.


Percentext brings traditional DOM arrangement to text-based elements, allowing developers and designers the ability to quickly, easily and responsively size headers to be 'just right' across devices.
Many people who find it irksome to deal with font sizes use FitText.js. FitText is a great little plugin, but it isn't quite the same as Percentext. FitText arbitrarily sets font-size to be equal to a fraction of the parent container's width, allowing users to tweak via a 'compressor' to get the size just right.
Percentext's advantage is that it allows you to set a percentage and be done with it—no tweaking required. It also lets you achieve some pretty cool effects, without much work. The downside to this convenience is performance; FitText is a very simple plugin that works lightning fast. Percentext is pretty quick too, but it can be a bit sluggish if you have many headers that you wish to size in preciseMode.
If you're happy with the default settings, you can just call it on any element you want:
The default assumes you want the header's text to take up 100% of the width. If you want to specify a custom width, you can do so in the following ways:
There are a whole bunch of ways to customize Percentext to suit your needs (see below), but one more critical option to know about: Precise Mode.
Precise mode isn't happy to just grab the most appropriate font size, it uses letter spacing to try and match your requested width to the pixel. The downside is it can be pretty greedy with your CPU's cycles. If you're noticing the performance of Percentext leaves something to be desired, turn it off like so:
Percentext features a number of options that allow you to change how the plugin works. Most are pretty self-explanatory, but there are some pretty cool tweaks that might not be immediately obvious.
All currently-unfixed known issues are listed here:
This plugin released under the MIT open-source license. You can read all about it here, but the long and short of it is you can do pretty much whatever you want with this plugin, personal or commercial, as long as you give me credit and don't hold me liable for anything.
Are you using this plugin? I'd love to see what you've done with it! Please drop a line and let me know =)


DTCollectionViewManager
This is a sister-project for DTTableViewManager - great tool for UITableView management, built on the same principles.
Powerful generic-based UICollectionView management framework, written in Swift.
- Features
- Requirements
- Installation
- Quick start
- Usage
- Intro - Mapping and Registration, Data Models
- Storage classes - Memory Storage, CoreDataStorage, RealmStorage, Diffable Datasources in iOS13
- Reacting to events - Event types, Events configuration
- Advanced Usage
- Thanks
Features
- [x] Powerful mapping system between data models and cells, headers and footers
- [x] Support for all Swift types as data models
- [x] Support for diffable datasources in iOS 13
- [x] Powerful events system, that covers all of UICollectionView delegate and datasource methods
- [x] Views created from code, XIB, or storyboard
- [x] Flexible Memory/CoreData/Realm.io storage options
- [x] Automatic datasource and interface synchronization.
- [x] Automatic XIB registration and dequeue
- [x] Support for Drag&Drop for iOS 11 and higher
- [x] Can be used with UICollectionViewController, or UIViewController with UICollectionView, or any other class, that contains UICollectionView
- [x] Complete documentation
Requirements
- Xcode 9 and higher
- iOS 8.0 and higher / tvOS 9.0 and higher
- Swift 4.2 and higher
Installation
Swift Package Manager(requires Xcode 11)
Add package into Project settings -> Swift Packages
CocoaPods:
pod 'DTCollectionViewManager'
Quick start
Let’s say you have an array of Posts you want to display in UICollectionView. To quickly show them using DTCollectionViewManager, here’s what you need to do:
- Create UICollectionViewCell subclass, let’s say PostCell. Adopt ModelTransfer protocol
class PostCell : UICollectionViewCell, ModelTransfer {
func update(with model: Post) {
// Fill your cell with actual data
}
}
Declare your class as
DTCollectionViewManageable
, and it will be automatically injected withmanager
property, that will hold an instance ofDTCollectionViewManager
.Make sure your UICollectionView outlet is wired to your class and call registration methods (typically in viewDidLoad method):
class PostsViewController: UIViewController, DTCollectionViewManageable {
@IBOutlet weak var collectionView: UICollectionView!
override func viewDidLoad() {
super.viewDidLoad()
manager.register(PostCell.self)
}
}
ModelType will be automatically gathered from your PostCell
. If you have a PostCell.xib file, it will be automatically registered for PostCell. If you have a storyboard with PostCell, set it’s reuseIdentifier to be identical to class - “PostCell”.
- Add your posts!
manager.memoryStorage.addItems(posts)
That’s it! It’s that easy!
Usage
Mapping and registration
Cells:
register(_:)
registerNibNamed(_:for:)
registerNibless(_:)
Headers and footers:
registerHeader(_:)
registerNibNamed(_:forHeader:)
registerNiblessHeader(_:)
registerFooter(_:)
registerNibNamed(_:forFooter:)
registerNiblessFooter(_:)
Supplementaries:
registerSupplementary(_:forKind:)
registerNibNamed(_:forSupplementary:ofKind:)
registerNiblessSupplementary(_:forKind:)
Data models
DTCollectionViewManager
supports all Swift and Objective-C types as data models. This also includes protocols and subclasses.
protocol Food {}
class Apple : Food {}
class Carrot: Food {}
class FoodCollectionViewCell : UICollectionViewCell, ModelTransfer {
func update(with model: Food) {
// Display food in a cell
}
}
manager.register(FoodCollectionViewCell.self)
manager.memoryStorage.addItems([Apple(),Carrot()])
Storage classes
DTModelStorage is a framework, that provides storage classes for DTCollectionViewManager
. By default, storage property on DTCollectionViewManager
holds a MemoryStorage
instance.
MemoryStorage
MemoryStorage
is a class, that manages UICollectionView models in memory. It has methods for adding, removing, replacing, reordering models etc. You can read all about them in DTModelStorage repo. Basically, every section in MemoryStorage
is an array of SectionModel
objects, which itself is an object, that contains an array of items.
CoreDataStorage
CoreDataStorage
is meant to be used with NSFetchedResultsController
. It automatically monitors all NSFetchedResultsControllerDelegate methods and updates UI accordingly to it’s changes. All you need to do to display CoreData models in your UICollectionView, is create CoreDataStorage object and set it on your storage
property of DTCollectionViewManager
.
It also recommended to use built-in CoreData updater to properly update UICollectionView:
manager.collectionViewUpdater = manager.coreDataUpdater()
Standard flow for creating CoreDataStorage
can be something like this:
let request = NSFetchRequest<Post>()
request.entity = NSEntityDescription.entity(forEntityName: String(Post.self), in: context)
request.fetchBatchSize = 20
request.sortDescriptors = [NSSortDescriptor(key: "id", ascending: true)]
let fetchResultsController = NSFetchedResultsController(fetchRequest: request, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
_ = try? fetchResultsController.performFetch()
manager.storage = CoreDataStorage(fetchedResultsController: fetchResultsController)
Keep in mind, that MemoryStorage is not limited to objects in memory. For example, if you have CoreData database, and you now for sure, that number of items is not big, you can choose not to use CoreDataStorage and NSFetchedResultsController. You can fetch all required models, and store them in MemoryStorage.
RealmStorage
RealmStorage
is a class, that is meant to be used with realm.io databases. To use RealmStorage
with DTCollectionViewManager
, add following line to your Podfile:
pod 'DTModelStorage/Realm'
If you are using Carthage, RealmStorage
will be automatically built along with DTModelStorage
.
Diffable datasources in iOS 13
Diffable datasources is a cool new feature, that is introduced in UIKit in iOS / tvOS 13. DTCollectionViewManager
provides a powerful integration layer with it, but in order to understand how this layer works, it’s highly recommended to check out great Advances in UI Data Sources WWDC session.
If you don’t use DTCollectionViewManager
, you would typically create diffable datasource like so (taken from Apple’s sample code on diffable datasources):
dataSource = UICollectionViewDiffableDataSource
<Section, MountainsController.Mountain>(collectionView: mountainsCollectionView) {
(collectionView: UICollectionView, indexPath: IndexPath,
mountain: MountainsController.Mountain) -> UICollectionViewCell? in
guard let mountainCell = collectionView.dequeueReusableCell(
withReuseIdentifier: LabelCell.reuseIdentifier, for: indexPath) as? LabelCell else {
fatalError("Cannot create new cell") }
mountainCell.label.text = mountain.name
return mountainCell
}
One of DTCollectionViewManager
s main goals is to get rid of String identifiers, and to handle cell creation, as well as updating cell with it’s model, for you. Which is why with DTCollectionViewManager code, equivalent to one above, is the following:
dataSource = manager.configureDiffableDataSource { indexPath, model in
return model
}
You should persist strong reference to dataSource
object, and use it for constructing sections and items exactly as described in Apple documentation and WWDC session.
Diffable datasources and DTCollectionViewManager 7
are tightly integrated, so all events, even datasource ones like manager.configure(_:)
, continue to work in the same way as they were working before.
Events integration is possible, because DTCollectionViewManager
injects a special ProxyDiffableDataSourceStorage
object between UICollectionViewDiffableDataSource
and UICollectionView
. This storage does not store data models and just queries diffable data source to receive them. It does, however, implement section supplementary model providers.
DTCollectionViewManager
supports both generic UICollectionViewDiffableDataSource<SectionType,ItemType>
and non-generic UICollectionViewDiffableDataSourceReference
with the same method name(configureDiffableDataSource
). Resulting diffable datasource type is inferred from your declaration of the datasource.
Note Due to underlying implementation details, using UICollectionViewDiffableDataSource.supplementaryViewProvider
property is not supported. Please use ProxyDiffableDataSourceStorage.supplementaryModelProvider
property instead:
manager.supplementaryStorage?.setSectionHeaderModels(["Foo"])
Keep in mind, that for diffable datasources, collectionViewUpdater
property will contain nil, since UI updates are handled by diffable datasource itself.
Reacting to events
Event system in DTCollectionViewManager 5 allows you to react to UICollectionViewDelegate
, UICollectionViewDataSource
and UICollectionViewDelegateFlowLayout
events based on view and model types, completely bypassing any switches or ifs when working with UICollectionView API. For example:
manager.didSelect(PostCell.self) { cell,model,indexPath in
print("Selected PostCell with \(model) at \(indexPath)")
}
Important!
While it’s possible to register multiple closures for a single event, only first closure will be called once event is fired. This means that if the same event has two closures for the same view/model type, last one will be ignored. You can still register multiple event handlers for a single event and different view/model types. You can see how reactions are being searched for in DTModelStorage EventReaction extension.
Event types
There are two types of events:
- Event where we have underlying view at runtime
- Event where we have only data model, because view has not been created yet.
In the first case, we are able to check view and model types, and pass them into closure. In the second case, however, if there’s no view, we can’t make any guarantees of which type it will be, therefore it loses view generic type and is not passed to closure. These two types of events have different signature, for example:
// Signature for didSelect event
// We do have a cell, when UICollectionView calls "collectionView(_:didSelectItemAt:)" method
open func didSelect<T:ModelTransfer>(_ cellClass: T.Type, _ closure: @escaping (T,T.ModelType, IndexPath) -> Void) where T:UICollectionViewCell
// Signature for sizeForCell(withItem:) event
// When UICollectionView calls "collectionView(_:layout:sizeForItemAt:)" method, cell is not created yet, so closure contains two arguments instead of three, and there are no guarantees made about cell type, only model type
open func sizeForCell<T>(withItem itemType: T.Type, _ closure: @escaping (T, IndexPath) -> CGFloat)
It’s also important to understand, that event system is implemented using responds(to:)
method override and is working on the following rules:
- If
DTCollectionViewManageable
is implementing delegate method,responds(to:)
returns true - If
DTCollectionViewManager
has events tied to selector being called,responds(to:)
also returns true
What this approach allows us to do, is configuring UICollectionView knowledge about what delegate method is implemented and what is not. For example, DTCollectionViewManager
is implementing collectionView(_:layout:sizeForItemAt:)
method, however if you don’t call sizeForCell(withItem:_:)
method, you are safe to use self-sizing cells in UICollectionView. While a lot of delegate methods are implemented, only those that have events or are implemented by delegate will be called by UICollectionView
.
DTCollectionViewManager
has the same approach for handling each delegate and datasource method:
- Try to execute event, if cell and model type satisfy requirements
- Try to call delegate or datasource method on
DTCollectionViewManageable
instance - If two previous scenarios fail, fallback to whatever default
UICollectionView
has for this delegate or datasource method
Events configuration
To have compile safety when registering events, you can use configureEvents
method:
manager.configureEvents(for: IntCell.self) { cellType, modelType in
manager.register(cellType)
manager.estimatedHeight(for: modelType) { _,_ in
return 44
}
}
Advanced usage
Drag and Drop in iOS 11
There is a dedicated repo, containing Apple’s sample on Drag&Drop, enhanced with DTTableViewManager
and DTCollectionViewManager
. Most of the stuff is just usual drop and drag delegate events, but there is also special support for UITableView and UICollectionView placeholders, that makes sure calls are dispatched to main thread, and if you use MemoryStorage
, performs datasource updates automatically.
Reacting to content updates
Sometimes it’s convenient to know, when data is updated, for example to hide UICollectionView, if there’s no data. CollectionViewUpdater
has willUpdateContent
and didUpdateContent
properties, that can help:
updater.willUpdateContent = { update in
print("UI update is about to begin")
}
updater.didUpdateContent = { update in
print("UI update finished")
}
Customizing UICollectionView updates
DTCollectionViewManager
uses CollectionViewUpdater
class by default. However for CoreData
you might want to tweak UI updating code. For example, when reloading cell, you might want animation to occur, or you might want to silently update your cell. This is actually how Apple’s guide for NSFetchedResultsController
suggests you should do. Another interesting thing it suggests that .Move event reported by NSFetchedResultsController should be animated not as a move, but as deletion of old index path and insertion of new one.
If you want to work with CoreData and NSFetchedResultsController, just call:
manager.collectionViewUpdater = manager.coreDataUpdater()
CollectionViewUpdater
constructor allows customizing it’s basic behaviour:
let updater = CollectionViewUpdater(collectionView: collectionView, reloadRow: { indexPath in
// Reload row
}, animateMoveAsDeleteAndInsert: false)
These are all default options, however you might implement your own implementation of CollectionViewUpdater
, the only requirement is that object needs to conform to StorageUpdating
protocol. This gives you full control on how and when DTCollectionViewManager
will update UICollectionView
.
Conditional mappings
There can be cases, where you might want to customize mappings based on some criteria. For example, you might want to display model in several kinds of cells for different sections:
class FoodTextCell: UICollectionViewCell, ModelTransfer {
func update(with model: Food) {
// Text representation
}
}
class FoodImageCell: UICollectionViewCell, ModelTransfer {
func update(with model: Food) {
// Photo representation
}
}
manager.register(FoodTextCell.self) { mapping in mapping.condition = .section(0) }
manager.register(FoodImageCell.self) { mapping in mapping.condition = .section(1) }
Or you may implement completely custom conditions:
manager.register(FooCell.self) { mapping in
mapping.condition = .custom({ indexPath, model in
guard let model = model as? Int else { return false }
return model > 2
})
}
You can also change reuseIdentifier to be used:
manager.register(NibCell.self) { mapping in
mapping.condition = .section(0)
mapping.reuseIdentifier = "NibCell One"
}
controller.manager.registerNibNamed("CustomNibCell", for: NibCell.self) { mapping in
mapping.condition = .section(1)
mapping.reuseIdentifier = "NibCell Two"
}
Anomaly handler
DTCollectionViewManager
is built on some conventions. For example, your cell needs to have reuseIdentifier that matches the name of your class, XIB files need to be named also identical to the name of your class(to work with default mapping without customization). However when those conventions are not followed, or something unexpected happens, your app may crash or behave inconsistently. Most of the errors are reported by UICollectionView
API, but there’s space to improve.
DTTableViewManager
as well as DTCollectionViewManager
and DTModelStorage
now have dedicated anomaly analyzers, that try to find inconsistencies and programmer errors when using those frameworks. They detect stuff like missing mappings, inconsistencies in xib files, and even unused events. By default, detected anomalies will be printed in console while you are debugging your app. For example, if you try to register an empty xib to use for your cell, here’s what you’ll see in console:
⚠[DTCollectionViewManager] Attempted to register xib EmptyXib for PostCell, but this xib does not contain any views.
Messages are prefixed, so for DTTableViewManager
messages will have [DTTableViewManager]
prefix.
By default, anomaly handler only prints information into console and does not do anything beyond that, but you can change it’s behavior by assigning a custom handler for anomalies:
manager.anomalyHandler.anomalyAction = { anomaly in
// invoke custom action
}
For example, you may want to send all detected anomalies to analytics you have in your app. For this case anomalies implement shorter description, that is more suitable for analytics, that often have limits for amount of data you can put in. To do that globally for all instances of DTCollectionViewManager
that will be created during runtime of your app, set default action:
DTCollectionViewManagerAnomalyHandler.defaultAction = { anomaly in
print(anomaly.debugDescription)
analytics.postEvent("DTCollectionViewManager", anomaly.description)
}
If you use DTTableViewManager
and DTCollectionViewManager
, you can override 3 default actions for both manager frameworks and DTModelStorage
, presumably during app initialization, before any views are loaded:
DTTableViewManagerAnomalyHandler.defaultAction = { anomaly in }
DTCollectionViewManagerAnomalyHandler.defaultAction = { anomaly in }
MemoryStorageAnomalyHandler.defaultAction = { anomaly in }
Unregistering mappings
You can unregister cells, headers and footers from DTCollectionViewManager
and UICollectionView
by calling:
manager.unregister(FooCell.self)
manager.unregisterHeader(HeaderView.self)
manager.unregisterFooter(FooterView.self)
manager.unregisterSupplementary(SupplementaryView.self, forKind: "foo")
This is equivalent to calling collection view register methods with nil class or nil nib.
Thanks
- Alexey Belkevich for providing initial implementation of CellFactory.
- Michael Fey for providing insight into NSFetchedResultsController updates done right.
- Nickolay Sheika for great feedback, that helped shaping 3.0 release.
- Artem Antihevich for great discussions about Swift generics and type capturing.


The reason you're here is that we at PEBS bar can't keep putting up with you walking out on your bar tabs. We have decided that to pay us back you will work as our lead bartender. We are a full service bar so study our menu so you know how to make our signature cocktails. Goodluck!
Well....sort of. Now you have a hip(ster) club. You'll make more money!
Better upgrade to a real-ish person!
Alcohol... 'cause no great story started with someone eating a salad.


JMenuBar
object and
extending Observable
to provide observers the possibility to react to user interaction with
the menubar.DialogShowCardImage
object with the front or back image of
the corresponding internal CardBean
object, depending on whether the icon for the
back or front image has been pressed.DialogMaintainCardObservable.mouseEntered(MouseEvent)
.


{% if title %}
Welcome!
CV Reviewer Log In
Your E-Mail
Password Forgot your password?
First time here?


Missing Madison boy found safe, police say
by Logan RudeMADISON, Wis. - Madison police have found a 13-year-old boy after they announced Friday that he went missing, according to an incident report.
Kentay Strong was found safe and uninjured, police said.
According to an incident report, Strong has special needs and went missing without his medication.


Over 175 million professionals use Linkedin to exchange information, ideas and opportunities
- Stay informed about contacts and indostry
- Find the people & knowledge you need to achieve your goals
- Control your professional identity online
Already on Linkedin? Sign in


Visualization of a genetic algorithm!
Y-axis:
Scaled
Full range
Node sorting:
Fitness
Size
Height
Index
Node colors:
Fitness
Size
Height


Product Name
{{pname}}
Product ID
{{pid}}
Manufactured Date
{{mdate}}
Owner
{{pbrand}}
Quantity
{{quantity}}
Location
Prologis Distribution CenterK.B. Distribution CenterAveritt Distribution Center
Mode of Transport
LAND SHIPMENTRAILWAY SHIPMENTSEA SHIPMENTAIR-FREIGHT
Name of Transportation Agency
APL LogisticsWerner Global LogisticsDB Schenker USA