cloudmesh-cloud.cloudmesh.vm.command.vm
¶
Module Contents¶
Classes¶
-
class
cloudmesh-cloud.cloudmesh.vm.command.vm.
VmCommand
¶ Bases:
cloudmesh.shell.command.PluginCommand
-
do_vm
(self, args, arguments)¶ - Usage:
vm ping [NAMES] [–cloud=CLOUDS] [–count=N] vm check [NAMES] [–cloud=CLOUDS] [–username=USERNAME] vm status [NAMES] [–cloud=CLOUDS] [–output=OUTPUT] vm console [NAME] [–force] vm log [NAME] [–force] vm stop [NAMES] [–dryrun] vm start [NAMES] [–dryrun] vm terminate [NAMES] [–cloud=CLOUD] [–dryrun] vm delete [NAMES] [–cloud=CLOUD] [–dryrun] vm list [NAMES]
[–cloud=CLOUDS] [–output=OUTPUT] [–refresh] [–short]
- vm boot [–n=COUNT]
[–name=NAMES] [–label=LABEL] [–cloud=CLOUD] [–username=USERNAME] [–image=IMAGE] [–flavor=FLAVOR] [–network=NETWORK] [–public] [–secgroup=SECGROUP] [–group=GROUP] [–key=KEY] [–dryrun] [-v]
vm meta list [NAME] vm meta set [NAME] KEY=VALUE… vm meta delete [NAME] KEY… vm script [NAMES]
[–username=USERNAME] [–key=KEY] [–dryrun] [–dir=DESTINATION] SCRIPT
- vm ip assign [NAMES]
[–cloud=CLOUD]
- vm ip show [NAMES]
[–group=GROUP] [–cloud=CLOUD] [–output=OUTPUT] [–refresh]
vm ip inventory [NAMES] vm ssh [NAMES]
[–username=USER] [–quiet] [–ip=IP] [–key=KEY] [–command=COMMAND]
vm put SOURCE DESTINATION [NAMES] vm get SOURCE DESTINATION [NAMES] vm rename [OLDNAMES] [NEWNAMES] [–force] [–dryrun] vm wait [–cloud=CLOUD] [–interval=INTERVAL] [–timeout=TIMEOUT] vm info [NAMES] [–cloud=CLOUD] [–output=OUTPUT] [–dryrun] vm username USERNAME [NAMES] [–cloud=CLOUD] vm resize [NAMES] [–size=SIZE]
- Arguments:
OUTPUT the output format COMMAND positional arguments, the commands you want to
execute on the server(e.g. ls -a) separated by ‘;’, you will get a return of executing result instead of login to the server, note that type in – is suggested before you input the commands
NAME server name. By default it is set to the name of last vm from database. NAMES server name. By default it is set to the name of last vm from database. KEYPAIR_NAME Name of the vm keypair to be used to create VM. Note this is
not a path to key.
NEWNAMES New names of the VM while renaming. OLDNAMES Old names of the VM while renaming.
- Options:
- -v
verbose, prints the dict at the end
- --output=OUTPUT
the output format
- -H –modify-knownhosts Do not modify ~/.ssh/known_hosts file
when ssh’ing into a machine
- --username=USERNAME
the username to login into the vm. If not specified it will be guessed from the image name and the cloud
- --ip=IP
give the public ip of the server
- --cloud=CLOUD
give a cloud to work on, if not given, selected or default cloud will be used
- --count=COUNT
give the number of servers to start
- --detail
for table, a brief version is used as default, use this flag to print detailed table
- --flavor=FLAVOR
give the name or id of the flavor
- --group=GROUP
give the group name of server
- --secgroup=SECGROUP
security group name for the server
- --image=IMAGE
give the name or id of the image
- --key=KEY
specify a key to use, input a string which is the full path to the private key file
- --keypair_name=KEYPAIR_NAME
Name of the vm keypair to be used to create VM. Note this is not a path to key.
- --user=USER
give the user name of the server that you want to use to login
- --name=NAME
give the name of the virtual machine
- --force
rename/ delete vms without user’s confirmation
- --command=COMMAND
specify the commands to be executed
- Description:
commands used to boot, start or delete servers of a cloud
- vm default [options…]
Displays default parameters that are set for vm boot either on the default cloud or the specified cloud.
- vm boot [options…]
Boots servers on a cloud, user may specify flavor, image .etc, otherwise default values will be used, see how to set default values of a cloud: cloud help
- vm start [options…]
Starts a suspended or stopped vm instance.
- vm stop [options…]
Stops a vm instance .
vm delete [options…]
Delete servers of a cloud, user may delete a server by its name or id, delete servers of a group or servers of a cloud, give prefix and/or range to find servers by their names. Or user may specify more options to narrow the search
- vm floating_ip_assign [options…]
assign a public ip to a VM of a cloud
- vm ip show [options…]
show the ips of VMs
- vm ssh [options…]
login to a server or execute commands on it
- vm list [options…]
same as command “list vm”, please refer to it
- vm status [options…]
Retrieves status of last VM booted on cloud and displays it.
- vm refresh [–cloud=CLOUDS]
this command refreshes the data for virtual machines, images and flavors for the specified clouds.
- vm ping [NAMES] [–cloud=CLOUDS] [–count=N] [–processors=PROCESSORS]
pings the specified virtual machines, while using at most N pings. The ping is executed in parallel. If names are specifies the ping is restricted to the given names in parameter format. If clouds are specified, names that are not in these clouds are ignored. If the name is set in the variables this name is used.
cms vm ssh –command=”uname -a”
executes the uname command on the last booted vm
- vm script [–name=NAMES]
[–username=USERNAME] [–key=KEY] [–dryrun] [–dir=DESTINATION] [–shell=SHELL] SCRIPT
The script command copies a shell script to the specified vms into the DESTINATION directory and than execute it. With SHELL you can set the shell for executing the command, this coudl even be a python interpreter. Examples for SHELL are /bin/sh, /usr/bin/env python
vm put SOURCE DESTINATION [NAMES]
puts the file defined by SOURCE into the DESINATION folder
- on the specified machines. If the file exists it is
overwritten, so be careful.
vm get SOURCE DESTINATION [NAMES]
gets the file defined by SOURCE into the DESINATION folder on the specified machines. The SOURCE is on the remote machine. If one machine is specified, the SOURCE is the same name as on the remote machine. If multiple machines are specified, the name of the machine will be a prefix to the filename. If the filenames exists, they will be overwritten, so be careful.
- Tip:
give the VM name, but in a hostlist style, which is very convenient when you need a range of VMs e.g. sample[1-3] => [‘sample1’, ‘sample2’, ‘sample3’]
sample[1-3,18] => [‘sample1’, ‘sample2’, ‘sample3’, ‘sample18’]
- Quoting commands:
cm vm login gregor-004 –command=”uname -a”
Limitations:
Azure: rename is not supported
-


For a11y. <td> with scope="" is obsolete in HTML5. Only use it on th. If the first cell of your row doesn't have a scope relation to the other cells, use td without scope
Borders everywhere
Fannypack lovers
ID
First name
Last name
Role
1
Gwendolyn
Matthys
Visual designer
2
Yannick
Van Avermaet
Frontend Architect
3
Jochen
Vandendriessche
Frontend developer
4
Gregory
Van Looy
Frontend developer
Only horizontal borders
Fannypack lovers
#
First name
Last name
Role
1
Gwendolyn
Matthys
Visual designer
2
Yannick
Van Avermaet
Frontend Architect
3
Jochen
Vandendriessche
Frontend developer
4
Gregory
Van Looy
Frontend developer
Striped
Fannypack lovers
#
First name
Last name
Role
1
Gwendolyn
Matthys
Visual designer
2
Yannick
Van Avermaet
Frontend Architect
3
Jochen
Vandendriessche
Frontend developer
4
Gregory
Van Looy
Frontend developer
Simple tables with key - value pairs
Sometimes all you need to display is a table with some key-value pairs as data.
With .key or scope="row" you can emphasize the key. If you need extra styling
for the value , just add .value to that cell.
ID
12345
Last change
Not saved yet
Status
Draft
Condensed tables
Table cells with less spacing
Fannypack lovers
#
First name
Last name
Role
1
Gwendolyn
Matthys
Visual designer
2
Yannick
Van Avermaet
Frontend Architect
3
Jochen
Vandendriessche
Frontend developer
4
Gregory
Van Looy
Frontend developer
Responsive tables
Making a table responsive (with overflow) is very easy. Just add a div.table__wrapper around the table. If the content or the vast number of cells don’t fit the container, you get horizontal scrollbars. This is done with overflow.
Resize your browser to see the result.
Standard Responsive table
#
table heading
table heading
table heading
table heading
table heading
table heading
table heading
table heading
table heading
table heading
1
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
2
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
3
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
4
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
5
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
6
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
Selector
Description
.table__wrapper
Required
Wrapping div that adds horizontal scrollbars with overflow-x: auto
Transforming responsive table
On smaller screens the table transforms to blocks that are stacked and with accessible titles.
This requires a little more work than just CSS. You need to add the required
attributes to make this work and be accessible.
Transforming responsive table
#
First name
Last name
Role
1
Gwendolyn
Matthys
Visual designer
2
Yannick
Van Avermaet
Frontend Architect
3
Jochen
Vandendriessche
Frontend developer
4
Gregory
Van Looy
Frontend developer
Selector / Attribute
Description
.table--transformer
Required
Modifier class
data-title=""
Required
Creates a label for the corresponding value. Needs to be the same as the matching th


A Heading
A table with a heading and multiple rows.
Firstname
Lastname
Age
John
Smith
55
Denise
Byrne
52


+++ date = "2019-01-02T14:40:56+01:00" title = "Waveform 3D" thumbnail = "waveform.png" canvasscript = "waveform.js" draft=true description = """ 3D waveform """ +++


@Suspendable protected abstract fun assembleTx(): UpgradeTx
Build the upgrade transaction.
Return the transaction


| Real-Time Rendering, 4th Edition Figures |
|
This page is a gallery of over 400 figures from the book "Real-Time Rendering," by Tomas Akenine-Möller, Eric Haines, Naty Hoffman, Angelo Pesce, Michał Iwanicki, and Sébastien Hillaire, 1200 pages, from A K Peters/CRC Press, ISBN-13:<PHONE_NUMBER>000, ISBN-10:<PHONE_NUMBER>, 2018. See the book's website for more information. You can click a thumbnail to see the full-sized image and download it. You can download this page and all the figures from: http://realtimerendering.com/RealTimeRendering4_figures.zip These figures from the book are copyright CRC Press. We have provided these images for use under United States Fair Use doctrine (or similar laws of other countries), e.g., by professors for use in their classes; see our blog entry. All figures in the book are not included; those created by the authors (directly, or by use of free demonstration programs or web demos), from public sources (e.g., NASA), or from sources which have been cleared for inclusion are available here. See the corresponding figure in the book to see the full credit, if any. Other images in the book may be reused under Fair Use, but are not part of this collection. Some images in the book are from live demos that run in your browser. See the resources page - these demos are usually listed first for each section. It is good practice to acknowledge the sources of any images reused, e.g., the book's name or a link to http://www.realtimerendering.com would be useful to students. If you have questions about reuse, please contact us. (thanks to Mauricio Vives for designing this page.) |


Queries¶
On this page
One of MongoDB’s greatest features is its ability to execute dynamic queries, which Origin abstracts in a familiar Arel-style DSL that Mongoid includes.
Queries¶
All queries in Mongoid are Mongoid::Criteria, which is a chainable and lazily evaluated wrapper to a MongoDB dynamic query. Criteria only touch the database when they need to, for example on iteration of the results, and when executed wrap a cursor in order to keep memory management and performance predictable.
Queryable DSL¶
Mongoid’s main query DSL is provided by Origin. Any method that is available on an Origin::Queryable exists on a Mongoid::Criteria as well as off the model’s class.
Band.where(name: "Depeche Mode")
Band.
where(:founded.gte => "1980-1-1").
in(name: [ "Tool", "Deftones" ]).
union.
in(name: [ "Melvins" ])
With each chained method on a criteria, a newly cloned criteria is returned with the new query added. This is so that with scoping or exposures, for example, the original queries are unmodified and remain reusable.
Additional Query Methods¶
In addition to behavior that Origin provides, Mongoid also has some helpful methods on criteria.
| Operation | Example |
|---|---|
Criteria#count Get a count of persisted documents. Note this will always hit the database for the count. |
Band.count
Band.where(name: "Photek").count
|
Criteria#distinct Get a list of distinct values for a single field. Note this will always hit the database for the distinct values. |
Band.distinct(:name)
Band.where(:fans.gt => 100000).
distinct(:name)
|
Criteria#each Iterate over all matching documents in the criteria. |
Band.where(members: 1).each do |band|
p band.name
end
|
Criteria#exists? Determine if any matching documents exist. Will return true if there are 1 or more. |
Band.exists?
Band.where(name: "Photek").exists?
|
Criteria#find Find a document or multiple documents by their ids. Will raise an error by default if any of the ids do not match. |
Band.find("4baa56f1230048567300485c")
Band.find(
"4baa56f1230048567300485c",
"4baa56f1230048567300485d"
)
Band.where(name: "Photek").find(
"4baa56f1230048567300485c"
)
|
Criteria#find_by Find a document by the provided attributes, and if not found raise an error or return nil depending on the * ``raise_not_found_error`` *configuration option. |
Band.find_by(name: "Photek")
Band.find_by(name: "Tool") do |band|
band.impressions += 1
end
|
Criteria#find_or_create_by Find a document by the provided attributes, and if not found create and return a newly persisted one. |
Band.find_or_create_by(name: "Photek")
Band.where(:likes.gt => 10).find_or_create_by(name: "Photek")
|
Criteria#find_or_initialize_by Find a document by the provided attributes, and if not found return a new one. |
Band.find_or_initialize_by(name: "Photek")
Band.where(:likes.gt => 10).find_or_initialize_by(name: "Photek")
|
Criteria#first|last Finds a single document given the provided criteria. This guarantees no order. |
Band.first
Band.where(:members.with_size => 3).first
Band.where(:members.with_size => 3).last
|
Criteria#first_or_create Find the first document by the provided attributes, and if not found create and return a newly persisted one. |
Band.where(name: "Photek").first_or_create
|
Criteria#first_or_create! Find the first document by the provided attributes, and if not found create and return a newly persisted one using create!. |
Band.where(name: "Photek").first_or_create!
|
Criteria#first_or_initialize Find the first document by the provided attributes, and if not found return a new one. |
Band.where(name: "Photek").first_or_initialize
|
Criteria#for_js Find documents for a provided javascript expression. This will wrap the javascript in a `BSON::Code` object which is the safe way to avoid javascript injection attacks.* |
Band.for_js("this.name = param", param: "Tool")
|
Criteria#length|size Same as count but caches subsequent calls to the database |
Band.length
Band.where(name: "FKA Twigs").size
|
Criteria#pluck Get all the values for the provided field. Returns nil for unset fields and for non-existent fields. |
Band.all.pluck(:name)
|
Eager Loading¶
Mongoid provides a facility to eager load documents from relations to prevent the n+1 issue when iterating over documents with relation access. Eager loaded is supported on all relations with the exception of polymorphic belongs_to associations.
class Band
include Mongoid::Document
has_many :albums
end
class Album
include Mongoid::Document
belongs_to :band
end
Band.includes(:albums).each do |band|
p band.albums.first.name # Does not hit the database again.
end
Queries + Persistence¶
Mongoid supports persistence operations off of criteria in a light capacity for when you want to expressively perform multi document inserts, updates, and deletion.
| Operation | Example |
|---|---|
Criteria#create Create a newly persisted document. |
Band.where(name: "Photek").create
|
Criteria#create! Create a newly persisted document and raise an exception on validation failure. |
Band.where(name: "Photek").create!
|
Criteria#build|new Create a new (unsaved) document. |
Band.where(name: "Photek").build
Band.where(name: "Photek").new
|
Criteria#update Update attributes of the first matching document. |
Band.where(name: "Photek").update(label: "Mute")
|
Criteria#update_all Update attributes of all matching documents. |
Band.where(members: 2).update_all(label: "Mute")
|
Criteria#add_to_set Perform an $addToSet on all matching documents. |
Band.where(name: "Photek").add_to_set(label: "Mute")
|
Criteria#bit Perform a $bit on all matching documents. |
Band.where(name: "Photek").bit(likes: { and: 14, or: 4 })
|
Criteria#inc Perform an $inc on all matching documents. |
Band.where(name: "Photek").inc(likes: 123)
|
Criteria#pop Perform a $pop on all matching documents. |
Band.where(name: "Photek").pop(members: -1)
Band.where(name: "Photek").pop(members: 1)
|
Criteria#pull Perform a $pull on all matching documents. |
Band.where(name: "Tool").pull(members: "Maynard")
|
Criteria#pull_all Perform a $pullAll on all matching documents. |
Band.where(name: "Tool").
pull_all(:members, [ "Maynard", "Danny" ])
|
Criteria#push Perform a $push on all matching documents. |
Band.where(name: "Tool").push(members: "Maynard")
|
Criteria#push_all Perform a $pushAll on all matching documents. |
Band.where(name: "Tool").
push_all(members: [ "Maynard", "Danny" ])
|
Criteria#rename Perform a $rename on all matching documents. |
Band.where(name: "Tool").rename(name: :title)
|
Criteria#set Perform a $set on all matching documents. |
Band.where(name: "Tool").set(likes: 10000)
|
Criteria#unset Perform a $unset on all matching documents. |
Band.where(name: "Tool").unset(:likes)
|
Criteria#delete Deletes all matching documents in the database. |
Band.where(label: "Mute").delete
|
Criteria#destroy Deletes all matching documents in the database while running callbacks for all. This loads all documents into memory and can be an expensive operation. |
Band.where(label: "Mute").destroy
|
Scoping¶
Scopes provide a convenient way to reuse common criteria with more business domain style syntax.
Named Scopes¶
Named scopes are simply criteria defined at class load that are referenced by a provided name.
Named scopes can take procs and blocks for accepting parameters or extending functionality.
class Band
include Mongoid::Document
field :name, type: String
field :country, type: String
field :active, type: Boolean, default: true
scope :named, ->(name){ where(name: name) }
scope :active, ->{
where(active: true) do
def deutsch
tap |scope| do
scope.selector.store("origin" => "Deutschland")
end
end
end
}
end
Band.named("Depeche Mode") # Find Depeche Mode.
Band.active.deutsch # Find active German bands.
Default Scopes¶
Default scopes can be useful when you find yourself applying the same criteria to most queries, and want something to be there by default. Default scopes take procs that return criteria objects.
class Band
include Mongoid::Document
field :name, type: String
field :active, type: Boolean, default: true
default_scope ->{ where(active: true) }
end
Band.each do |band|
# All bands here are active.
end
You can tell Mongoid not to apply the default scope by using unscoped, which can be inline or take a block.
Band.unscoped.where(name: "Depeche Mode")
Band.unscoped do
Band.where(name: "Depeche Mode")
end
You can also tell Mongoid to explicitly apply the default scope again later to always ensure it’s there.
Band.unscoped.where(name: "Depeche Mode").scoped
If you are using a default scope on a model that is part of a relation, you must reload the relation to have scoping reapplied. This is important to note if you change a value of a document in the relation that would affect its visibility within the scoped relation.
class Label
include Mongoid::Document
embeds_many :bands
end
class Band
include Mongoid::Document
field :active, default: true
embedded_in :label
default_scoped ->{ where(active: true) }
end
label.bands.push(band)
label.bands #=> [ band ]
band.update_attribute(:active, false)
label.bands #=> [ band ] Must reload.
label.reload.bands #=> []
Class Methods¶
Class methods on models that return criteria objects are also treated like scopes, and can be chained as well.
class Band
include Mongoid::Document
field :name, type: String
field :active, type: Boolean, default: true
def self.active
where(active: true)
end
end
Band.active
Map/Reduce¶
Mongoid provides a DSL around MongoDB’s map/reduce framework, for performing custom map/reduce jobs or simple aggregations.
Execution¶
You can tell Mongoid off the class or a criteria to perform a map/reduce by calling map_reduce and providing map and reduce javascript functions.
map = %Q{
function() {
emit(this.name, { likes: this.likes });
}
}
reduce = %Q{
function(key, values) {
var result = { likes: 0 };
values.forEach(function(value) {
result.likes += value.likes;
});
return result;
}
}
Band.where(:likes.gt => 100).map_reduce(map, reduce).out(inline: true)
Just like criteria, map/reduce calls are lazily evaluated. So nothing will hit the database until you iterate over the results, or make a call on the wrapper that would need to force a database hit.
Band.map_reduce(map, reduce).out(replace: "mr-results").each do |document|
p document # { "_id" => "Tool", "value" => { "likes" => 200 }}
end
The only required thing you provide along with a map/reduce is where to output the results. If you do not provide this an error will be raised. Valid options to #out are:
- inline: 1: Don’t store the output in a collection.
- replace: "name": Store in a collection with the provided name, and overwrite any documents that exist in it.
- merge: "name": Store in a collection with the provided name, and merge the results with the existing documents.
- reduce: "name": Store in a collection with the provided name, and reduce all existing results in that collection.


I'm 21 years old, moved to Oulu in 2015 from Haapavesi. I'm currently studying second year in Oulu university, with information processing as my major subject. By next summer I will also have completed a minor program in software development. I intend to complete my Bachelor's degree in 2018, and Master's in 2020. So far I have completed 78 credits worth of courses, with an average grade of 4.
I'm passionate about everything related to computers and technology. The best part about programming is the challenge of creating useful (or fun) things, and the possibility to always learn something new. So far I have no experience in working at a real software company. Hopefully this portfolio will convince You that employment or internship would be mutually beneficial.


GORILLAS IN THE MIST A film review by Mark R. Leeper Copyright 1988 Mark R. Leeper
Capsule review: A substantial and provocative film, GORILLAS IN THE MIST tells us the story of Dian Fossey, who made herself one of the leading experts on mountain gorillas and who fought for their preservation. Rating: +2.
GORILLAS IN THE MIST is the biography of Dian Fossey, a physical therapist who dropped her entire life and went to live in Central Africa to study gorillas. It is the story of a passage from being a naive and selfish young dilettante to being a lion of a woman, fighting for the survival of the mountain gorillas of Rwanda.
As the film opens, there is little admirable about Dian Fossey (played by Sigourney Weaver). She rudely arrives in the middle of a lecture by the famous Dr. Louis Leakey (played by Ian Cuthbertson). She even borrows a pencil for notes and apparently does not return it. She doggedly follows Leakey, however, to persuade him to hire her to use her therapy skills to take a gorilla census. After a series of misadventures, she discovers the skills to approach gorillas and even to make unprecedented physical contact with them. This minor victory and a new-found instinct to protect the gorilla family she comes to know transforms her from a shallow amateur to a woman with a cause. Almost immediately she recognizes the dangers that others of her species pose to her new-found family, and she finds clever and crafty ways to outsmart the poachers who prey on the gorillas.
For a while Fossey considers a relationship with a NATIONAL GEOGRAPHIC photographer who has come to do a story on her work. And there is where the film makes its biggest mistake. At this point the film decides to concentrate on the mating habits of humans. Director Michael Apted wastes the unique locale and the characters to tell a rather dull love story that goes on entirely too long. Luckily it does not become the major thrust of GORILLAS IN THE MIST.
After this rather annoying diversion the film returns to the main storyline. GORILLAS IN THE MIST is at its best when it shows how Fossey learned about the gorillas or how she fought poachers to help preserve the species, not when it concentrates on the love life.
GORILLAS IN THE MIST is something of a departure for director Michael Apted, whose best known film is the remarkable 28 UP, the documentary that interviews the same group of people at ages 7, 14, 21, and 28. Yet both films show an interest in how apes and men inherit what they are and what they will become. Interestingly the film's associate producer and the source of its special effects is Rick Baker, a superb creator of makeup specializing in realistic portrayals of apes. Almost undoubtedly he also acted in the film though his name is not listed among the "mimes" in the credits. (He proves once more that the shoddy ape work he did in the title role of the 1976 KING KONG was forced on him and below his standards.)
At its worst GORILLAS IN THE MIST is no worse than mediocre and it does achieve moments of magnificence. Rate it a +2 on the -4 to +4 scale.
Mark R. Leeper att!mtgzz!leeper<EMAIL_ADDRESS>The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Amazing people are making design in a fun enviroment
When you work with us,you are part of a team of committed collaborators.All aspects of our software developpement process are intergrated and agile
Our approach unifies design,development and product management to create exceptional product
We start each projects by understanding business goals,the user needs and and the product requirements
Then we help transalte them into effective and elegant solutions
Before we sign a contact or write a line of code our team will spend the necessary time needed to understand your product vision
The out come of this session is a proposal or high-level statement of work.
Base on your requirements,we can provide a compentent offering or just the pieces you need.
Our design practice offers a full range of services including brand strategy, interaction and
visual design and user experience testing.
Throughout your project, our designers create and implement visual design and workflows, solicit user
feedback and work with you to make sure what gets built is what is needed.
All engineers are fluent in the latest enterprise, mobile and web development
technologies.
They collaborate with your team to write, and improve code on a daily basis, using proven practices such
as test-driven development and pair programming.
Planning and development is iterative. Because we are constantly coding and testing, the products we build are always ready to go live. This iterative process allows for changes as business requirements evolve.
DELANI STUDIO
2019


--- layout: post esbma_id: 1189 title: Law #7: The Law of the Ladder date: 2004-06-09 14:52:34 keywords: law ---
(This entry is part of a series I am writing on The 22 Immutable Laws of Marketing.)
The Law of the Ladder acknowledges that in most market categories, there is actually more than one available slot in the mind of the customer.
The Hierarchy of Categories
In our discussion of the previous laws, we have emphasized the importance being different, the important of finding a subcategory in which you can be #1. However, when you pop the stack frame up one level to the enclosing category, we find that you are ranked on a ladder among the other players.
I claim that my product, SourceGear Vault, is #1 in its category, which I define here as "compelling and seamless replacements for Visual SourceSafe". However, this category is actually just one small subcategory inside a larger one which I might call "basic source control tools". Vault is definitely not #1 in that category.  There is a sister category here called "process-based source control tools". Both of these categories are enclosed in yet another category called "all configuration management tools". That category is enclosed inside another one called "developer tools". SourceGear is a small ISV. The bigger the category, the farther down the ladder we are.
Reading this book, it's easy to get confused about which level of category is being discussed. Does a certain law apply to the whole market, or just to my category, or to my sub-category, or to my sub-sub-category? The fact that this hierarchy of enclosing categories is highly subjective doesn't help. Sometimes a law makes more sense when it is understood to apply to the larger enclosing categories.
For now, let's just remember that every category level has its own ladder.
Three Tidbits about Ladders
1. The mind of the customer can only remember a few rungs. Research indicates a maximum of about seven, and a more practical limit of about two or three. How many brands of toothpaste can you name? How many brands of cola? How many brands of automobiles? Some categories have more rungs than others.
2. The best strategy for you depends entirely on your ranking on the ladder. The right strategy for the #1 player is probably wrong for the #2 player, and vice versa. The authors cite the Avis rent-a-car example, where they gained tremendous results from simply acknowledging their status as #2. This example has been very much-discussed in the ten years since the book was written, but it still rings with a bell of wisdom. Avis showed a lot of self-awareness. Customers respected that.
3. There is a typical mapping of market share onto ladder position. The authors claim that each rung on the ladder has twice the market share of the rung below it. These guidelines are obviously very rough, and all kinds of exceptions do apply. Still, when we see a ladder where the market share ratios are not even close to this rule of thumb, we are motivated to ask why.
Tomorrow we will talk more about this third tidbit in our discussion of the Law of Duality.


In this post, I'll use PyTorch to create a simple Recurrent Neural Network (RNN) for denoising a signal. I started learning RNNs using PyTorch. However, I felt that many of the examples were fairly complex. So, here's an attempt to create a simple educational example.
Given a noisy sine wave as an input, we want to estimate the denoised signal. This is shown in the figure below.
import numpy as np
import math, random
import matplotlib.pyplot as plt
%matplotlib inline
np.random.seed(0)
Let's now write functions to cerate a sine wave, add some noise on top of it. This way we're able to create a noisy verison of the sine wave.
# Generating a clean sine wave
def sine(X, signal_freq=60.):
return np.sin(2 * np.pi * (X) / signal_freq)
# Adding uniform noise
def noisy(Y, noise_range=(-0.35, 0.35)):
noise = np.random.uniform(noise_range[0], noise_range[1], size=Y.shape)
return Y + noise
# Create a noisy and clean sine wave
def sample(sample_size):
random_offset = random.randint(0, sample_size)
X = np.arange(sample_size)
out = sine(X + random_offset)
inp = noisy(out)
return inp, out
Let's now invoke the functions we defined to generate the figure we saw in the problem description.
inp, out = sample(100)
plt.plot(inp, label='Noisy')
plt.plot(out, label ='Denoised')
plt.legend()
Now, let's write a simple function to generate a dataset of such noisy and denoised samples.
def create_dataset(n_samples=10000, sample_size=100):
data_inp = np.zeros((n_samples, sample_size))
data_out = np.zeros((n_samples, sample_size))
for i in range(n_samples):
sample_inp, sample_out = sample(sample_size)
data_inp[i, :] = sample_inp
data_out[i, :] = sample_out
return data_inp, data_out
Now, creating the dataset, and dividing it into train and test set.
data_inp, data_out = create_dataset()
train_inp, train_out = data_inp[:8000], data_out[:8000]
test_inp, test_out = data_inp[8000:], data_out[8000:]
import torch
import torch.nn as nn
from torch.autograd import Variable
We have 1d sine waves, which we want to denoise. Thus, we have input dimension of 1. Let's create a simple 1-layer RNN with 30 hidden units.
input_dim = 1
hidden_size = 30
num_layers = 1
class CustomRNN(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super(CustomRNN, self).__init__()
self.rnn = nn.RNN(input_size=input_size, hidden_size=hidden_size, batch_first=True)
self.linear = nn.Linear(hidden_size, output_size, )
self.act = nn.Tanh()
def forward(self, x):
pred, hidden = self.rnn(x, None)
pred = self.act(self.linear(pred)).view(pred.data.shape[0], -1, 1)
return pred
r= CustomRNN(input_dim, hidden_size, 1)
r
# Storing predictions per iterations to visualise later
predictions = []
optimizer = torch.optim.Adam(r.parameters(), lr=1e-2)
loss_func = nn.L1Loss()
for t in range(301):
hidden = None
inp = Variable(torch.Tensor(train_inp.reshape((train_inp.shape[0], -1, 1))), requires_grad=True)
out = Variable(torch.Tensor(train_out.reshape((train_out.shape[0], -1, 1))) )
pred = r(inp)
optimizer.zero_grad()
predictions.append(pred.data.numpy())
loss = loss_func(pred, out)
if t%20==0:
print(t, loss.data[0])
loss.backward()
optimizer.step()
Great. As expected, the loss reduces over time.
t_inp = Variable(torch.Tensor(test_inp.reshape((test_inp.shape[0], -1, 1))), requires_grad=True)
pred_t = r(t_inp)
# Test loss
print(loss_func(pred_t, Variable(torch.Tensor(test_out.reshape((test_inp.shape[0], -1, 1))))).data[0])
sample_num = 23
plt.plot(pred_t[sample_num].data.numpy(), label='Pred')
plt.plot(test_out[sample_num], label='GT')
plt.legend()
plt.title("Sample num: {}".format(sample_num))
Seems reasonably neat to me! If only the first few points were better esimtated. Any idea why they're not? Maybe, we need a bidirectional RNN? Let's try one, and I'll also add dropout to prevent overfitting.
bidirectional = True
if bidirectional:
num_directions = 2
else:
num_directions = 1
class CustomRNN(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super(CustomRNN, self).__init__()
self.rnn = nn.RNN(input_size=input_size, hidden_size=hidden_size,
batch_first=True, bidirectional=bidirectional, dropout=0.1)
self.linear = nn.Linear(hidden_size*num_directions, output_size, )
self.act = nn.Tanh()
def forward(self, x):
pred, hidden = self.rnn(x, None)
pred = self.act(self.linear(pred)).view(pred.data.shape[0], -1, 1)
return pred
r= CustomRNN(input_dim, hidden_size, 1)
r
# Storing predictions per iterations to visualise later
predictions = []
optimizer = torch.optim.Adam(r.parameters(), lr=1e-2)
loss_func = nn.L1Loss()
for t in range(301):
hidden = None
inp = Variable(torch.Tensor(train_inp.reshape((train_inp.shape[0], -1, 1))), requires_grad=True)
out = Variable(torch.Tensor(train_out.reshape((train_out.shape[0], -1, 1))) )
pred = r(inp)
optimizer.zero_grad()
predictions.append(pred.data.numpy())
loss = loss_func(pred, out)
if t%20==0:
print(t, loss.data[0])
loss.backward()
optimizer.step()
t_inp = Variable(torch.Tensor(test_inp.reshape((test_inp.shape[0], -1, 1))), requires_grad=True)
pred_t = r(t_inp)
# Test loss
print(loss_func(pred_t, Variable(torch.Tensor(test_out.reshape((test_inp.shape[0], -1, 1))))).data[0])
sample_num = 23
plt.plot(pred_t[sample_num].data.numpy(), label='Pred')
plt.plot(test_out[sample_num], label='GT')
plt.legend()
plt.title("Sample num: {}".format(sample_num))
Hmm. The estimated signal looks better for the initial few points. But, gets worse for the final few points. Oops! Guess, now the reverse RNN causes problems for its first few points!
Let's now replace our RNN with GRU to see if the model improves.
bidirectional = True
if bidirectional:
num_directions = 2
else:
num_directions = 1
class CustomRNN(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super(CustomRNN, self).__init__()
self.rnn = nn.GRU(input_size=input_size, hidden_size=hidden_size,
batch_first=True, bidirectional=bidirectional, dropout=0.1)
self.linear = nn.Linear(hidden_size*num_directions, output_size, )
self.act = nn.Tanh()
def forward(self, x):
pred, hidden = self.rnn(x, None)
pred = self.act(self.linear(pred)).view(pred.data.shape[0], -1, 1)
return pred
r= CustomRNN(input_dim, hidden_size, 1)
r
# Storing predictions per iterations to visualise later
predictions = []
optimizer = torch.optim.Adam(r.parameters(), lr=1e-2)
loss_func = nn.L1Loss()
for t in range(201):
hidden = None
inp = Variable(torch.Tensor(train_inp.reshape((train_inp.shape[0], -1, 1))), requires_grad=True)
out = Variable(torch.Tensor(train_out.reshape((train_out.shape[0], -1, 1))) )
pred = r(inp)
optimizer.zero_grad()
predictions.append(pred.data.numpy())
loss = loss_func(pred, out)
if t%20==0:
print(t, loss.data[0])
loss.backward()
optimizer.step()
t_inp = Variable(torch.Tensor(test_inp.reshape((test_inp.shape[0], -1, 1))), requires_grad=True)
pred_t = r(t_inp)
# Test loss
print(loss_func(pred_t, Variable(torch.Tensor(test_out.reshape((test_inp.shape[0], -1, 1))))).data[0])
sample_num = 23
plt.plot(pred_t[sample_num].data.numpy(), label='Pred')
plt.plot(test_out[sample_num], label='GT')
plt.legend()
plt.title("Sample num: {}".format(sample_num))
The GRU prediction seems to far better! Maybe, the RNNs suffer from the vanishing gradients problem?
Let's now write a simple function to visualise the estimations as a function of iterations. We'd expect the estimations to improve over time.
plt.rcParams['animation.ffmpeg_path'] = './ffmpeg'
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots(figsize=(4, 3))
fig.set_tight_layout(True)
# Query the figure's on-screen size and DPI. Note that when saving the figure to
# a file, we need to provide a DPI for that separately.
print('fig size: {0} DPI, size in inches {1}'.format(
fig.get_dpi(), fig.get_size_inches()))
def update(i):
label = 'Iteration {0}'.format(i)
ax.cla()
ax.plot(np.array(predictions)[i, 0, :, 0].T, label='Pred')
ax.plot(train_out[0, :], label='GT')
ax.legend()
ax.set_title(label)
anim = FuncAnimation(fig, update, frames=range(0, 201, 4), interval=20)
anim.save('learning.mp4',fps=20)
plt.close()
from IPython.display import Video
Video("learning.mp4")
This looks great! We can see how our model learns to learn reasonably good denoised signals over time. It doesn't start great though. Would a better initialisation help? I certainly feel that for this particular problem it would, as predicting the output the same as input is a good starting point!
The trick to handling missing values in the denoised training data (the quantity we wish to estimate) is to compute the loss only over the present values. This requires creating a mask for finding all entries except missing.
One such way to do so would be: mask = out > -1* 1e8
where out
is the tensor containing missing values.
Let's first add some unknown values (np.NaN
) in the training output data.
for num_unknown_values in range(50):
train_out[np.random.choice(list(range(0, 8000))), np.random.choice(list(range(0, 100)))] = np.NAN
np.isnan(train_out).sum()
Testing using a network with few parameters.
r= CustomRNN(input_dim, 2, 1)
r
# Storing predictions per iterations to visualise later
predictions = []
optimizer = torch.optim.Adam(r.parameters(), lr=1e-2)
loss_func = nn.L1Loss()
for t in range(20):
hidden = None
inp = Variable(torch.Tensor(train_inp.reshape((train_inp.shape[0], -1, 1))), requires_grad=True)
out = Variable(torch.Tensor(train_out.reshape((train_out.shape[0], -1, 1))) )
pred = r(inp)
optimizer.zero_grad()
predictions.append(pred.data.numpy())
# Create a mask to compute loss only on defined quantities
mask = out > -1* 1e8
loss = loss_func(pred[mask], out[mask])
if t%20==0:
print(t, loss.data[0])
loss.backward()
optimizer.step()
There you go! We've also learnt how to handle missing values!
I must thank Simon Wang and his helpful inputs on the PyTorch discussion forum.


{% extends "withnav_template.html" %} {% from "components/page-header.html" import page_header %} {% from "govuk_frontend_jinja/components/back-link/macro.html" import govukBackLink %} {% from "govuk_frontend_jinja/components/button/macro.html" import govukButton %} {% from "govuk_frontend_jinja/components/inset-text/macro.html" import govukInsetText %} {% block service_page_title %} Receive text messages {% endblock %} {% block backLink %} {{ govukBackLink({ "href": url_for('main.service_settings', service_id=current_service.id) }) }} {% endblock %} {% block maincolumn_content %}
Your service will receive text messages sent to:
{% set new_number = current_service.inbound_number %} {{ govukInsetText({ "text": new_number, "classes": "govuk-!-margin-top-0"}) }}You can see the number of received messages on your dashboard.
You can also download the last {{ current_service.get_days_of_retention('sms') }} days’ worth of received text messages.
{% if current_service.api_keys %}If you’re using the API, you can fetch received messages or set up a callback to push the message to your service.
{% endif %}You can still send text messages from a sender name if you need to, but people will not be able to reply to those messages.
{% else %}If you want to receive text messages, Notify will give you a unique 11-digit phone number.
You can send text messages from this number instead of your current sender name.
When someone replies to the number, you’ll see it on your dashboard.
It does not cost you anything to receive text messages. Your users will pay their standard text message rate.
{{ govukButton({ "element": "a", "text": "Start receiving text messages", "href": url_for('main.service_receive_text_messages_start', service_id=current_service.id), }) }} {% endif %}


WHAT WE DO
This is a platform where artists can provide their work and display it for all to see.
In the process we aim to allow artists to reach their audience without much difficulty and also aim to prevent swindlers from stealing art and presenting it as their own.
We aim to do this by monitoring any art projects and their origin before uploading them onto the platform.


We hosted HACS Temporal Action Localization Challenge 2020 in the CVPR'20 International Challenge on Activity Recognition Workshop.
The goal of this challenge is to temporally localize actions in untrimmed videos. This year, we continue to have the classical fully-supervised learning track, while introducing a NEW track which explores weakly-supervised learning setting. While high quality action segment labels are expensive to obtain, weakly-supervised learning allows participants to exploit a much larger video corpus with extra action labels on short clips for improving the learning. Performance of these two tracks will be ranked separately.
For your reference, results of last year's HACS Challenge can be found at HACS Challenge 2019.
For this track, participants will use HACS Segments, a video dataset carefully annotated with a complete set of temporal action segments for the temporal action localization task. Each video can contain multiple action segments. The task is to localize these action segments by predicting the start and end times of each action as well as the action label. Participants are allowed to leverage multi-modalities (e.g. audio/video). External datasets for pre-training are allowed, but it needs to be clearly documented. Training and testing will be performed on the following dataset:
HACS Segments ONLY
In this challenge, we have recieved 53 submissions from 22 teams. Winner teams' performance and reports can be found below.
| Rank | Team | mAP Score |
|---|---|---|
| First Place | Huazhong University of Science and Technology & DAMO Academy, Alibaba Group [report] | 40.53 |
| Runner Up | VIS, Baidu Inc. & Shanghai Jiao Tong University [report] | 39.33 |
| 2019 Challenge First Place | Microsoft Research Asia & University of Rochester [report] | 23.49 |
| 2019 Challenge Runner Up | Samsung Research Institute China [report] | 22.10 |
| Baseline | SSN re-implemented in HACS paper | 16.10 |
For this track, participants are allowed to use two datasets for the temporal action localization task, namely HACS Clips and HACS Segments. HACS Segments contains videos densely annotated with temporal action segments, , while HACS Clips contains videos where only a sparse set of short video clips are annotated.. These two datasets share the same video source and taxonomy. Participants are encouraged to explore a weakly-supervised training procedure to learn action localization models. The following two dataset are allowed for model training, and testing will be performed on the test set of HACS Segments:
HACS Clips
HACS Segments
In this challenge, we have recieved 17 submissions from 13 teams. Winner teams' performance and reports can be found below.
Please follow instructions in THIS PAGE to download HACS Segments dataset.
You can choose to use our I3D pretrained features (2FPS) on HACS Segments directly for the challenge. This I3D-50 model is pretrained on Kinetics-400, taking clips of 16 frames as input, and outputing a feature of 2048-D.
We use mAP as our evaluation metric, which is the same as ActivityNet localization metric.
Interpolated Average Precision (AP) is used as the metric for evaluating the results on each activity category. Then, the AP is averaged over all the activity categories (mAP). To determine if a detection is a true positive, we inspect the temporal intersection over union (tIoU) with a ground truth segment, and check whether or not it is greater or equal to a given threshold (e.g. tIoU > 0.5). The official metric used in this task is the average mAP, which is defined as the mean of all mAP values computed with tIoU thresholds between 0.5 and 0.95 (inclusive) with a step size of 0.05.
Performance of BOTH tracks are evaluated on the test set of HACS Segments. You should submit a JSON file (and then ZIP into .zip) in the following format, where each video ID has a list of predicted action segments. And a short report (no page requirements) on your methodi should be sent to HangZhao AT csail.mit.edu.
{ "results": { "--0edUL8zmA": [ { "label": "Dodgeball", "score": 0.84, "segment": [5.40, 11.60] }, { "label": "Dodgeball", "score": 0.71, "segment": [12.60, 88.16] } ] } }
Please contact HangZhao AT csail.mit.edu for further questions.


open console to see event attack to image objects. First canvas: show what type of image object available. Second canvas: is a small test for performance of the jGraphic There are 1000 images render. And it refresh twice every 100ms to show and hide random image on canvas.


planetplanet is an open-source code for predicting and modeling planet-planet occultations, as well as transit and secondary eclipse light curves, phase curves, mutual transits, and more. In my 2017 paper (link below), I showed how planet-planet occultations are extremely common among the TRAPPIST-1 planets: on average, there is about one such occultation per (Earth) day(!) This happens because the TRAPPIST-1 system is extremely coplanar, and viewed almost perfectly edge-on from Earth. Most of these occultations are too brief and don't produce a detectable signal, but some occultations between planets b and c could be detectable with JWST and other upcoming telescopes. Check out the links at the top for the paper, the code, and the documentation.


Welcome to the Software Engineering Open Science Portal
Because ... (r)esearch has deserted the individual and entered the group. The individual worker find the problem too large, not too difficult. (They) must learn to work with others. - Theobald Smith (1859-1934).


PIG DICE
Instructions for the game
Each turn a player repeatedly rolls a die until either a 1 is rolled or the player decides to "hold":
1)If the player rolls a 1, they score nothing and it becomes the next player,s turn.
2)If the player rolls any other number, it is added to their turn total & the player's turn continues.
3)If a player chooses to "hold", their turn total is added to tjheir score, & it becomes the next player's turn.
The first player to score 100 or more points wins.


Welcome to the Straight client example. Loading this page from the filesystem won't work since ajax-requests cannot be sent to other domains.
Clicking the button below will generate a new address for the order for 1 Satoshi and will subscribe you to the websocket, which will automatically notify you when the money arrive to the address. You don't have to refresh this page.
Use this button to generate a new order:


Touchscreen Hynitron
git clone https://github.com/lupyuen/hynitron_i2c_cst0xxse
Overview
this does not exist yet in zephyr, but there is work in progress https://github.com/zephyrproject-rtos/zephyr/pull/16119
Requirements
complement the pinetime.dts file with the following (under samples/sensor/bma280)
&i2c1 {
touch@18 {
};
};
Create a file: /dts/bindings/sensor/touch.yaml. Which contains:
compatible: "touch"
include: i2c-device.yaml
properties:
int1-gpios:
type: phandle-array
required: false
Building and Running
Todo
-create touchscreen driver -create sample


Copyright (c) 2000 Andy Daniel
The game is played on the following board with this setup:
|
| An example White can make a 3 in-a-row on cell [1], or two of them dropping a stone at cell [2]. Black has one 3 in-a-row at g7-h7-i7. |
More information can be found at the author's website www.enginuity.com (or in Funagain). The author says: In the "luck and skill" variant, all 72 stones are placed into the pouch and you draw a stone at your turn. You must play whatever you draw, even if it is your opponent's color.


@TomasVarneckas
Doing Rails for ~3 years (started with 2.3)
Mostly small projects (<20kloc)
Doing TDD (trying to) most of the time
Rails
RSpec
Mocha
Capybara/RSpec
FactoryGirl
Timecop, Webmock, VCR
Test-First Development
Test Driven Development
Behavior Driven Development
Ease refactoring.
Produce testable code.
Focus.
Time
Uncertainty
Unfamiliar tools/frameworks
Where to start?
Experiment without tests.
Do quick mockups.
From the outside.
Write an acceptance test first.
Do not test edge cases in acceptance tests.
Fill in the gaps using lower level tests.
The Browser
Write view code you would want for a feature.
Watch it break.
Implement whats needed (with controller/model/helper specs).
Repeat.
Good for small features.
Easy to get lost if the flow has more than 2-3 steps.
Testing JS heavy pages with request specs is painful.
Lots of fiddling.
Avoid if possible. Test JS separately using Jasmine.
"I get paid for code that works, not for tests, so my
philosophy is to test as little as possible to
reach a given level of confidence."
Kent Beck
"In general I don't write tests for any code that I have to "fiddle" into place by trial and error. But I separate that "fiddling" code from code that I am surer of and can write tests for."
"I don't write tests for GUIs. GUIs require fiddling. You have to nudge them into place by changing a font size here, an RGB value there, an XY position here, a field width there. Doing that test-first is silly and wasteful."
Robert C. Martin
Test to have confidence in your code.
Stop when you are confident enough.
Don't waste time writing time consuming and very brittle tests.
How many tests for this?
class User < ActiveRecord::Base
devise :database_authenticatable, :rememberable
attr_accessible :email, :password, :password_confirmation, :remember_me
validates_presence_of :common_sense
end
What about now?
class User < ActiveRecord::Base
devise :database_authenticatable, :rememberable
attr_accessible :email, :password, :password_confirmation, :remember_me
validates_presence_of :common_sense
def common_sense
sanity.present? and life_experience.present?
end
end
Looks important...
class User < ActiveRecord::Base
devise :database_authenticatable, :rememberable
attr_accessible :email, :password, :password_confirmation, :remember_me
validates_presence_of :common_sense
def revenue
sold_items.map(&:price) + sold_service.map(&:price)
end
end
Look familiar?
class User < ActiveRecord::Base
before_save :send_welcome_email
private
def send_welcome_email
UserMailer.welcome_email(self).deliver
end
end
100 specs * mailer code runtime = coffee break
Does a new user record always need an email to be sent?
Perhaps that's a higher level concern?
The TDD cycle must be fast.
Waiting more than 5 seconds for a single test is bad.
Inevitable if developing Rails apps the traditional way.
Spork
Zeus
Spring
Simple to add.
No need to change development style.
Drop in solutions.
What to mock?
Responsibilities
class UsersController < ActionController::Base
respond_to :html
def index; @users = User.all; end
def show; @user = User.find(params[:id]); end
def new; @user = User.new; end
def create
@user = User.new(params[:user])
@user.save
UserMailer.welcome(@user).deliver if @user.errors.blank?
respond_with(@user)
end
end
Success test case
Failure test case
Mock out mailer, test separately.
describe UsersController do
describe 'create' do
context 'given valid input' do
def do_post; post :create, user: attributes_for(:user); end
it 'redirects to users page' do
do_post; response.should redirect_to user_path(User.last)
end
it 'creates a user' do
expect { do_post }.to change(User, :count).by(1)
end
it 'sends out a welcome' do
UserMailer.expects(:welcome).once.returns(stub_everything)
do_post
end
end
end
end
describe UsersController do
describe 'create' do
context 'given invalid input' do
def do_post; post :create, user: attributes_for(:user).except(:email); end
it 'renders new' do
do_post; response.should render_template :new
end
it 'does not create a user' do
expect { do_post }.to_not change(User, :count)
end
it 'does not send out a welcome' do
UserMailer.expects(:welcome).never; do_post
end
end
end
end
Test mailer in the controller spec.
Becomes cumbersome fast.
RSpec.configure do |config|
# ...
config.render_views
# ...
end
Without
Finished in 18.8 seconds
246 examples, 0 failures
With
Finished in 21.57 seconds
246 examples, 0 failures
Isolate a region.
Cover it with some basic tests.
Refactor.
class DoImport < Struct.new(:import_id)
def perform
Rails.logger.info "started import"
@import = Import.find(import_id) #move this to job...
total_count = 0
imported_count = 0
failed_array = []
tmp_dir = "#{Rails.root}/tmp" #create tmp
Dir::mkdir(tmp_dir) unless FileTest::directory?(tmp_dir)
x = open(@import.spreadsheet.url).read
#dl from url
<EMAIL_ADDRESS>'wb') do |file|
file << x
end
# 60 lines omitted
end
end
Isolate input source.
Stub it in tests.
def perform
csv = read_spreadsheet
# ...
end
def read_spreadsheet
#create tmp
tmp_dir = "#{Rails.root}/tmp"
Dir::mkdir(tmp_dir) unless FileTest::directory?(tmp_dir)
x = open(@import.spreadsheet.url).read
#dl from url
<EMAIL_ADDRESS>'wb') do |file|
file << x
end
#open from tmp folder
<EMAIL_ADDRESS>end
describe DoImport do
before do
@do_import =<EMAIL_ADDRESS>@mock_csv = <<-CSV.strip_heredoc
"id","name"
,"Foo"
CSV
@do_import.stubs(:read_spreadsheet).returns(@mock_csv)
end
it 'creates a record' do
expect { @do_import.perform }.to change { Record.count }
end
end
Far from perfect.
Now we have a starting point.
Refactor when modifying or adding new features.
Extra layers of abstraction, less documented approach.
Small projects can happily live without thinking about this.
Break up app into several apps, each providing specific features.
Overkill for small projects.
TDD brings focus and confidence.
Not all situations require strict discipline.
Try applying it partially to see where pain appears.


Most people here create or curate stuff they want to share with the world. We like to help with that. Tell us what you 're about so we can promote the stuff you 're into. Choose upto four..


Contact
Contact DJ Seeds directly:
<EMAIL_ADDRESS>Report issues or contribute:
GitHub
Give feedback and discuss LNCast:
Y'alls.org


Status
Manage
Config
Status
Database
Connected
Server load
Idle
Management
Configuration
Port
Root URL Path
Database Password
Hashing Key


{% extends "layout.html" %} {% load humanize %} {% load static %} {% block title %} OPAL: Author Instructions {% endblock title %} {% block layout-content %}
Advice for how to create puzzles.
Please talk to Evan as much as possible during the writing process. For example, it's probably a good idea to tell Evan what mechanic you come up with before actually implementing it. The whole point of this event is so that you can get feedback on the puzzle-writing process and learn from these comments.
This is doubly true for beginners: puzzle-writing is notoriously hard to break into, and you'll be better off getting as much advice as you can on your specific drafts and ideas.


House in the Woods / WEYES Estudio
- Curated by Clara Ott
- 4 days
Sustainability · Santiago, Mexico
- version="1.0" encoding="UTF-8"? Architects: WEYES Estudio
- AreaArea of this architecture projectArea: 165.0 ft2
- version="1.0" encoding="UTF-8"?YearCompletion year of this architecture project Year: 2018
- version="1.0" encoding="UTF-8"?PhotographsPhotographs: The Raws
- version="1.0" encoding="UTF-8"?ManufacturersBrands with products used in this architecture project Manufacturers: AutoDesk, Cuprum, Producto Artesanal
- Lead Architects Chente Tapia, Moises Morales, Mariana Montoya
- Design Team Adela Mortera, Axel Ochoa, Vania Ibarr
- Landscaping / Collaborator Global Sustainable Solutions. José Borrani
- Engineering CM Ingenierias y Estructuras. Roman Cuellar
- Builder Sagal Grupo Constructor. SA de CV.
More Specs Less Specs
Text description provided by the architects. Single Family home consisting of 4 small pavilions, linked by exterior walkways, respectfully blended with the forest, covered by the treetops and floated off the ground.
Four small pavilions were guided by the trees and the topography to remain very silent, respectful of the environment. Wrapped in forest; covered by the treetops and floated off the ground. There are connections between them by light walkways, which improve the interior-exterior experience. The architecture and its users live in symbiosis with the forest; they become part of and supplement the natural micro-ecosystem.
You see a simple construction, without technical complications, with a lot of detail in the placement of its materials. There is a wide variety of apparent materials that will age with dignity over time and will blend with the surroundings.
We translated the love for nature and the original lifestyle of users into a "minimal footprint"; not to destroy natural contexts but to build in conjunction with them.
Minimum Footprint.
For energy, rather than producing, consume the minimum. For water consumption, use gravity and reduce usage. For rain, allow infiltration into subsoil and natural water streams avoiding erosion. For flora and fauna, integrate ourselves into their cycles. For substrate, regenerate what has been damaged by the human footprint. For the economic factor, solve from the most logical local resources. For lighting, take advantage of daylight and reduce night lighting consumption. For temperature control, traditional passive systems. For technology, focus communications and simplify everyday tasks. For useful life, recognize our environment.


hello my name is allison vicenzi
what i'm up to now
about.me
status updates
pictures i took 1
pictures i took 2
perpetual mood board
*NEW* project: material
adventures in not buying any new stuff


This project is a product of the District Data Labs Incubator Program, which helps qualified participants gain hands-on data science experience with the assistance of mentors through creating a data product. We selected our team of four individuals through our common interest in natural language processing (NLP). There were two objectives for this project: The first was to assist our mentor, Benjamin Bengfort, with creating visualizations for his PyCon talk on May 30, 2016. The second was to create a gallery of data products proposing more interesting ways, beyond the word cloud, to visualize text data. Our final product is this gallery. The tabs contain: Sentiment analysis visualizations Map of geographical entities
The dataset is a corpus of news and blog posts ingested using Baleen from the period March 3, 2016, ongoing. The latest dump we have received from Ben is from May 14, 2016. Currently, the data set contains 52k+ articles in HTML format for a size of approximately 3.6 GB. The corpus is still growing at a rate of several thousand posts per day. We have converted the HTML files to txt files for NLP in python.


Plato on Github
Report Home
compiled\ember-routing\lib\location\auto_location.js
Maintainability
60.43
Lines of code
306
Difficulty
37.10
Estimated Errors
1.72
Function weight
By Complexity
By SLOC
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); exports.getHistoryPath = getHistoryPath; exports.getHashPath = getHashPath; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var _emberMetalCore = require('ember-metal/core'); var _emberMetalCore2 = _interopRequireDefault(_emberMetalCore); // FEATURES var _emberMetalProperty_get = require('ember-metal/property_get'); var _emberMetalProperty_set = require('ember-metal/property_set'); var _emberMetalUtils = require('ember-metal/utils'); var _emberRuntimeSystemObject = require('ember-runtime/system/object'); var _emberRuntimeSystemObject2 = _interopRequireDefault(_emberRuntimeSystemObject); var _emberMetalEnvironment = require('ember-metal/environment'); var _emberMetalEnvironment2 = _interopRequireDefault(_emberMetalEnvironment); var _emberRoutingLocationUtil = require('ember-routing/location/util'); /** @module ember @submodule ember-routing */ /** Ember.AutoLocation will select the best location option based off browser support with the priority order: history, hash, none. Clean pushState paths accessed by hashchange-only browsers will be redirected to the hash-equivalent and vice versa so future transitions are consistent. Keep in mind that since some of your users will use `HistoryLocation`, your server must serve the Ember app at all the routes you define. @class AutoLocation @namespace Ember @static @private */ exports['default'] = _emberRuntimeSystemObject2['default'].extend({ /** @private The browser's `location` object. This is typically equivalent to `window.location`, but may be overridden for testing. @property location @default environment.location */ location: _emberMetalEnvironment2['default'].location, /** @private The browser's `history` object. This is typically equivalent to `window.history`, but may be overridden for testing. @since 1.5.1 @property history @default environment.history */ history: _emberMetalEnvironment2['default'].history, /** @private The user agent's global variable. In browsers, this will be `window`. @since 1.11 @property global @default environment.global */ global: _emberMetalEnvironment2['default'].global, /** @private The browser's `userAgent`. This is typically equivalent to `navigator.userAgent`, but may be overridden for testing. @since 1.5.1 @property userAgent @default environment.history */ userAgent: _emberMetalEnvironment2['default'].userAgent, /** @private This property is used by the router to know whether to cancel the routing setup process, which is needed while we redirect the browser. @since 1.5.1 @property cancelRouterSetup @default false */ cancelRouterSetup: false, /** @private Will be pre-pended to path upon state change. @since 1.5.1 @property rootURL @default '/' */ rootURL: '/', /** Called by the router to instruct the location to do any feature detection necessary. In the case of AutoLocation, we detect whether to use history or hash concrete implementations. @private */ detect: function detect() { var rootURL = this.rootURL; _emberMetalCore2['default'].assert('rootURL must end with a trailing forward slash e.g. "/app/"', rootURL.charAt(rootURL.length - 1) === '/'); var implementation = detectImplementation({ location: this.location, history: this.history, userAgent: this.userAgent, rootURL: rootURL, documentMode: this.documentMode, global: this.global }); if (implementation === false) { (0, _emberMetalProperty_set.set)(this, 'cancelRouterSetup', true); implementation = 'none'; } var concrete = this.container.lookup('location:' + implementation); (0, _emberMetalProperty_set.set)(concrete, 'rootURL', rootURL); _emberMetalCore2['default'].assert('Could not find location \'' + implementation + '\'.', !!concrete); (0, _emberMetalProperty_set.set)(this, 'concreteImplementation', concrete); }, initState: delegateToConcreteImplementation('initState'), getURL: delegateToConcreteImplementation('getURL'), setURL: delegateToConcreteImplementation('setURL'), replaceURL: delegateToConcreteImplementation('replaceURL'), onUpdateURL: delegateToConcreteImplementation('onUpdateURL'), formatURL: delegateToConcreteImplementation('formatURL'), willDestroy: function willDestroy() { var concreteImplementation = (0, _emberMetalProperty_get.get)(this, 'concreteImplementation'); if (concreteImplementation) { concreteImplementation.destroy(); } } }); function delegateToConcreteImplementation(methodName) { return function () { var concreteImplementation = (0, _emberMetalProperty_get.get)(this, 'concreteImplementation'); _emberMetalCore2['default'].assert('AutoLocation\'s detect() method should be called before calling any other hooks.', !!concreteImplementation); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return (0, _emberMetalUtils.tryInvoke)(concreteImplementation, methodName, args); }; } /* Given the browser's `location`, `history` and `userAgent`, and a configured root URL, this function detects whether the browser supports the [History API](https://developer.mozilla.org/en-US/docs/Web/API/History) and returns a string representing the Location object to use based on its determination. For example, if the page loads in an evergreen browser, this function would return the string "history", meaning the history API and thus HistoryLocation should be used. If the page is loaded in IE8, it will return the string "hash," indicating that the History API should be simulated by manipulating the hash portion of the location. */ function detectImplementation(options) { var location = options.location; var userAgent = options.userAgent; var history = options.history; var documentMode = options.documentMode; var global = options.global; var rootURL = options.rootURL; var implementation = 'none'; var cancelRouterSetup = false; var currentPath = (0, _emberRoutingLocationUtil.getFullPath)(location); if ((0, _emberRoutingLocationUtil.supportsHistory)(userAgent, history)) { var historyPath = getHistoryPath(rootURL, location); // If the browser supports history and we have a history path, we can use // the history location with no redirects. if (currentPath === historyPath) { return 'history'; } else { if (currentPath.substr(0, 2) === '/#') { history.replaceState({ path: historyPath }, null, historyPath); implementation = 'history'; } else { cancelRouterSetup = true; (0, _emberRoutingLocationUtil.replacePath)(location, historyPath); } } } else if ((0, _emberRoutingLocationUtil.supportsHashChange)(documentMode, global)) { var hashPath = getHashPath(rootURL, location); // Be sure we're using a hashed path, otherwise let's switch over it to so // we start off clean and consistent. We'll count an index path with no // hash as "good enough" as well. if (currentPath === hashPath || currentPath === '/' && hashPath === '/#/') { implementation = 'hash'; } else { // Our URL isn't in the expected hash-supported format, so we want to // cancel the router setup and replace the URL to start off clean cancelRouterSetup = true; (0, _emberRoutingLocationUtil.replacePath)(location, hashPath); } } if (cancelRouterSetup) { return false; } return implementation; } /** @private Returns the current path as it should appear for HistoryLocation supported browsers. This may very well differ from the real current path (e.g. if it starts off as a hashed URL) */ function getHistoryPath(rootURL, location) { var path = (0, _emberRoutingLocationUtil.getPath)(location); var hash = (0, _emberRoutingLocationUtil.getHash)(location); var query = (0, _emberRoutingLocationUtil.getQuery)(location); var rootURLIndex = path.indexOf(rootURL); var routeHash, hashParts; _emberMetalCore2['default'].assert('Path ' + path + ' does not start with the provided rootURL ' + rootURL, rootURLIndex === 0); // By convention, Ember.js routes using HashLocation are required to start // with `#/`. Anything else should NOT be considered a route and should // be passed straight through, without transformation. if (hash.substr(0, 2) === '#/') { // There could be extra hash segments after the route hashParts = hash.substr(1).split('#'); // The first one is always the route url routeHash = hashParts.shift(); // If the path already has a trailing slash, remove the one // from the hashed route so we don't double up. if (path.slice(-1) === '/') { routeHash = routeHash.substr(1); } // This is the "expected" final order path = path + routeHash + query; if (hashParts.length) { path += '#' + hashParts.join('#'); } } else { path = path + query + hash; } return path; } /** @private Returns the current path as it should appear for HashLocation supported browsers. This may very well differ from the real current path. @method _getHashPath */ function getHashPath(rootURL, location) { var path = rootURL; var historyPath = getHistoryPath(rootURL, location); var routePath = historyPath.substr(rootURL.length); if (routePath !== '') { if (routePath.charAt(0) !== '/') { routePath = '/' + routePath; } path += '#' + routePath; } return path; }


This plugin marks abbreviations and acronyms based on an acronyms/abbreviations files.
This plugin comes with Pyblosxom. To install, do the following:
In your config.py file, add Pyblosxom.plugins.acronyms to the load_plugins variable.
Create an acronyms file with acronyms and abbreviations in it.
See below for the syntax.
(optional) In your config.py file, add a line like this:
py["acronyms_file"] = "/path/to/file"
Make sure to use the complete path to your acronyms file in place of "/path/to/file".
This defaults to acronyms.txt in the parent directory of your datadir.
The file should be a text file with one acronym or abbreviation followed by an = followed by the explanation. The acronym/abbreviation is a regular expression and can contain regular expression bits.
An acronym is upper or lower case letters that is NOT followed by a period. If it’s followed by a period, then you need to explicitly state it’s an acronym.
<acronym> = explanation <acronym> = acronym|explanation
Examples:
ASCII = American Standard Code for Information Interchange
CGI = Common Gateway Interface; Computer Generated Imagery
CSS = Cascading Stylesheets
HTML = Hypertext Markup Language
HTTP = Hypertext Transport Protocol
RDF = Resource Description Framework
RSS = Really Simple Sindication
URL = Uniform Resource Locator
URI = Uniform Resource Indicator
WSGI = Web Server Gateway Interface
XHTML = Extensible Hypertext Markup Language
XML = Extensible Markup Language
This one is explicitly labeled an acronym:
X.M.L. = acronym|Extensible Markup Language
This one uses regular expression to match both UTF-8 and UTF8:
UTF\-?8 = 8-bit UCS/Unicode Transformation Format
An abbreviation is a series of characters followed by a period. If it’s not followed by a period, then you need to explicitly state that it’s an abbreviation.
<abbreviation> = explanation <abbreviation> = abbr|explanation
Examples:
dr. = doctor
This one is explicitly labeled an abbreviation:
dr = abbr|doctor
Note
If the first part is an improperly formed regular expression, then it will be skipped.
You can verify that your file is properly formed by running pyblosxom-cmd test.
When writing a blog entry, write the acronyms and abbreviations and they’ll be marked up by the plugin in the story callback.
If you’re writing an entry that you don’t want to have marked up, add this to the metadata for the entry:
#noacronyms 1
You might want to add something like this to your CSS:
acronym {
bordor-bottom: 1px dashed #aaa;
cursor: help;
}
abbr {
bordor-bottom: 1px dashed #aaa;
cursor: help;
}
Based on the Blosxom acronyms plugin by Axel Beckert at http://noone.org/blosxom/acronyms .
Plugin is distributed under license: MIT


Contains one class, as of now: the EntityDisplay.
Classes in this package serve to visualize the user's default Entities. An entire package is provided, in the event that more classes will be necessary, at one point, to satisfy this objective.
As of now, all changes should be made in EntityDisplay, which extends EditableContainer to provide the ability to edit, remove, and create new Entities from a ListView.


"There's a path in life That all of us walk, Without thinking, without questioning... Then comes a bend in the road And only a fanatic takes the road no one dares to" Most of us take up a 9 to 5 after we graduate and go about our daily lives. However, it takes a special kind of crazy to start a business from scratch and write history. So tell us, are you that kind of fanatic?  IEEE APSIT PES Chapter brings you an eclectic webinar symposium, Showrunners of Futurity! With the aim of building entrepreneurial spirit, you will get to hear from an exciting roster of speakers, which will help you take your first step towards being an entrepreneur.
IEEE APSIT hosts an array of technical events around the year - hackathons, workshops, expert talks, community events and a whole lot more. Our events are highly inclusive with an active emphasis on learning and growth.
The ongoing situation as a result of Covid-19 and the subsequent lockdown has put us all in a difficult spot. The times are uncertain and everyone is fighting their own battles. However, this is also an excellent opportunity to expand your horizons and add new skills to your repertoire. With this aim, IEEE APSIT SB Computer Society brings you The Coders Week, a programming endeavour, starting from 1st June 2020.
IEEE APSIT introduced a five days webinar series, Talkdown in the Lockdown, during the country-wide lockdown period. Speakers who joined us for the sessions were Raj Pritam Bhattacharya, Faiz Malkhani, Nakul Agrawal, Nikhil Karande and Chirag Nayyar. Topics of the sessions included cloud computing, careers in Blockchain, design thinking and others. Among these technical subjects, Nakul Agrawal guided our participants regarding how to manage anxiety and how to over come stress and boredom specially during the lockdown period.
An event on Tensorflow was organised by IEEE APSIT and Tensrflow India User Group where participants were educated about Deep Learning, Neural Networks and the Advatages of Tensorflow 2.0 in solving modern deep learning problems. The sessions commenced by a welcome not by Mr. Ali Mustafa followed by expert talks by Mr. Santosh Chapaneri, MS (ECE) from University of Arizona and Assistant Professor at SFIT and Mr. Indranil Chandra, Intel Software Innovator and Machine Learning Engineer at Aditya Birla Finanace.
IEEE and its members inspire a global community to innovate for a better tomorrow through its more than 423,000 members in over 160 countries, and its highly cited publications, conferences, technology standards, and professional and educational activities. IEEE is the trusted “voice” for engineering, computing, and technology information around the globe.
IEEE membership provides you with the resources and opportunities you need to keep on top of changes in technology; get involved in standards development; network with other professionals in your local area or within a specific technical interest; mentor the next generation of engineers and technologists, and so much more.
Know More!
IEEE APSIT Student Chapter is a student body representing A.P Shah Institute of Technology on IEEE platform. We formed this committee of IEEE members to educate and to bring awareness of the latest technology prevailing in today's world. We strive to improve the quality of knowledge being imparted to students by organizing technical workshops and events which are led by motivational speakers. Our aim is to help students achieve a successful career by making them eligible for the current world of technology.
IEEE Computer Society is a professional society of the IEEE. Its purpose and scope is "to advance the theory, practice, and application of computer and information processing science and technology" and the "professional standing of its members."
IEEE WIE is one of the world’s leaders in changing the face of engineering. Our global network connects nearly 20,000 members in over 100 countries to advance women in technology at all points in their life and career. IEEE WIE members make lifelong friendships, acquire influential mentors, and make a difference for the benefit of humanity.
EEE PES of APSIT aims to provide scientific and engineering information on electric power and energy for the betterment of society and for for developing standards that guide the development and construction of equipment and systems, and for educating members of the society and the general public.
IEEE membership offers access to technical innovation, cutting-edge information, networking opportunities, and exclusive member benefits. Members support IEEE's mission to advance technology for humanity and the profession, while memberships build a platform to introduce careers in technology to students around the world.
Member Benefits
As an IEEE member, you'll be presented with new resources, valuable opportunities, and many discounts that will help you advance your career in the right direction. You can find colleagues who share your vision and commitment—those who are moving technology forward today.
Join IEEE or renew your membership
Reach your full potential as part of the world’s largest technology community. Join professionals, experts, and advisors who can help shape your career, offer resources to acquire new skills, and advance your professional development.
Do you have some queries or suggestions, don't hesistate to share the same with us!
Drop us a message, we'll get back to you.!


Enter your first name: Enter your middle name: Enter your last name:
Enter username:
Enter email id: Enter mobile number: Enter address:
Enter the password: Reenter the password:


[gecode-users] Problem when compiling with Gecode 3.3.1
Guido Tack
tack at gecode.org
Fri Jul 16 14:51:32 CEST 2010
Please look at the prerequisites: Gecode requires gcc >= 4.2. You have to give CC=gcc-4.2 CXX=g++-4.2 as options on the configure command line.
Cheers,
Guido
Mauricio Toro wrote:
> Under Mac Os X 10.5.8 with g++ 4.01
>
> 2010/7/16 Mauricio Toro <mauriciotorob at gmail.com>
> Hello,
>
> I am compiling my program with Gecode 3.3.1. It used to work with Gecode 3.2.2.
> I changed the functions ES_SUBSUMED, fail, etc, but I am getting these errors
> and they don't have any reference to my program:
>
> /Library/Frameworks/gecode.framework/Headers/kernel/core.hpp: In constructor ‘Gecode::Space::Propagators::Propagators(const Gecode::Space&)’:
> /Library/Frameworks/gecode.framework/Headers/kernel/core.hpp:2410: error: ‘static Gecode::Propagator* Gecode::Propagator::cast(Gecode::ActorLink*)’ is private
> /Library/Frameworks/gecode.framework/Headers/kernel/core.hpp:3400: error: within this context
> /Library/Frameworks/gecode.framework/Headers/kernel/core.hpp:3400: error: ‘Gecode::ActorLink’ is an inaccessible base of ‘Gecode::Propagator’
> /Library/Frameworks/gecode.framework/Headers/kernel/core.hpp:2418: error: ‘static const Gecode::Propagator* Gecode::Propagator::cast(const Gecode::ActorLink*)’ is private
> /Library/Frameworks/gecode.framework/Headers/kernel/core.hpp:3401: error: within this context
> /Library/Frameworks/gecode.framework/Headers/kernel/core.hpp:3401: error: ‘Gecode::ActorLink’ is an inaccessible base of ‘Gecode::Propagator’
> /Library/Frameworks/gecode.framework/Headers/kernel/core.hpp: In member function ‘void Gecode::Space::Propagators::operator++()’:
> /Library/Frameworks/gecode.framework/Headers/kernel/core.hpp:2410: error: ‘static Gecode::Propagator* Gecode::Propagator::cast(Gecode::ActorLink*)’ is private
> /Library/Frameworks/gecode.framework/Headers/kernel/core.hpp:3426: error: within this context
> /Library/Frameworks/gecode.framework/Headers/kernel/core.hpp:3426: error: ‘Gecode::ActorLink’ is an inaccessible base of ‘Gecode::Propagator’
> /Library/Frameworks/gecode.framework/Headers/kernel/core.hpp:2418: error: ‘static const Gecode::Propagator* Gecode::Propagator::cast(const Gecode::ActorLink*)’ is private
> /Library/Frameworks/gecode.framework/Headers/kernel/core.hpp:3427: error: within this context
> /Library/Frameworks/gecode.framework/Headers/kernel/core.hpp:3427: error: ‘Gecode::ActorLink’ is an inaccessible base of ‘Gecode::Propagator’
> /Library/Frameworks/gecode.framework/Headers/kernel/core.hpp: In member function ‘const Gecode::Propagator& Gecode::Space::Propagators::propagator() const’:
> /Library/Frameworks/gecode.framework/Headers/kernel/core.hpp:2418: error: ‘static const Gecode::Propagator* Gecode::Propagator::cast(const Gecode::ActorLink*)’ is private
> /Library/Frameworks/gecode.framework/Headers/kernel/core.hpp:3436: error: within this context
> /Library/Frameworks/gecode.framework/Headers/kernel/core.hpp: In constructor ‘Gecode::Space::Branchers::Branchers(const Gecode::Space&)’:
> /Library/Frameworks/gecode.framework/Headers/kernel/core.hpp:2484: error: ‘static Gecode::Brancher* Gecode::Brancher::cast(Gecode::ActorLink*)’ is private
> /Library/Frameworks/gecode.framework/Headers/kernel/core.hpp:3441: error: within this context
> /Library/Frameworks/gecode.framework/Headers/kernel/core.hpp:3441: error: ‘Gecode::ActorLink’ is an inaccessible base of ‘Gecode::Brancher’
> /Library/Frameworks/gecode.framework/Headers/kernel/core.hpp: In member function ‘const Gecode::Brancher& Gecode::Space::Branchers::brancher() const’:
> /Library/Frameworks/gecode.framework/Headers/kernel/core.hpp:2492: error: ‘static const Gecode::Brancher* Gecode::Brancher::cast(const Gecode::ActorLink*)’ is private
> /Library/Frameworks/gecode.framework/Headers/kernel/core.hpp:3452: error: within this context
> /Library/Frameworks/gecode.framework/Headers/minimodel/bool-expr.hpp: In constructor ‘Gecode::BoolExpr::Node::Node()’:
> /Library/Frameworks/gecode.framework/Headers/minimodel/lin-rel.hpp:45: error: ‘Gecode::LinRel::LinRel()’ is private
> /Library/Frameworks/gecode.framework/Headers/minimodel/bool-expr.hpp:45: error: within this context
>
>
> What can I do?
>
> Thank you,
>
> Mauricio
>
> --
> Mauricio TORO BERMUDEZ
>
> Research Postgraduate Student (Ph.D)
> Computer Science Research Laboratory of Bordeaux (LABRI)
> University of Bordeaux 1: Science and Technology
>
> http://www.labri.fr/perso/mtoro/
>
> 351, cours de la Libération
> F-33405 Talence Cedex. France.
> Phone: (+33) 5 4000 24 85
> Fax: (+33) 5 4000 66 69
>
> Please don't print this e-mail unless you really need to.
>
>
>
>
> --
> Mauricio TORO BERMUDEZ
>
> Research Postgraduate Student (Ph.D)
> Computer Science Research Laboratory of Bordeaux (LABRI)
> University of Bordeaux 1: Science and Technology
>
> http://www.labri.fr/perso/mtoro/
>
> 351, cours de la Libération
> F-33405 Talence Cedex. France.
> Phone: (+33) 5 4000 24 85
> Fax: (+33) 5 4000 66 69
>
> Please don't print this e-mail unless you really need to.
>
> _______________________________________________
> Gecode users mailing list
> users at gecode.org
> https://www.gecode.org/mailman/listinfo/gecode-users
--
Guido Tack, http://people.cs.kuleuven.be/~guido.tack/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.gecode.org/pipermail/users/attachments/20100716/c6c57080/attachment-0001.htm>
More information about the users
mailing list


Industry News for Progressive Web Apps (PWA).This is a simple news site displaying links and summary information for public articles on the topic. The site uses Microsoft's Bing Search API to search for articles using the keyword 'PWA', and renders the top 20 articles below. This site is one of the sample apps from Learning Progressive Web Apps; it's a PWA and supports installation, data caching, and more. Check out the book for more information.
Updated: Unknown
Note: The server process caches news items for 15 minutes, so the Last Updated date/time won't update with every request. I did this to keep from overloading the Bing Search API Free Tier.


*** User 2017-05-02 17:32:07.457 ***
17:32:07.457 [info] Disabling blocking sync...
*** User 2017-05-02 17:32:07.462 ***
17:32:07.462 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-1@MacBook-Pro-de-Anne-France'
*** User 2017-05-02 17:32:08.946 ***
17:32:08.946 [info] Enabling membership...
*** User 2017-05-02 17:32:08.947 ***
17:32:08.947 [info] Disabling blocking sync...
*** User 2017-05-02 17:32:08.952 ***
17:32:08.952 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-2@MacBook-Pro-de-Anne-France'
*** User 2017-05-02 17:32:10.446 ***
17:32:10.446 [info] Enabling membership...
*** User 2017-05-02 17:32:10.447 ***
17:32:10.447 [info] Disabling blocking sync...
*** User 2017-05-02 17:32:10.452 ***
17:32:10.452 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-3@MacBook-Pro-de-Anne-France'
*** User 2017-05-02 17:32:10.705 ***
Joining node: 'node-3@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 56035
*** User 2017-05-02 17:32:10.705 ***
Joining issued: 'node-3@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 56035
*** User 2017-05-02 17:32:10.706 ***
Joining node: 'node-2@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 56019
*** User 2017-05-02 17:32:10.706 ***
Joining issued: 'node-2@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 56019
*** User 2017-05-02 17:32:10.707 ***
Joining node: 'node-1@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 56006
*** User 2017-05-02 17:32:10.707 ***
Joining issued: 'node-1@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 56006
*** User 2017-05-02 17:32:10.768 ***
Waiting for join to complete with manager: partisan_default_peer_service_manager
*** User 2017-05-02 17:32:10.770 ***
Finished.
*** CT 2017-05-02 17:32:10.770 *** COVER INFO
Adding nodes to cover test: ['runner@MacBook-Pro-de-Anne-France']
*** CT 2017-05-02 17:32:10.778 *** COVER INFO
Successfully added nodes to cover test: []
*** User 2017-05-02 17:32:10.823 ***
Case finished: monotonic_read_test
*** User 2017-05-02 17:32:17.866 ***
17:32:17.866 [info] Application lasp exited with reason: stopped
*** User 2017-05-02 17:32:17.867 ***
17:32:17.867 [info] Application partisan exited with reason: stopped
=== Ended at 2017-05-02 17:32:17
=== successfully completed test case
=== Returned value: ok
Test run history
| Top level test index


byobu-screen(1) byobu byobu-screen(1) NAME byobu-screen - Launch byobu with screen as the backend DESCRIPTION byobu-screen launches byobu(1) with screen(1) as the backend window man‐ ager. SEE ALSO byobu(1), screen(1) http://launchpad.net/byobu AUTHOR This manpage and the utility were written by Dustin Kirkland <kirk‐<EMAIL_ADDRESS>for Ubuntu systems (but may be used by others). Permis‐ sion is granted to copy, distribute and/or modify this document and the utility under the terms of the GNU General Public License, Version 3 pub‐ lished by the Free Software Foundation. The complete text of the GNU General Public License can be found in /usr/share/common-licenses/GPL on Debian/Ubuntu systems, or in /usr/share/doc/fedora-release-*/GPL on Fedora systems, or on the web at http://www.gnu.org/licenses/gpl.txt. byobu 10 Aug 2011 byobu-screen(1)


{% extends 'base.html' %} {% from 'bootstrap/form.html' import render_field %} {% block heading %} Forgot your password? {% endblock %} {% block content %}
Enter your email address and we'll send you a password reset link.


Guidance
For inspection to 31 March 2017.
MS Word Document , 1.07MB
If you use assistive technology (such as a screen reader) and need a version of this document in a more accessible format, please email<EMAIL_ADDRESS>. Please tell us what format you need. It will help us if you say what assistive technology you use.
MS Word Document , 230KB
If you use assistive technology (such as a screen reader) and need a version of this document in a more accessible format, please email<EMAIL_ADDRESS>. Please tell us what format you need. It will help us if you say what assistive technology you use.
MS Word Document , 229KB
If you use assistive technology (such as a screen reader) and need a version of this document in a more accessible format, please email<EMAIL_ADDRESS>. Please tell us what format you need. It will help us if you say what assistive technology you use.
This document is for inspection to 31 March 2017. For inspection from 1 April 2017 please use the social care common inspection framework (SCCIF) .
This page has:
Published: 8 May 2014
Updated: 10 June 2016


Latvia
The Giant and Pastaris
Once upon a time a giant kidnapped a young fisherman named Pastaris. The giant carried Pastaris into a great palace. "Here you'll stay," said the giant. "Do not light a fire, no matter what happens!" Pastaris heard a terrible wailing. The next night the same thing happened. On the third night Pastaris decided he must build a fire so he could see where the wailing was coming from, so he decided to use a flint and tinder to light a candle. When the room lit up, the giant stormed into Pastaris' room. "You disobeyed me!" he thundered, and he carried Pastaris to a tall mountain and left him at the top. For two days Pastaris sat there, but on the third day he decided to climb down. When he reached the bottom of the mountain, he walked through the forest, and came upon four men standing around a fallen horse. "Do not pass by us!" the men cried. "We need you to divide this horse among us as we don't know how to divide it." Pastaris advised the men on how to divide the horse and then he turned to leave. "Wait, we must reward you for your help." The first man gave Pastaris a hair from a bull. "Spin this hair and your strength will be greater than the strength of any man." The second man gave Pastaris a feather. "Spin this, and you'll move faster than any creature moves." "And this," said the third man, handing Pastaris a scale, "will help you swim faster than any fish." The fourth man gave him an ant's leg and said, "With this you'll be able to dig to the center of the Earth." Pastaris thanked them and set off, but that evening the ground began to tremble, and the giant's voice roared, "Who told you to leave the mountain?" "I did," said Pastaris. "Is that so?" the giant thundered.  However, Pastaris spun the hair of the bull and struck the giant. The giant reeled and fell to the ground; and Pastaris said, "Now I shall kill you!" "My soul is not inside my body," the giant laughed. "Then tell me where it is," said Pastaris," and I will destroy it." "On the other side of the ocean stands a post. Hit this post with your finger, and a sword will fall down from heaven.  Catch the rabbit and cut off its head, and a dove will appear. If you can catch the dove when it flies to heaven, an egg will fall, and in that egg is my life. You will never have it." Pastaris left the giant and twirled the fish scale, and in one second he swam across the ocean. He found the post, and he hit that post with his finger. A great sword fell to the ground. Pastaris grabbed the sword and hurried into the forest, and there he found a snake. He struck the snake, and a rabbit ran out from the place where the snake had been. Pastaris twirled his feather, and suddenly it seemed as if he were flying.  Again Pastaris twirled his feather, flew up into the clouds and caught the dove. Sure enough, an egg dropped from the sky, plunging down into the ground. Pastaris twirled the ant leg, and just as the man had told him, he was able to climb into the ground after that egg and catch it. Pastaris carried that egg back to the giant's palace and smashed it to pieces. The giant died. And Pastaris lived happily ever after.
Source: Here


Kristina Welch Fashion Designer
In Austin, Texas
Home
Women's wear
Active wear
Print and Textiles
Follow me on twitter
My Designs
Fashion Illustrator
Technical Patternmaker
Technical Flats


This is a demo of Drift, a simple, lightweight, no-dependencies JavaScript "zoom on hover" tool from imgix. Move your mouse over the image (or touch it) to see it in action.
This demo uses the simple included theme, but it's very easy to extend and customize to fit your needs. You can learn more and download it here.
(Psst… try making your browser window smaller!)