YARN allows applications to specify placement constraints in the form of data locality (preference to specific nodes or racks) or (non-overlapping) node labels. This document focuses on more expressive placement constraints in YARN. Such constraints can be crucial for the performance and resilience of applications, especially those that include long-running containers, such as services, machine-learning and streaming workloads.
For example, it may be beneficial to co-locate the allocations of a job on the same rack (affinity constraints) to reduce network costs, spread allocations across machines (anti-affinity constraints) to minimize resource interference, or allow up to a specific number of allocations in a node group (cardinality constraints) to strike a balance between the two. Placement decisions also affect resilience. For example, allocations placed within the same cluster upgrade domain would go offline simultaneously.
The applications can specify constraints without requiring knowledge of the underlying topology of the cluster (e.g., one does not need to specify the specific node or rack where their containers should be placed with constraints) or the other applications deployed. Currently intra-application constraints are supported, but the design that is followed is generic and support for constraints across applications will soon be added. Moreover, all constraints at the moment are hard, that is, if the constraints for a container cannot be satisfied due to the current cluster condition or conflicting constraints, the container request will remain pending or get will get rejected.
Note that in this document we use the notion of “allocation” to refer to a unit of resources (e.g., CPU and memory) that gets allocated in a node. In the current implementation of YARN, an allocation corresponds to a single container. However, in case an application uses an allocation to spawn more than one containers, an allocation could correspond to multiple containers.
We first describe how to enable scheduling with placement constraints and then provide examples of how to experiment with this feature using the distributed shell, an application that allows to run a given shell command on a set of containers.
To enable placement constraints, the following property has to be set to placement-processor or scheduler in conf/yarn-site.xml:
| Property | Description | Default value |
|---|---|---|
| yarn.resourcemanager.placement-constraints.handler | Specify which handler will be used to process PlacementConstraints. Acceptable values are: placement-processor, scheduler, and disabled. | disabled |
We now give more details about each of the three placement constraint handlers:
The placement-processor handler supports a wider range of constraints and can allow more containers to be placed, especially when applications have demanding constraints or the cluster is highly-utilized (due to considering multiple containers at a time). However, if respecting task priority within an application is important for the user and the capacity scheduler is used, then the scheduler handler should be used instead.
Users can experiment with placement constraints by using the distributed shell application through the following command:
$ yarn org.apache.hadoop.yarn.applications.distributedshell.Client -jar share/hadoop/yarn/hadoop-yarn-applications-distributedshell-3.1.0.jar -shell_command sleep -shell_args 10 -placement_spec PlacementSpec
where PlacementSpec is of the form:
PlacementSpec => "" | KeyVal;PlacementSpec KeyVal => SourceTag=Constraint SourceTag => String Constraint => NumContainers | NumContainers,"IN",Scope,TargetTag | NumContainers,"NOTIN",Scope,TargetTag | NumContainers,"CARDINALITY",Scope,TargetTag,MinCard,MaxCard NumContainers => int Scope => "NODE" | "RACK" TargetTag => String MinCard => int MaxCard => int
Note that when the -placement_spec argument is specified in the distributed shell command, the -num-containers argument should not be used. In case -num-containers argument is used in conjunction with -placement-spec, the former is ignored. This is because in PlacementSpec, we determine the number of containers per tag, making the -num-containers redundant and possibly conflicting. Moreover, if -placement_spec is used, all containers will be requested with GUARANTEED execution type.
An example of PlacementSpec is the following:
zk=3,NOTIN,NODE,zk:hbase=5,IN,RACK,zk:spark=7,CARDINALITY,NODE,hbase,1,3
The above encodes two constraints: * place 3 containers with tag “zk” (standing for ZooKeeper) with node anti-affinity to each other, i.e., do not place more than one container per node (notice that in this first constraint, the SourceTag and the TargetTag of the constraint coincide); * place 5 containers with tag “hbase” with affinity to a rack on which containers with tag “zk” are running (i.e., an “hbase” container should not be placed at a rack where an “zk” container is running, given that “zk” is the TargetTag of the second constraint); * place 7 container with tag “spark” in nodes that have at least one, but no more than three, containers, with tag “hbase”.
Allocation tags are string tags that an application can associate with (groups of) its containers. Tags are used to identify components of applications. For example, an HBase Master allocation can be tagged with “hbase-m”, and Region Servers with “hbase-rs”. Other examples are “latency-critical” to refer to the more general demands of the allocation, or “app_0041” to denote the job ID. Allocation tags play a key role in constraints, as they allow to refer to multiple allocations that share a common tag.
Note that instead of using the ResourceRequest object to define allocation tags, we use the new SchedulingRequest object. This has many similarities with the ResourceRequest, but better separates the sizing of the requested allocations (number and size of allocations, priority, execution type, etc.), and the constraints dictating how these allocations should be placed (resource name, relaxed locality). Applications can still use ResourceRequest objects, but in order to define allocation tags and constraints, they need to use the SchedulingRequest object. Within a single AllocateRequest, an application should use either the ResourceRequest or the SchedulingRequest objects, but not both of them.
The difference between allocation tags and node labels or node attributes (YARN-3409), is that allocation tags are attached to allocations and not to nodes. When an allocation gets allocated to a node by the scheduler, the set of tags of that allocation are automatically added to the node for the duration of the allocation. Hence, a node inherits the tags of the allocations that are currently allocated to the node. Likewise, a rack inherits the tags of its nodes. Moreover, similar to node labels and unlike node attributes, allocation tags have no value attached to them. As we show below, our constraints can refer to allocation tags, as well as node labels and node attributes.
Applications can use the public API in the PlacementConstraints to construct placement constraint. Before describing the methods for building constraints, we describe the methods of the PlacementTargets class that are used to construct the target expressions that will then be used in constraints:
| Method | Description |
|---|---|
| allocationTag(String... allocationTags) | Constructs a target expression on an allocation tag. It is satisfied if there are allocations with one of the given tags. |
| allocationTagToIntraApp(String... allocationTags) | similar to allocationTag(String...), but targeting only the containers of the application that will use this target (intra-application constraints). |
| nodePartition(String... nodePartitions) | Constructs a target expression on a node partition. It is satisfied for nodes that belong to one of the nodePartitions. |
| nodeAttribute(String attributeKey, String... attributeValues) | Constructs a target expression on a node attribute. It is satisfied if the specified node attribute has one of the specified values. |
Note that the nodeAttribute method above is not yet functional, as it requires the ongoing node attributes feature.
The methods of the PlacementConstraints class for building constraints are the following:
| Method | Description |
|---|---|
| targetIn(String scope, TargetExpression... targetExpressions) | Creates a constraint that requires allocations to be placed on nodes that satisfy all target expressions within the given scope (e.g., node or rack). For example, targetIn(RACK, allocationTag("hbase-m")), allows allocations on nodes that belong to a rack that has at least one allocation with tag “hbase-m”. |
| targetNotIn(String scope, TargetExpression... targetExpressions) | Creates a constraint that requires allocations to be placed on nodes that belong to a scope (e.g., node or rack) that does not satisfy any of the target expressions. |
| cardinality(String scope, int minCardinality, int maxCardinality, String... allocationTags) | Creates a constraint that restricts the number of allocations within a given scope (e.g., node or rack). For example, {@code cardinality(NODE, 3, 10, “zk”)} is satisfied on nodes where there are no less than 3 allocations with tag “zk” and no more than 10. |
| minCardinality(String scope, int minCardinality, String... allocationTags) | Similar to cardinality(String, int, int, String...), but determines only the minimum cardinality (the maximum cardinality is unbound). |
| maxCardinality(String scope, int maxCardinality, String... allocationTags) | Similar to cardinality(String, int, int, String...), but determines only the maximum cardinality (the minimum cardinality is 0). |
| targetCardinality(String scope, int minCardinality, int maxCardinality, String... allocationTags) | This constraint generalizes the cardinality and target constraints. Consider a set of nodes N that belongs to the scope specified in the constraint. If the target expressions are satisfied at least minCardinality times and at most maxCardinality times in the node set N, then the constraint is satisfied. For example, targetCardinality(RACK, 2, 10, allocationTag("zk")), requires an allocation to be placed within a rack that has at least 2 and at most 10 other allocations with tag “zk”. |
The PlacementConstraints class also includes method for building compound constraints (AND/OR expressions with multiple constraints). Adding support for compound constraints is work in progress.
Applications have to specify the containers for which each constraint will be enabled. To this end, applications can provide a mapping from a set of allocation tags (source tags) to a placement constraint. For example, an entry of this mapping could be “hbase”->constraint1, which means that constraint1 will be applied when scheduling each allocation with tag “hbase”.
When using the placement-processor handler (see Enabling placement constraints), this constraint mapping is specified within the RegisterApplicationMasterRequest.
When using the scheduler handler, the constraints can also be added at each SchedulingRequest object. Each such constraint is valid for the tag of that scheduling request. In case constraints are specified both at the RegisterApplicationMasterRequest and the scheduling requests, the latter override the former.


#include <Logger.h>
Static Public Member Functions | |
| static QPID_MESSAGING_EXTERN void | configure (int argc, const char *argv[], const std::string &prefix=std::string()) |
| static QPID_MESSAGING_EXTERN std::string | usage () |
| static QPID_MESSAGING_EXTERN void | setOutput (LoggerOutput &output) |
| static QPID_MESSAGING_EXTERN void | log (Level level, const char *file, int line, const char *function, const std::string &message) |
A utility class to allow the application to control the logging output of the qpid messaging library
This class represents a singleton logging facility within the qpid messaging library so there are only static methods in the class
|
static |
Configure the logging subsystem
This function takes an array of text options (which could easily come from a programs command line) and uses them to configure the logging subsystem.
If the prefix parameter is specified then the accepted command line options are prefixed by <<prefix>>- for example if the prefix is "qpid" then the options all start "--qpid-log..."
Accepted options are: –log-enable RULE –log-disable RULE
Both –log-enable and –log-disable can be specified multiple times in a single command line. The enables are acted upon and after them the disables are acted upon.
RULE is in the form LEVEL[("+"|"-")][:PATTERN] LEVEL is one of "trace", "debug", "info", "notice", "warning", "error", "critical" "+" operates on the level and all higher levels "-" operates on the level and all lower levels PATTERN is a category name or a fragment of a fully namespace qualified function (Case sensitive).
–log-to-stdout ("on"|"off|"0"|"1") --log-to-stderr ("on"|"off|"0"|"1") –log-to-file FILENAME
These options control where the qpid logging subsystem sends log messages
–log-time ("on"|"off|"0"|"1") --log-level ("on"|"off|"0"|"1") –log-source ("on"|"off|"0"|"1") --log-thread ("on"|"off|"0"|"1") –log-function ("on"|"off|"0"|"1") --log-hires-timestamp ("on"|"off|"0"|"1")
These options control what information is included in the logging message sent by the logging subsystem.
| argc | count of options - identical to meaning for main(). |
| argv | array of pointers to options - identical to meaning for main(). |
| prefix | (optional) If present prefix all logging options with this string |
| MessagingException | if it cannot parse an option it recognises |
|
static |
Output a log message. This will get sent to all the specified logging outputs including any the application has registered. The message will get filtered along with the internal messages according to the specified logging filters.
When a log message output using log() is received by a LoggerOutput::log() method the "user" bool parameter will be set true.
|
static |
Register a custom handler for log messages
This allows application programs to intercept the log messages coming from qpid::messaging and handle them in whatever way is consonent with the applications own handling of log messages.
In order to do this create a class that inherits from qpid::messaging::LoggerOutput and override the log() member function.
|
static |
Get a user friendly usage message.
This returns a usage message that is suitable for outputting directly to a console user. The message only contains the command line options that are understood by qpid::messaging::Logger::configure().
NB. You must call qpid::messaging::Logger::configure() before calling this to populate the usage string as the usage string depends on the prefix that is passed in to qpid::messaging::Logger::configure().


WITNESS LIST Government Reform Committee April 22, 2003-8:00A HB 2390 For: Bent, Steve (TXANS) Clark, Jeffrey (National Federation of Independent Business-Texas (NFIB)) Sullivan, Thomas M. "Tom" (Chief Counsel for Advocacy, US Small Business Administration) HB 2933 For: Bledsoe, Gary L. (Texas State Conference of NAACP Branches) Hale, Bill (Bill Hale & Associates) Morrison, Marilou (Self) Yanez-Correa, Ana (Texas LULAC) Against: Knepp, Christopher (Texas Employment Law Council) On: Covington, Vickie (Texas Commission on Human Rights) Lane, Rhonda M. (Tx. Commission on Human Rights) Powell, J.D. (Dave) (Texas Commission on Human Rights) Ross, Pam (State Auditor's Ofc) Skiles, Glenn (TX Commission on Human Rights) HB 3208 For: Homer, Andrew (Texas Public Employees Association) On: Biles, Susan (Texas State Comptroller) HB 3499 On: Johnson, Edward (TX Building & Procurement Commission)


| User guide |
The following example application uses many of the layout features discussed above in order to create a good-looking user interface that scales well when resized. It is not designed to showcase all the layout functionality, but shows how callbacks are added to provide user interaction. It also exemplifies separating the data from the GUI, a fundamental part of creating modular and maintainable applications.
The full application is available here:
| Deploying GUIs using the MATLAB Compiler | [Top] | Application structure |


 Then take this quiz and see how many you get correct at the end!
Question
Question
Question
Question
10%
Submit


- Animation
- Camera
-
CameraTracking
-
MultipleCamera (for 3 sided holo box pyramid)
-
Orthographic / Perspective Camera
- Curve
-
CatmullRomCurve3
-
CubicBezierCurve3
-
EllipseCurve
-
LineCurve
-
QuadraticBezierCurve3
- Geometry
-
BoxGeometry
-
CircleGeometry (Disc)
-
ConeGeometry
-
CylinderGeometry
-
DodecahedronGeometry
-
IcosahedronGeometry
-
OctahedronGeometry
-
PlaneGeometry
-
RingGeometry
-
SphereGeometry
-
TetrahedronGeometry
-
TextGeometry
-
TorusGeometry
-
TorusKnotGeometry
-
TubeGeometry
- Html
-
Html Info Container (screen position to 3d coords AND 3d coords to screen position)
- Intersection
-
Circle-Circle Intersection
-
Line-Line Intersection
-
Raycast with plane (locomotion)
- Light
-
AmbientLight
-
HemisphereLight
- Loader
-
FBXLoader
-
GLTFLoader
-
ObjectLoader (save/load object to/from session storage)
- Material
- Particle
- Physic
-
Collision Axis-Aligned Bounding Boxes
-
Collision Bounding Spheres
-
Reflection Mirror (Ground)
-
Rapier Basics (Collision Box / Sphere / TriMesh)
-
Rapier Camera - castRay (Collision)
-
Rapier Character (Collision)
- Scene
- Shader
-
Mouse: Change Color by Mouse Position
-
Resolution: Change Color by Canvas Size
-
Time: Change Color by Timer (Clock)
-
UV: Reflection Mirror (Ground)
-
UV: Terrain (RGBA Splat Map)
-
UV: Wave Animation
- Texture
-
CanvasTexture
-
VideoTexture (Attention: includes a 10MB video)
-
WebCamTexture
- VR
-
360 degree image
-
360 degree video
-
CameraTracking
-
ControlByRoll (Change camera x position by roll)


The Independent Transportation Network® (ITN), is the first and only national nonprofit transportation system for America's aging population.
Our ITN model creates an efficient and financially sustainable solution to the transportation needs of seniors and visually challenged people. As ITN Members, older people maintain their independence and their dignity.
They:
ITN{{affiliate}} understands that older people want to do much more than go to the doctor or the grocery store. For this reason, the service may be used for any purpose, without restriction, in the ITN{{affiliate}} service area. For example, ITN{{affiliate}} members often use the service to attend religious services, to get their hair done, to shop at the mall, and to visit loved ones in hospitals and nursing homes.
Independent Transportation Network ® (ITN) volunteer drivers store transportation credits for their volunteer efforts. These credits may be used to plan for their own future transit needs or they may use these credits to help pay for rides for members of their family or for low income seniors through the Road Scholarship Program™. ITN transportation credits are honored at any ITN in the country.
The Road Scholarship Program is primarily funded by volunteers who donate transportation credits earned when they drive others. Eligibility standards are set locally, and riders who meet the standards are eligible for a scholarship to help cover some of the cost of their rides.
Volunteers donate credits to a fund for a municipality, town or other government agency or for an organization fund for their citizens or members, such as the City of Portland or AARP, local or national.
Merchants such as super markets and shopping malls help to pay for rides. The payment is electronically integrated into ITNRides™ technology so there are no stamps or stickers for consumers to collect. It is a consumer-friendly paperless system.
Health providers help to pay for rides, similar to Ride & Shop. Please contact us and we will mail you an application form.
Automobiles depreciate in value and when older people have vehicles they can no longer drive, the ITN CarTrade™ program helps them convert this depreciating capital asset into a fund to pay for their rides. In a way, CarTrade™ allows people to continue to benefit from their automobiles. Participation in CarTrade™ is a benefit of ITN membership, and there is no charge.
Adult children, family members and friends may give the gift of independence by purchasing an ITN gift certificate for the seniors they love. Buy a gift certificate here.
This walk-a-thon is an annual fundraising event for ITN affiliate communities across the country.
Anyone may become an ITN Member, to support an affiliate in your community or to support the work of ITNAmerica, the national organization. In an ITN affiliate community for people 60 years of age and older (age eligibility varies by affiliate), and for people of any age with visual impairments, membership brings with it an opportunity to use the service in any ITN affiliate community across the country, a quarterly newsletter, an annual birthday credit of $5.00, free participation in the CarTrade™ program, as well as the satisfaction of knowing you are supporting a community based and dignified transportation solution for older people in your community. Sign up today, ride tomorrow!
Community organizations such as churches, assisted living facilities, and health care providers may contract with ITN to provide transportation services for their members. Once a month, ITN sends a statement to the organization to pay for the rides that the members take. This is a way for community organizations to supplement the transportation services they already provide. Community organizations that participate in Ride Services also help to support the ITN affiliate organization.
Members of the community may donate vehicles to ITN. Car Donation and CarTrade™ are the primary ways ITN acquires vehicles for service.
The Personal Transportation Account™ is one of the core business innovations of the ITN system because it allows an ITN member to store transportation assets in various forms - either as a credit or as cash. Credits may be earned as a volunteer driver, by trading a car for rides through the CarTrade™ program, as a birthday credit, or as a referral credit. Cash may come from pre-payment, gift certificates, co-payments from participating merchants and healthcare providers, or from Ride Services accounts. ITN is a cashless system. Seniors who ride receive a statement once a month detailing the rides they have taken. Volunteer drivers also have personal transportation accounts to store their credits and receive statements detailing their accumulated balances.
This is an annual outreach event to the families of those who need or use ITN service. ITN asks the adult children or families of those who use the service to support the program by becoming members.
ITN affiliate communities may use up to 50 percent public funds in the first 7 years of service. Because ITN does not want to compete with public transportation for scarce tax payer dollars, we seek to supplement public transportation by working directly with seniors, their families, and their communities to access private resources.
ITNAmerica's affiliates provide rides with door-through-door, arm-through-arm service to thousands of seniors nationwide. It's a truly innovative solution with unique programs that allow older people to trade their own cars to pay for rides, and enable volunteer drivers to store transportation credits for their own future transportation needs.
ITNAmerica provides support to affiliates, including looking for new affiliate locations. With our uniquely built ITNRides software and our skilled members of staff here at ITNAmerica headquarters we provide support to get an affiliate up and running then support them for continued success.
ITNAmerica works with organizations and individuals to help develop dignified and sustainable transportation in communities across the country. We welcome interest from all organizations, nonprofits or private individuals.
ITNCountry is based on the ITN model, where transportation is provided by private automobiles 24 hours a day, for any purpose, through a combination of paid and volunteer drivers. Riders become members by opening Personal Transportation Accounts, which hold ride credits that can be earned in several ways—by driving, by trading in cars or by purchasing. Our innovative programs allow volunteer drivers to earn credits for their own future transportation needs, or people can trade cars they no longer drive to pay for rides. ITN is full of creative ways to increase the resources available to pay for transportation, and all of them are included in ITNCountry.


RPI Cast
{{p.name}}
{{current.isRoot ? "root" : current.name}}
..
{{f.name}}
Close Playlist
This sidenav is locked open on your device. To go back to the default behavior, narrow your display.
Seek
Volume
Play
Pause


--- layout: post status: publish published: true title: MLB Extra Innings and Fukudome Saved My Evening author: display_name: Corey Fineran login: Corey email<EMAIL_ADDRESS>url: '' author_login: Corey author_email<EMAIL_ADDRESS>wordpress_id: 521 wordpress_url: http://ivyenvy.com/?p=521 date: '2009-04-08 22:24:21 +0000' date_gmt: '2009-04-09 04:24:21 +0000' categories: - Offense tags: - Aramis Ramirez - Mike Fontenot - Kosuke Fukodome - MLB Extra Innings comments: - id: 173 author: jimmy author_email<EMAIL_ADDRESS>author_url: '' date: '2009-04-09 06:45:41 +0000' date_gmt: '2009-04-09 12:45:41 +0000' content: I was able to watch most of it on the Comcast Sports Network before I had to go to dinner. The offense was great, but I really don't want to see a season of 11-6 games. Too stressful. - id: 174 author: Corey author_email<EMAIL_ADDRESS>author_url: http:// date: '2009-04-09 07:16:44 +0000' date_gmt: '2009-04-09 13:16:44 +0000' content: "Well, maybe people were able to see if after all. \r\nWhat do you have that allows you to get Chicago Comcast out there in California?" - id: 176 author: Kurt author_email<EMAIL_ADDRESS>author_url: http:// date: '2009-04-09 07:28:58 +0000' date_gmt: '2009-04-09 13:28:58 +0000' content: BTW, thanks for the invite. I didn't get the message until late. I was able to watch it on DISH network. I think the Hawks were on the regular CSN, but they air an HD alternate channel that showed it. ---
Thank you MLB Extra Innings. Why in the world is the third game of the season unavailable to everyone? So I sat outside all evening in the chilly April air to watch my Cubs. I ended up with a small gathering of die-hards that couldn't go an evening without their Boys in Blue.
This is exactly the game I have been waiting for from Fukudome. I don't know if he'll pan out, but like I said in the third episode of the Ivy Envy Podcast, I want him to succeed. I like him. 4-5 with a HR, Double, Stolen Base and 4 Runs scored. That's probably the best game I've seen from him. I know that as Cubs fans we've become fickle, demanding perfect and winning baseball, but I'm trying to put that behind me. I want to pull for our guys, whether they play well or not. As long as Fukudome wears that "C" on his hat, I am pulling for the dude. From what I saw of him tonight, he looked in control both at the plate and in the field.
I don't want to rub it in to everyone that was unable to see the game, but that offensive explosion tonight, particularly in the first few innings was thoroughly enjoyable. I can't look past the 4 RBI apiece from Fontenot and Ramirez, but I think the night belonged to Fukudome.


A look inside Intare Arena in Kigali
by IVAN R MUGISHAIn Summary
- The facility was built to spur Rwanda's meetings, incentives, conferencing, exhibitions (MICE) segment.
The Kusi Ideas Festival is being hosted in the outskirts of Kigali at the Intare Conference Arena, one of the country’s modern conference facilities.
The facility was built to spur Rwanda's meetings, incentives, conferencing, exhibitions (MICE) segment and is located in Rusororo, a growing suburb on a hill envisages the pace of the country's rapid economic growth.
Not so long ago, the suburb was mostly a semi-urban area but is now brewing with construction activity, as Rwanda moves to expand growth beyond the capital.
The arena was inaugurated in June 2017 and is wholly owned by the country's ruling party - RPF - said to be built solely from party members' contributions.
The Intare Conference Arena is capable of hosting meetings and events of various sizes in equal comfort, and has held several in the past, with its main competitor now being the Kigali Convention Centre.
The conference arena is built with a futuristic design including a curved dome steel that enhances retention of sound inside.
The main auditorium boasts a capacity of up to 2,500 people seated and 3,600 standing, with enhanced PA systems and high speed 4G wireless internet.


The Idea
Day one requires you to be attentive, responsive and creative to optimise our introduction to the fundamentals.
Leverage this to create an original robot in 24 hours. Your battlefield is the mechanical workshop.
The team with the best idea and robot shall revel in glory.
Let's Rendezvous
IEEE Student Branch, College of Engineering Chengannur.
From January 8th to January 11th 2015.
A laptop, competitive comrades and a good supply of zeal.
An introduction to what robotics is, what its relevance is and the latest in this field will be covered extensively in these sessions handled by Dr Prahlad Vadakkeppatt, and other dignitaries.
Familiarization of various aspects of robotics, and the chance to create from scratch (or as close to it), a functional robot of your own design. All materials and components required will be supplied, and participants will be given access to the Mechanical Workshop.
By the end of 24 hours, those teams with a completed robot shall advance to the next round to present their product in front of a panel for 10 minutes. The best designers shall be crowned the winners.
Uber Hackers: Rs 30,000
Runners Up: Rs 10,000
After the workshop and the competition, an All India RAS Meeting shall follow suit. This maiden event attempts to bring together the active members from across the country to collaborate and network.
We made dreams come true! That's right. Getting a beginner to think he can build and manueuvre a robot is such a task! But to sit him down and make him build one anyway in 24 hours was cakewalk! Robothon held from 8 - 11 January 2015 at CEC - a robotic hackathon for the aspiring neophytes did justice to the 37 roboticists who crafted 9 working robots from scratch.
Our experts - a dynamic duo also the CEO and CTO of Sous Chef, a kitchen automation company based in Singapore - Aswin Shibu Abraham and Tushar Mohan gave these amateurs a maze and 24 hours of their expertise and voila! You might have to rethink calling our cohort of 37, "amateur" again.
The quickest team of five to solve the maze with their bot took home a whopping 30,000 INR. The runners up took a not-so-bad 10,000 INR.
A sneak peak at Robothon.
Day |
Date |
Program |
|---|---|---|
| Day 1 | January 8 | Inauguration, Keynote and Workshop |
| Day 2 | January 9 | Robo-Hack |
| Day 3 | January 10 | Robo-Hack(contd.) and Expo |
| Day 4 | January 11 | All India RAS Volunteer Meet |
Registrations are closed!
Dignitaries to meet at Robothon.
He is a prominent robotics researcher and founder and General Secretary of FIRA.
He is a Product Design Engineer at the Singapore University of Technology and Design (SUTD). He has more than 5 years of experience in developing products and research. Mr Mohan has been serving as an advisor to the RAS chapter of College of Engineering, Chengannur since September 2014.
He is is an alumnus of College of Engineering, Chengannur. He was one of the founding members of its IEEE RAS chapter, and served as its Chairman during the academic year of 2012-2013.
Send in any queries you may have.


--- layout: archive title: Zulip Chat Archive permalink: /stream/113488-general/topic/sanity.20check.html ---
I'm working a bit on the #sanity_check cleanup of topology. @Floris van Doorn Is there a reason why the command is not imported by default? Each file needs to add an import and then remember to remove it. It would also help tremendously if the command could print the type of the unused argument instead of only the number. But it's already very nice! What is weird is that removing useless type classes can have unexpected consequences on elaboration later one. I already had to add a couple of apply_instance
.
Maybe we could have a hole command dumping the output of #sanity_check into the Lean file, that would save a copy-paste
Another potential improvement: when the command find an unused argument, check whether it's duplicated and report it.
Thanks for actually cleaning up the library!
I indeed forgot to add an import to tactic.basic
. I will do that. The other improvements also seem doable.
It would be very nice to enter a self-sustaining cycle of cleanup/sanity_check improvements
One disadvantage with a hole command is that you cannot write a hole when a command is expected, but only where an expression is expected. So you have to write something like run_cmd {!!}
or example : {!!}
. And then after the hole command replaces itself, you still have a broken run_cmd
or example
...
Added all feature requests (except the self-sustaining cycle of cleanup/sanity_check improvements) in #1369.
The unused argument command will now return something like
-- tactic\core.lean #print tactic.symmetry_hyp /- argument 2: (md : opt_param transparency transparency.semireducible) -/ -- meta\rb_map.lean #print native.rb_map.find_def /- argument 4: [_inst_2 : decidable_rel has_lt.lt] -/ -- logic\basic.lean #print imp_intro /- argument 4: (h₂ : β) -/ #print not_iff /- argument 3: [_inst_1 : decidable a] -/ #print ball_of_forall /- argument 6: (_x : q x) -/ -- data\list\defs.lean #print list.func.neg /- argument 2: [_inst_1 : inhabited α] -/ -- category\basic.lean #print map_seq /- argument 6: [_inst_2 : is_lawful_applicative F] (duplicate) -/ #print seq_map_assoc /- argument 6: [_inst_2 : is_lawful_applicative F] (duplicate) -/
I also added a new check: whether a namespace occurs twice in the name:
-- tactic\core.lean #print tactic.tactic.has_to_tactic_format /- The namespace tactic is duplicated in the name -/ #print tactic.tactic.use /- The namespace tactic is duplicated in the name -/
Fun fact: for this improvement I had to remove an unused argument from the instance list.decidable_chain'
:grinning_face_with_smiling_eyes:
Amazing! I promise I'll the topology fix as soon as this gets merged.
I'm getting deterministic timeouts if I run #sanity_check
at the bottom of https://github.com/leanprover-community/lean-perfectoid-spaces/blob/master/src/adic_space.lean
That's not good. I'll take a look.
Which of the following get a timeout?
run_cmd print_decls_current_file prettify_unused_arguments >>= trace run_cmd print_decls_current_file incorrect_def_lemma >>= trace run_cmd print_decls_current_file dup_namespace >>= trace
@Floris van Doorn
type mismatch at application print_decls_current_file prettify_unused_arguments >>= trace term trace has type string → thunk ?m_1 → ?m_1 : Type ? but is expected to have type format → tactic ?m_1 : Type
oh yes, it should be tactic.trace
.
1sec
I'm also building the project myself rn.
None of them time out
Ok, then for the moment you can use those, they give the same information. I'll make #sanity_check
more efficient (currently I'm running through the whole environment 3 times)
They don't print anything at all... which might mean our code is sane...
Yes, I just ran them myself, and that file in sane :)
Can you reproduce the timeout?
yes
I managed to speed up #sanity_check
by about 2 orders of magnitude. (it now takes 100-200ms in adic_space
)
One of the slowdowns was surprising me: if you run if p ∧ q then ... else ...
and p
is false, then q
will also be checked. You have to use &&
instead:
open tactic set_option profiler true -- very fast run_cmd do e ← get_env, e.mfold [] $ λ d ds, return $ if ff && d.is_auto_generated e then d::ds else ds -- very slow (assuming you are importing enough files) run_cmd do e ← get_env, e.mfold [] $ λ d ds, return $ if ff ∧ d.is_auto_generated e then d::ds else ds
I wonder why. Is and_decidable
doing something dumb?
I checked, and it looks fine.
Yeah, I couldn't understand either.
Are we talking about the kernel or the VM here?
Looks like the VM, I guess, since it's inside a run_cmd
.
I admit I have no idea what the VM does when it sees if
or ∧
.
It's actually surprising that either one is short circuiting. It's probably because of inlining
The standard semantics of lean would require that both sides of the and be evaluated before the function is called (i.e. eager evaluation)
One way to force delayed evaluation is to use a thunk
Yeah, in the proof of and_decidable
it probably evaluates the then
clause before it evaluates the if-then-else
. We should indeed rewrite it using a thunk.
Why is this super fast in that case?
def ack : nat → nat → nat | 0 y := y+1 | (x+1) 0 := ack x 1 | (x+1) (y+1) := ack x (ack (x+1) y) def X : ℕ := if false then ack 100 100 else 0 #eval X
if
uses thunks
So why is the and.decidable
instance slow?
it uses thunks on the then and else branches, not on the condition (which must be evaluated first)
So that means it shouldn't be slow right?
The difference is that band
is @[inline]
and and.decidable
isn't
I recommend looking at the generated bytecode
def foo := ff set_option trace.compiler.optimize_bytecode true #eval if false && foo then 1 else 0 -- [compiler.optimize_bytecode] _main 0 -- 0: scnstr #1 -- 1: ginvoke decidable.false -- 2: scnstr #0 -- 3: ginvoke decidable.to_bool -- 4: cases2 7 -- 5: scnstr #0 -- 6: goto 12 -- 7: ginvoke foo -- 8: cases2 11 -- 9: scnstr #0 -- 10: goto 12 -- 11: scnstr #1 -- 12: ginvoke bool.decidable_eq._main -- 13: cases2 16 -- 14: scnstr #0 -- 15: goto 17 -- 16: scnstr #1 -- 17: cfun nat.repr -- 18: ret #eval if false ∧ foo then 1 else 0 -- [compiler.optimize_bytecode] _main 0 -- 0: scnstr #1 -- 1: ginvoke foo -- 2: ginvoke bool.decidable_eq._main -- 3: ginvoke decidable.false -- 4: scnstr #0 -- 5: scnstr #0 -- 6: ginvoke and.decidable -- 7: cases2 10 -- 8: scnstr #0 -- 9: goto 11 -- 10: scnstr #1 -- 11: cfun nat.repr -- 12: ret
Notice in the second one that there is an explicit call to and.decidable
at line 6, which needs foo
to be called first (line 1). In the second one there is no call to band
at all; instead it's all been inlined to an if-then (the cases2
at line 4) and the call to foo
only happens in the second branch (line 7)
If you use ff
instead of false
in these examples, the call to foo
disappears entirely, because lean optimizes ff && foo
to ff
directly after unfolding the definition of &&
If you use attribute [inline] decidable.false and.decidable
then you get the expected code
arguably that should have been set
We can provide a higher priority instance that inclines, can't we?
I think we can just add the line attribute [inline] and.decidable or.decidable decidable.false
to some file that everything imports. Shall I add it to logic/basic
? Are there other declarations that need the [inline]
attribute?
logic.basic
looks like a good place for it. The initial part contains a few other "omissions" from the core logic library
Inline annotations are a bit of a black art. Probably implies.decidable is also good, definitely not.decidable, not so sure about iff and xor but I'm leaning toward inlining them
also decidable.true
of course
Added them to #1393.
Do you think decidable.to_bool
should be added?
It should be the identity function, although I'm not sure if lean knows to render it as such
I don't think so. I think it will then run both decidable.to_bool
and bool.decidable_eq
.
I have started using sanity_check to clean up some files, and I found it super-useful. Just for the record, two small additions that I would find worthy:
sanity_check_skip
for statements that should be skipped by sanity_check
. For instance, theorem imp_intro {α β} (h : α) (h₂ : β) : α := h
in logic/basic.lean
has an unused argument by design. Or in fiber bundles the function topological_fiber_bundle.fiber
has a lot of unused arguments, but this is to get a new name for a type, in order for typeclass inference to work correctly. If we don't add such an attribute, they will show up forever in the output of sanity_check
.>
or >=
in the assumptions or conclusions of theorems? Rewrites would be really easier if <
and <=
were used consistently all over mathlib, and I think this is a move we will have to do some day.sanity_check
, but it's actually a good idea to whitelist declarations that we know are fine.>
/>=
(i.e. ge
/gt
) are used in lemma statements. Are there other declarations we want to always avoid in lemma statements?So is the attribute suppressing output of #sanity_check
going to be @[sane]
or @[insane]
? :-)
By analogy to Rust's unsafe
block, which brackets code that is safe but for which the programmer, not the compiler, ensures safety, it seems that insane
is the correct polarity
@Scott Morrison Thanks for the updated list at https://gist.github.com/semorrison/16d80d2cd154f6473af57b0c9e6912bb
I see quite a lot of unused decidable_eq
s listed there (-; :tada: These reports are really useful.
I hope to find time to kill some of them
I added @Sebastien Gouezel's suggestions to #sanity_check
in #1487, and made some other improvements. I went for the attribute name [sanity_skip]
.
Last updated: Apr 24 2020 at 19:02 UTC


Canceled: Due to the recipient of this app stepping down from his position in SkillsUSA. This app was canceled.
This app digitizes the registration process of a SkillsUSA meeting. Using a QRCode scanner, this app takes the data from the scanner and converts it into easy to read tables.
The data is stored on the phone as needed, and is displayed in the app. The data is able to be emailed in an easy to understand Excel editable format.
The app has three main screens that the user interacts with. Each screen contains a different category of people.
Registrants: Stores the entire meeting's attendance.
Officers: Keeps track of the elected officers.
Committees: Every student is assigned to a committee in the meeting, storing that on this screen.
Ready to send the email? A simple click of a button sends you to the email dialogue with all of the information on the certain screen as an attachment.


“It’s fine to celebrate success but it is more important to heed the lessons of failure.”
"You can't have everything you want, but you can have the things that really matter to you."


Test that interrupting a smooth scroll on the main frame works with both scroll behaviors and with input


module DRb
Overview¶ ↑
dRuby is a distributed object system for Ruby. It is written in pure Ruby and uses its own protocol. No add-in services are needed beyond those provided by the Ruby runtime, such as TCP sockets. It does not rely on or interoperate with other distributed object systems such as CORBA, RMI, or .NET.
dRuby allows methods to be called in one Ruby process upon a Ruby object located in another Ruby process, even on another machine. References to objects can be passed between processes. Method arguments and return values are dumped and loaded in marshalled format. All of this is done transparently to both the caller of the remote method and the object that it is called upon.
An object in a remote process is locally represented by a DRb::DRbObject instance. This acts as a sort of proxy for the remote object. Methods called upon this DRbObject instance are forwarded to its remote object. This is arranged dynamically at run time. There are no statically declared interfaces for remote objects, such as CORBA's IDL.
dRuby calls made into a process are handled by a DRb::DRbServer instance within that process. This reconstitutes the method call, invokes it upon the specified local object, and returns the value to the remote caller. Any object can receive calls over dRuby. There is no need to implement a special interface, or mixin special functionality. Nor, in the general case, does an object need to explicitly register itself with a DRbServer in order to receive dRuby calls.
One process wishing to make dRuby calls upon another process must somehow obtain an initial reference to an object in the remote process by some means other than as the return value of a remote method call, as there is initially no remote object reference it can invoke a method upon. This is done by attaching to the server by URI. Each DRbServer binds itself to a URI such as 'druby://example.com:8787'. A DRbServer can have an object attached to it that acts as the server's front object. A DRbObject can be explicitly created from the server's URI. This DRbObject's remote object will be the server's front object. This front object can then return references to other Ruby objects in the DRbServer's process.
Method calls made over dRuby behave largely the same as normal Ruby method calls made within a process. Method calls with blocks are supported, as are raising exceptions. In addition to a method's standard errors, a dRuby call may also raise one of the dRuby-specific errors, all of which are subclasses of DRb::DRbError.
Any type of object can be passed as an argument to a dRuby call or returned as its return value. By default, such objects are dumped or marshalled at the local end, then loaded or unmarshalled at the remote end. The remote end therefore receives a copy of the local object, not a distributed reference to it; methods invoked upon this copy are executed entirely in the remote process, not passed on to the local original. This has semantics similar to pass-by-value.
However, if an object cannot be marshalled, a dRuby reference to it is passed or returned instead. This will turn up at the remote end as a DRbObject instance. All methods invoked upon this remote proxy are forwarded to the local object, as described in the discussion of DRbObjects. This has semantics similar to the normal Ruby pass-by-reference.
The easiest way to signal that we want an otherwise marshallable object to be passed or returned as a DRbObject reference, rather than marshalled and sent as a copy, is to include the DRb::DRbUndumped mixin module.
dRuby supports calling remote methods with blocks. As blocks (or rather the Proc objects that represent them) are not marshallable, the block executes in the local, not the remote, context. Each value yielded to the block is passed from the remote object to the local block, then the value returned by each block invocation is passed back to the remote execution context to be collected, before the collected values are finally returned to the local context as the return value of the method invocation.
Examples of usage¶ ↑
For more dRuby samples, see the samples
directory in the full
dRuby distribution.
dRuby in client/server mode¶ ↑
This illustrates setting up a simple client-server drb system. Run the server and client code in different terminals, starting the server code first.
Server code¶ ↑
require 'drb/drb' # The URI for the server to connect to URI="druby://localhost:8787" class TimeServer def get_current_time return Time.now end end # The object that handles requests on the server FRONT_OBJECT=TimeServer.new $SAFE = 1 # disable eval() and friends DRb.start_service(URI, FRONT_OBJECT) # Wait for the drb server thread to finish before exiting. DRb.thread.join
Client code¶ ↑
require 'drb/drb' # The URI to connect to SERVER_URI="druby://localhost:8787" # Start a local DRbServer to handle callbacks. # # Not necessary for this small example, but will be required # as soon as we pass a non-marshallable object as an argument # to a dRuby call. # # Note: this must be called at least once per process to take any effect. # This is particularly important if your application forks. DRb.start_service timeserver = DRbObject.new_with_uri(SERVER_URI) puts timeserver.get_current_time
Remote objects under dRuby¶ ↑
This example illustrates returning a reference to an object from a dRuby call. The Logger instances live in the server process. References to them are returned to the client process, where methods can be invoked upon them. These methods are executed in the server process.
Server code¶ ↑
require 'drb/drb' URI="druby://localhost:8787" class Logger # Make dRuby send Logger instances as dRuby references, # not copies. include DRb::DRbUndumped def initialize(n, fname) @name = n @filename = fname end def log(message) File.open(@filename, "a") do |f| f.puts("#{Time.now}: #{@name}: #{message}") end end end # We have a central object for creating and retrieving loggers. # This retains a local reference to all loggers created. This # is so an existing logger can be looked up by name, but also # to prevent loggers from being garbage collected. A dRuby # reference to an object is not sufficient to prevent it being # garbage collected! class LoggerFactory def initialize(bdir) @basedir = bdir @loggers = {} end def get_logger(name) if<EMAIL_ADDRESS>name # make the filename safe, then declare it to be so fname = name.gsub(/[.\/\\:]/, "_").untaint @loggers[name] = Logger.new(name, @basedir + "/" + fname) end return @loggers[name] end end FRONT_OBJECT=LoggerFactory.new("/tmp/dlog") $SAFE = 1 # disable eval() and friends DRb.start_service(URI, FRONT_OBJECT) DRb.thread.join
Client code¶ ↑
require 'drb/drb' SERVER_URI="druby://localhost:8787" DRb.start_service log_service=DRbObject.new_with_uri(SERVER_URI) ["loga", "logb", "logc"].each do |logname| logger=log_service.get_logger(logname) logger.log("Hello, world!") logger.log("Goodbye, world!") logger.log("=== EOT ===") end
Security¶ ↑
As with all network services, security needs to be considered when using dRuby. By allowing external access to a Ruby object, you are not only allowing outside clients to call the methods you have defined for that object, but by default to execute arbitrary Ruby code on your server. Consider the following:
# !!! UNSAFE CODE !!! ro = DRbObject::new_with_uri("druby://your.server.com:8989") class << ro undef :instance_eval # force call to be passed to remote object end ro.instance_eval("`rm -rf *`")
The dangers posed by instance_eval and friends are such that a DRbServer should generally be run with $SAFE set to at least level 1. This will disable eval() and related calls on strings passed across the wire. The sample usage code given above follows this practice.
A DRbServer can be configured with an access control list to selectively allow or deny access from specified IP addresses. The main druby distribution provides the ACL class for this purpose. In general, this mechanism should only be used alongside, rather than as a replacement for, a good firewall.
dRuby internals¶ ↑
dRuby is implemented using three main components: a remote method call marshaller/unmarshaller; a transport protocol; and an ID-to-object mapper. The latter two can be directly, and the first indirectly, replaced, in order to provide different behaviour and capabilities.
Marshalling and unmarshalling of remote method calls is performed by a DRb::DRbMessage instance. This uses the Marshal module to dump the method call before sending it over the transport layer, then reconstitute it at the other end. There is normally no need to replace this component, and no direct way is provided to do so. However, it is possible to implement an alternative marshalling scheme as part of an implementation of the transport layer.
The transport layer is responsible for opening client and server network connections and forwarding dRuby request across them. Normally, it uses DRb::DRbMessage internally to manage marshalling and unmarshalling. The transport layer is managed by DRb::DRbProtocol. Multiple protocols can be installed in DRbProtocol at the one time; selection between them is determined by the scheme of a dRuby URI. The default transport protocol is selected by the scheme 'druby:', and implemented by DRb::DRbTCPSocket. This uses plain TCP/IP sockets for communication. An alternative protocol, using UNIX domain sockets, is implemented by DRb::DRbUNIXSocket in the file drb/unix.rb, and selected by the scheme 'drbunix:'. A sample implementation over HTTP can be found in the samples accompanying the main dRuby distribution.
The ID-to-object mapping component maps dRuby object ids to the objects they refer to, and vice versa. The implementation to use can be specified as part of a DRb::DRbServer's configuration. The default implementation is provided by DRb::DRbIdConv. It uses an object's ObjectSpace id as its dRuby id. This means that the dRuby reference to that object only remains meaningful for the lifetime of the object's process and the lifetime of the object within that process. A modified implementation is provided by DRb::TimerIdConv in the file drb/timeridconv.rb. This implementation retains a local reference to all objects exported over dRuby for a configurable period of time (defaulting to ten minutes), to prevent them being garbage-collected within this time. Another sample implementation is provided in sample/name.rb in the main dRuby distribution. This allows objects to specify their own id or “name”. A dRuby reference can be made persistent across processes by having each process register an object using the same dRuby name.
Attributes
The primary local dRuby server.
This is the server created by the start_service call.
The primary local dRuby server.
This is the server created by the start_service call.
Public Class Methods
Get the configuration of the current server.
If there is no current server, this returns the default configuration. See current_server and DRbServer::make_config.
# File lib/drb/drb.rb, line 1765 def config current_server.config rescue DRbServer.make_config end
Get the 'current' server.
In the context of execution taking place within the main thread of a dRuby server (typically, as a result of a remote call on the server or one of its objects), the current server is that server. Otherwise, the current server is the primary server.
If the above rule fails to find a server, a DRbServerNotFound error is raised.
# File lib/drb/drb.rb, line 1722 def current_server drb = Thread.current['DRb'] server = (drb && drb['server']) ? drb['server'] : @primary_server raise DRbServerNotFound unless server return server end
Retrieves the server with the given uri
.
See also #regist_server and remove_server.
# File lib/drb/drb.rb, line 1862 def fetch_server(uri) @server[uri] end
Get the front object of the current server.
This raises a DRbServerNotFound error if there is no current server. See current_server.
# File lib/drb/drb.rb, line 1776 def front current_server.front end
Is uri
the URI for the current local
server?
# File lib/drb/drb.rb, line 1755 def here?(uri) current_server.here?(uri) rescue false # (current_server.uri rescue nil) == uri end
See DRb::DRbServer.default_acl.
# File lib/drb/drb.rb, line 1821 def install_acl(acl) DRbServer.default_acl(acl) end
Set the default id conversion object.
This is expected to be an instance such as DRb::DRbIdConv that responds to to_id and to_obj that can convert objects to and from DRb references.
See DRbServer#default_id_conv.
# File lib/drb/drb.rb, line 1813 def install_id_conv(idconv) DRbServer.default_id_conv(idconv) end
Registers server
with DRb.
This is called when a new DRb::DRbServer is created.
If there is no primary server then server
becomes the primary
server.
Example:
require 'drb' s = DRb::DRbServer.new # automatically calls regist_server DRb.fetch_server s.uri #=> #<DRb::DRbServer:0x...>
# File lib/drb/drb.rb, line 1845 def regist_server(server) @server[server.uri] = server mutex.synchronize do @primary_server = server unless @primary_server end end
Removes server
from the list of registered servers.
# File lib/drb/drb.rb, line 1854 def remove_server(server) @server.delete(server.uri) end
Start a dRuby server locally.
The new dRuby server will become the primary server, even if another server is currently the primary server.
uri
is the URI for the server to bind
to. If nil, the server will bind to random port on the default local host
name and use the default dRuby protocol.
front
is the server's front object. This may be nil.
config
is the configuration for the new server. This may be
nil.
See DRb::DRbServer.new.
# File lib/drb/drb.rb, line 1701 def start_service(uri=nil, front=nil, config=nil) @primary_server = DRbServer.new(uri, front, config) end
Stop the local dRuby server.
This operates on the primary server. If there is no primary server currently running, it is a noop.
# File lib/drb/drb.rb, line 1734 def stop_service @primary_server.stop_service if @primary_server @primary_server = nil end
Get the thread of the primary server.
This returns nil if there is no primary server. See primary_server.
# File lib/drb/drb.rb, line 1802 def thread @primary_server ? @primary_server.thread : nil end
Get a reference id for an object using the current server.
This raises a DRbServerNotFound error if there is no current server. See current_server.
# File lib/drb/drb.rb, line 1793 def to_id(obj) current_server.to_id(obj) end
Convert a reference into an object using the current server.
This raises a DRbServerNotFound error if there is no current server. See current_server.
# File lib/drb/drb.rb, line 1785 def to_obj(ref) current_server.to_obj(ref) end
Get the URI defining the local dRuby space.
This is the URI of the current server. See current_server.
# File lib/drb/drb.rb, line 1743 def uri drb = Thread.current['DRb'] client = (drb && drb['client']) if client uri = client.uri return uri if uri end current_server.uri end
Private Instance Methods
Get the configuration of the current server.
If there is no current server, this returns the default configuration. See current_server and DRbServer::make_config.
# File lib/drb/drb.rb, line 1765 def config current_server.config rescue DRbServer.make_config end
Get the 'current' server.
In the context of execution taking place within the main thread of a dRuby server (typically, as a result of a remote call on the server or one of its objects), the current server is that server. Otherwise, the current server is the primary server.
If the above rule fails to find a server, a DRbServerNotFound error is raised.
# File lib/drb/drb.rb, line 1722 def current_server drb = Thread.current['DRb'] server = (drb && drb['server']) ? drb['server'] : @primary_server raise DRbServerNotFound unless server return server end
Retrieves the server with the given uri
.
See also #regist_server and remove_server.
# File lib/drb/drb.rb, line 1862 def fetch_server(uri) @server[uri] end
Get the front object of the current server.
This raises a DRbServerNotFound error if there is no current server. See current_server.
# File lib/drb/drb.rb, line 1776 def front current_server.front end
Is uri
the URI for the current local
server?
# File lib/drb/drb.rb, line 1755 def here?(uri) current_server.here?(uri) rescue false # (current_server.uri rescue nil) == uri end
See DRb::DRbServer.default_acl.
# File lib/drb/drb.rb, line 1821 def install_acl(acl) DRbServer.default_acl(acl) end
Set the default id conversion object.
This is expected to be an instance such as DRb::DRbIdConv that responds to to_id and to_obj that can convert objects to and from DRb references.
See DRbServer#default_id_conv.
# File lib/drb/drb.rb, line 1813 def install_id_conv(idconv) DRbServer.default_id_conv(idconv) end
Registers server
with DRb.
This is called when a new DRb::DRbServer is created.
If there is no primary server then server
becomes the primary
server.
Example:
require 'drb' s = DRb::DRbServer.new # automatically calls regist_server DRb.fetch_server s.uri #=> #<DRb::DRbServer:0x...>
# File lib/drb/drb.rb, line 1845 def regist_server(server) @server[server.uri] = server mutex.synchronize do @primary_server = server unless @primary_server end end
Removes server
from the list of registered servers.
# File lib/drb/drb.rb, line 1854 def remove_server(server) @server.delete(server.uri) end
Start a dRuby server locally.
The new dRuby server will become the primary server, even if another server is currently the primary server.
uri
is the URI for the server to bind
to. If nil, the server will bind to random port on the default local host
name and use the default dRuby protocol.
front
is the server's front object. This may be nil.
config
is the configuration for the new server. This may be
nil.
See DRb::DRbServer.new.
# File lib/drb/drb.rb, line 1701 def start_service(uri=nil, front=nil, config=nil) @primary_server = DRbServer.new(uri, front, config) end
Stop the local dRuby server.
This operates on the primary server. If there is no primary server currently running, it is a noop.
# File lib/drb/drb.rb, line 1734 def stop_service @primary_server.stop_service if @primary_server @primary_server = nil end
Get the thread of the primary server.
This returns nil if there is no primary server. See primary_server.
# File lib/drb/drb.rb, line 1802 def thread @primary_server ? @primary_server.thread : nil end
Get a reference id for an object using the current server.
This raises a DRbServerNotFound error if there is no current server. See current_server.
# File lib/drb/drb.rb, line 1793 def to_id(obj) current_server.to_id(obj) end
Convert a reference into an object using the current server.
This raises a DRbServerNotFound error if there is no current server. See current_server.
# File lib/drb/drb.rb, line 1785 def to_obj(ref) current_server.to_obj(ref) end
Get the URI defining the local dRuby space.
This is the URI of the current server. See current_server.
# File lib/drb/drb.rb, line 1743 def uri drb = Thread.current['DRb'] client = (drb && drb['client']) if client uri = client.uri return uri if uri end current_server.uri end


Find our travel blog here, with testimonials of our clients and pieces of advice for your future holidays!
Venture capital food-truck minimum viable product ideate pitch deck experiental cortado affordances parallax. Qualitative ship user story grok Space Team waterfall is so 2000 end late quantitative us.
User story Steve Jobs Stev Jobs iterate human-centered design iterate pair programing 360 campaign. Thought leader cortado viral viral earned media long shadow actionable insight. Venture capital food-truck minimum viable product ideate pitch deck experiental cortado affordances parallax. Qualitative ship user story grok Space Team waterfall is so 2000 end late quantitative us.
User story Steve Jobs Stev Jobs iterate human-centered design iterate pair programing 360 campaign. Thought leader cortado viral viral earned media long shadow actionable insight. Venture capital food-truck minimum viable product ideate pitch deck experiental cortado affordances parallax. Qualitative ship user story grok Space Team waterfall is so 2000 end late quantitative us.


STEP COACHING CLASS
MATHS YOUTUBE VIDEOS
Mean of UnGrouped Data
Mean of a Frequency Table
Mean of Grouped Data
Median of Ungrouped Data
Median of Frequency Table
Median of Grouped Data
Mode of Ungrouped Data
Mode of Frequency Table
Mode of Grouped Data
Range of UnGrouped Data
Range of Frequency Table


---
layout: default
title: Everybody Votes Channel Poll Results
---
Argentina
Australia
Austria
Belgium
Brazil
Canada
Chile
Colombia
Costa Rica
Denmark
Ecuador
Finland
France
Guatemala
Italy
Luxembourg
Mexico
Netherlands
New Zealand
Norway
Panama
Peru
Portugal
Spain
Sweden
Switzerland
United Kingdom
United States
Venezuela


See which of your customers is calling you and have their record open in Acuitas/Focus before call is answered. This will make your receptionist’s life easier and more productive. Caller ID is a standalone add – in to Acuitas that connects your computer system to your telephone line and uses the Caller ID data supplied by your telephone operator to identify the caller as one of your patients.
When the telephone rings, a dialog box appears on a designated workstation. This dialog box shows the telephone number, name and date of birth of the patient (if known from the database of course) and the date of their next appointment. The availability of this information in a condensed format will already save you time.
It also shows the history of calls for that patient, and because it does it in a separate window, Caller ID does not disrupt what you were doing in Acuitas. To avail of Caller ID, all the practice needs is a telephone line. In some areas, you may have to ask your telephone company to enable Caller ID display for you.
If your practice is equipped with a telephone system (sometimes called a PABX) with multiple telephone lines, extensions etc, you can specify on installation which extension(s) will be activating Caller ID, and on which workstation. This way, you can make sure that an incoming call on the Reception desk will not distract an optom in the middle of a refraction.
|


Prettier 2.0 “2020” · Prettier Better defaults, a better CLI and better heuristics. Oh, and TypeScript 3.8.
Researchers Say Microsoft Edge's Telemetry Has the Worst Privacy of Any Major Browser - WinBuzzer A research paper suggests the data Microsoft Edge sends to its back-end servers has a persistent hardware-based identifier which could be used to find a user's identity.
Governor Cuomo Announces Four Sites Identified by Army Corps of Engineers on Initial List of Temporary Hospitals Governor Cuomo announced the recommendation of the Army Corps of Engineers regarding four initial sites in New York State for locating temporary hospitals.
Brother: Products, Services & Solutions from Home Office to Corporate Whether you need a major, scalable solution for your multinational corporation, a printer for your home office, or a sewing machine for your new hobby, Brother has what you need. Choose between business or home office solutions and get the quality product...
Shay Rojansky’s Blog Microsoft software engineer working on .NET data access and perf, member of the Entity Framework team. Lead dev of Npgsql, the PostgreSQL provider.
Sunday Morning Live Hey Coders, Subscribe here - https://www.youtube.com/channel/UCetyodKOWGk5H6FoKoFnkZw Talk to us on - https://www.twitch.tv/curiousdrive Like our page - https://www.facebook.com/curiousdrive/ Follow us on - https://twitter.com/curious_drive Follow us ...
Call for help to 3D print ventilator parts & masks - SyncNorwich - Norwich's Tech + Startup Community (Norwich, England) SyncNorwich is Norwich’s Tech and Startup Community. Supported by Purple Tuesday, Leathes Prior, FXHOME & SupaPass! OUR MISSION Our mission is to promote and enable local tech business growth, and mak
3 Ways to Draw Squares Inside Triangles - Numberphile Calvin Lin shows us three ways to inscribe a square inside a triangle. More links & stuff in full description below ↓↓↓ More good triangle videos on Numberphile: https://bit.ly/TriangleVideos Calvin works at Brilliant, a regular sponsor of Numberphile ...
Introduction to Functional Programming in F# - Part 8 — Softwarepark In this post we are going to look at adding validation to the code we worked on in Part 6. We will use active patterns that we looked at in the last post (Part 7) and we will see how you can easily model domain errors.
r/WorldIsClosed r/WorldIsClosed: Only pictures or videos from public places that are normally full but currently empty
Plague Readings Authors to the rescue! Recently, a few authors decided to share their short stories with all of us to brighten the days and help with passing the time during quarantine days. Here's the list of readings: Adrian Tchaikovsky: Short Changes Formats available...
Using GitHub Actions to deploy a .Net Web App - Azure Greg So I wanted to take a look into GitHub Action’s and deploy a .Net Web App, this is my first real look into them and will be blogging about them a lot more in the future, below are the steps I took to do this. Create a basic .Net MVC Web App using .Net Cor...
Amazon Relief Fund The Amazon Relief Fund was created to help individuals who are facing financial hardship immediately after a natural disaster or an unforeseen personal hardship. The Fund relies primarily on individual donations from individuals and support from Amazon.co...
Siouxsie Wiles & Toby Morris: what does 'level two' mean – and why does it matter? The alert system signals the start of a new phase in NZ's battle against Covid-19. Siouxsie Wiles explains what it means, with illustrations by Toby Morris. The Spinoff’s ongoing expert-led, evidence-based coverage of Covid-19 is funded by Spinoff Memb...
Audible Stories | Audible.com Free stories for kids of all ages. Audible Stories is a free website where kids of all ages can listen to hundreds of Audible audio titles across six different languages—English, Spanish, French, German, Italian and Japanese—for free, so they can keep lea...
Stock Jump US Mutual funds (USD)World Indices ()US exchanges (USD)BOLSA DE COMERCIO DE BUENOS AIRES (ARS)SHENZHEN STOCK EXCHANGE (CNY)SHANGHAI STOCK EXCHANGE (CNY)SINGAPORE EXCHANGE (USD)NASDAQ OMX RIGA (EUR)BOERSE DUESSELDORF (EUR)NYSE EURONEXT - EURONEXT LISBON (E...
C# Pad: Run C# Code Online Compile, run and execute C# Sharp code online in an interactive REPL sandbox with code completion using your browser, iPad, iPhone, tablets and mobile devices.


3 July 2003
Disease Outbreak Reported
Between 6-29 June, 586 cases of cholera have been reported from those health facilities still operational in Monrovia. From 23-29 June, 50% of the admissions
were from Bushrod Island and central Monrovia. Because of the security situation, exact numbers of cases and deaths are difficult to obtain.
WHO is supporting the Ministry of Health with control measures, including mass chlorination in and around Monrovia. WHO is also providing drugs, medical supplies and chlorine to those nongovernmental organizations, including MERLIN and Médecins sans Frontières (France and Belgium), working in Monrovia.


Create a new folder called "listsandlinks" in your repository folder.
Inside listsandlinks create a file called "index.html" and a file called "main.css"
In index.html create an ordered list of step by step instructions to create a new webpage on the production server.
Also create an unordered list of 5 or more links to websites with useful webdesign related information.
In the nav section, create an unordered list of links with a link back to your main index page.
In your main index.html file in public_html, add an unordered list of links to the nav section with a link to "listsandlinks".
In your old index.html, add an article with a heading and a paragraph description of this assignment. Also add an unordered list that contains this list of requirements.
Turn in your work.
First you begin by typing gedit index.html into the terminal
Then once in the folder add the template for the html
Then add whatever text you wish to put on your site
after that you must create a file named main.css using gedit main.css in the terminal
This will allow you to edit border font background font weight text color ect.
Great now save your files
when your files are safe and sound you then type python -m SimpleHTTPServer into terminal
Finnalyy you type localhost:8000 into yer web browser and this will show you yer webbysite


Class RadioGroup
Radio group shows a group of labels, only one of those can be selected at a given time
Inherited Members
Namespace: Terminal
Assembly: Terminal.dll
Syntax
public class RadioGroup : Terminal.View
Constructors
RadioGroup(Rect, String[], Int32)
Initializes a new instance of the RadioGroup class setting up the initial set of radio labels and the item that should be selected.
Declaration
public RadioGroup (Terminal.Rect rect, string[] radioLabels, int selected = 0);
Parameters
| Type | Name | Description |
|---|---|---|
| Rect | rect | Boundaries for the radio group. |
| System.String[] | radioLabels | Radio labels, the strings can contain hotkeys using an undermine before the letter. |
| System.Int32 | selected | The item to be selected, the value is clamped to the number of items. |
RadioGroup(Int32, Int32, String[], Int32)
Initializes a new instance of the RadioGroup class setting up the initial set of radio labels and the item that should be selected, the view frame is computed from the provided radioLabels.
Declaration
public RadioGroup (int x, int y, string[] radioLabels, int selected = 0);
Parameters
| Type | Name | Description |
|---|---|---|
| System.Int32 | x | The x coordinate. |
| System.Int32 | y | The y coordinate. |
| System.String[] | radioLabels | Radio labels, the strings can contain hotkeys using an undermine before the letter. |
| System.Int32 | selected | The item to be selected, the value is clamped to the number of items. |
Fields
SelectionChanged
Declaration
public Action<int> SelectionChanged;
Field Value
| Type | Description |
|---|---|
| System.Action<System.Int32> | To be added. |
Properties
RadioLabels
The radio labels to display
Declaration
public string[] RadioLabels { get; set; }
Property Value
| Type | Description |
|---|---|
| System.String[] | The radio labels. |
Selected
The currently selected item from the list of radio labels
Declaration
public int Selected { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Int32 | The selected. |
Methods
MouseEvent(MouseEvent)
Declaration
public override bool MouseEvent (Terminal.MouseEvent me);
Parameters
| Type | Name | Description |
|---|---|---|
| MouseEvent | me | To be added. |
Returns
| Type | Description |
|---|---|
| System.Boolean | To be added. |
PositionCursor()
Declaration
public override void PositionCursor ();
ProcessHotKey(KeyEvent)
Declaration
public override bool ProcessHotKey (Terminal.KeyEvent kb);
Parameters
| Type | Name | Description |
|---|---|---|
| KeyEvent | kb | To be added. |
Returns
| Type | Description |
|---|---|
| System.Boolean | To be added. |
ProcessKey(KeyEvent)
Declaration
public override bool ProcessKey (Terminal.KeyEvent kb);
Parameters
| Type | Name | Description |
|---|---|---|
| KeyEvent | kb | To be added. |
Returns
| Type | Description |
|---|---|
| System.Boolean | To be added. |
Redraw(Rect)
Declaration
public override void Redraw (Terminal.Rect region);
Parameters
| Type | Name | Description |
|---|---|---|
| Rect | region | To be added. |


--- layout: article title: "Amazonia 1952: FOUND" authors: - fernandes-cruz-felipe excerpt: > A normal day at the archives takes a strange turn when _Appendix_ editor Felipe Cruz finds a box full of personal effects recovered from a 60-year-old PanAm plane crash in the Brazilian Amazon. permalink: /issues/2012/12/field-notes-amazonia-1952-found supernotes: /issues/1/1/cruz-found.json toc: 4 volume: 1 number: 1 header_image: header-cruz-found.jpg header_image_caption: "Map used by the land expedition to find the wreckage of PanAm flight 202." leaflet: true ---
It was a fall morning, but hot enough to make me sweat. As I climbed into the library elevator, the frigid A/C gave me a chill. Par for the course in Miami.
Ding. Eighth Floor—Special Collections. I left the elevator, greeted the friendly librarian and sat down for another uneventful day of browsing corporate documents from the PanAmerican World Airways collection. I asked for a yet another cardboard box full of memos, charts, letters and clippings, and then arranged the tools of my trade on the sterile black Formica desk. I sat back down. Looking out the window southwards, over the ocean towards Cuba, I let my thoughts drift.
Like the PanAm clippers that once flew south from Miami carrying wealthy passengers into exotic fantasies promised by travel posters, I was looking forward to Brazil. I should have been there by now, but bureaucratic barriers had delayed me from that phase of my research. Instead, I was in this modern office building, biding my time while my friends hurried to more exotic places and stranger archives. They sat in colonial prisons in Mexico City, imperial counting houses in Sevilla, and museum closets in Washington, sorting through obscure alchemical texts, sailors’ diaries, letters from revolutionaries, and even shelves full of pre-Columbian skulls.
Miami was exciting, but I had lived in Florida for many years and was ready to ship off for my own tour of archival duty. I was anxious to visit collections all across Brazil—imagining it as a frenetic adventure, as if Jack Kerouac had been an archive rat in On The Road. I was feeling a historian’s version of wanderlust.
A squeaky cart carrying five boxes rolled around the corner, interrupting my daydream.
This was a five-boxes-at-a-time kind of archive. Within the five delivered on the cart was a treat: some battered aviation maps that had needed care from the document restoration specialist before reaching my gloveless hands. I picked box number nine, and pulled out the first item, a thick manila envelope with the phrase “Jungle Episode 1952” written across the front.
I arranged it gently on the desk, as if I were handling a relic. I opened my camera’s shutter. Click. And then I opened the envelope.
A raucous pack of wild boars exploded from the jungle. It was a dark evening in early May, 1952, near the Araguaia river in the eastern Amazon. The expedition’s members—Carajá Indians, Brazilian workers and PanAm employees—scrambled into the trees and waited as hundreds of menacing tusks passed beneath them. It was just one of the many hazards they faced as they hacked through thirty-six miles of dense rainforest to reach the wreckage of PanAm flight 202.
On the night of April 29 1952, PanAm flight 202 had failed to report at one of its radio checkpoints between Rio de Janeiro and Port of Spain. It never arrived at its destination, Port of Spain, from whence it would have continued north to New York City. The search planes went up, and on the morning of May 1, one spotted a fresh clearing in the dense jungle. There it was—the charred wreckage of a Boeing StratoCruiser, last seen taking off Rio’s Santos-Dumont Airport with forty-one passengers and nine crew members aboard. After circling the site for hours and seeing no survivors, the search plane’s pilots decided there was no point in risking more lives by launching their team of parachute paramedics. They returned to their base in Belém and started making plans for a ground expedition.
Brazilian and North American air force officers and crash investigators, along with representatives of PanAm, scrutinized the maps and decided to land an amphibious airplane as close to the crash as possible, at the village of Lagoa Grande on the Araguaia River. Once there, they arranged a staging camp and asked for the help of the Brazilian “Indian Protection Services”—the bureaucracy charged with controlling interactions between outsiders and indigenous peoples. The agency sent one of its officers along with a group of Carajá Indians to serve as guides. They set off as soon as possible. It would be tough work. They would have to hack through thirty-six miles of dense forest. With trees rising over a hundred feet tall and casting a permanent shade, they were not cutting a trail: they were a digging a tunnel through the forest’s thick underbrush.
That night in early May, as the wild boars finally passed, one of the Carajás leapt from his treetop shelter to fell one with an arrow. Dinner was better than the usual military ration that night, but the team kept moving at a grueling pace. They had other threats to worry about. As wet as the Amazon seems, this area was a hard place to find potable water. The expedition often relied on drinking water collected from vines and leaves while one of the Carajás ranged ahead searching for streams.
Even maintaining their sense of direction was difficult, and without radio equipment, so was communication with the outside world. They received instructions from the main camp by airplane. If the cutting party heard an engine, they would light a smoke signal (their trail was invisible by air), and the airplane would circle and drop a package with directions or other messages.
Back at the Lagoa Grande base camp, a second drama was unfolding. The official expedition realized that they were not the only search party out there. Further survey flights revealed parachutes on the nearby treetops. Another group of rescuers was already walking around the wreckage! The morning papers confirmed it: an independent group of paratroopers, financed by the boisterous ex-governor of São Paulo, Adhemar de Barros, had parachuted directly into the crash site. A tawdry war of words began. Barros was planning to run for President of Brazil in the next election and the official expedition accused him of grandstanding, launching his own operation for political gain. Barros shot back, arguing that there might be survivors, and the Americans lacked the courage to reach the site by parachuting in from their airplanes.
Humphrey Toomey was the director of PanAm’s operations in Latin America at the time, and it fell to him to coordinate the official rescue operation from Lagoa Grande. He sent a letter to the Brazilian Air Force in Belém, pleading for them to intervene and stop the rogue expedition. The authorities agreed, but the parachutists were already on the scene. Toomey was afraid that they might disturb the wreckage and ruin the investigation. Perhaps he paced around the camp anxiously, then turned to one of the mechanics that PanAm had flown in from Miami, asked for a match, and lit a cigar.
Or at least that’s what I think he did. Back in Miami, 2011, right as I pulled Toomey’s letter to the Brazilian authorities from the musty envelope, a matchbook fell out onto the archive’s black table. It was from a Miami Beach bar named “The Lighthouse.” This “Jungle Episode 1952” envelope contained Toomey’s personal papers from the expedition, and included a number of other odd items, as if everything he had on him during the expedition had been shoved into this envelope and filed away by an assistant.
The matchbook, along with many of the documents mentioned here, can be seen by clicking through the supernotes to the right of each paragraph.
The matchbook seemed to have accumulated quite a few miles. Turning it over in my hand, I guessed that it was picked up by a PanAm mechanic at the Miami Beach bar, flew in his shirt or pants pocket to the heart of the Amazon, then was loaned to Mr. Toomey, who took it with him to Rio de Janeiro. Then, sometime after Toomey’s untimely murder in Rio de Janeiro, it flew back inside the envelope to Miami to become a part of the archival collection at the University of Miami. Before returning to Miami, it likely also made a stop at the corporate offices of PanAm in New York City along the way, where the archives previously resided.
The envelope contained quite a few interesting and mysterious items. One was a letter Toomey received from a psychic, claiming not only that were there survivors, but that he knew where they were. “He should go to a place (probably Indian village) called Gatatuaton where seven survivors will be found.” The psychic also warned that “he must return to Belém” because “the supposedly friendly Indians with him now, are not friendly.”
Another letter was more poignant, suggesting how the accident and PanAm’s recovery mission themselves crashed into the consciousness of the more hard-up residents in the area. In shaky handwriting, a farmer wrote a note to “Mr Toomey” claiming seven years of accounting experience and asking for a good placement at the PanAm offices in Rio de Janeiro.
Some were just sad, like the prepared script that PanAm provided to employees for condolence calls to the families of the victims. There were English and Portuguese versions of it, since many of the passengers were Brazilian: “This is _(name)_, of Pan American World Airways. I called you again to convey our continued sympathy and condolence and also because of our wish to reassure you that everything possible is being done to gain access to the location of and thoroughly investigate the accident.” At one point, the script instructs the PanAm employee to stop and listen to the victim’s family:
(AWAIT ANSWER AND MAKE WRITTEN NOTES AT THIS POINT, IF APPROPRIATE)
Sitting in the archive, I took some notes myself. They probably were not “appropriate.” Archival notes—the rawest form of historical analysis—are hardly ever “appropriate.”
Back in 1952 the investigation crew still had to deal with the competing expedition. With the paratroopers already in place, they decided to abandon the trail cutting enterprise (after days lost hacking through dense jungle) and fly directly to the crash site on a US Air Force helicopter that had just been delivered from Panama. After a few helicopter flights, the investigators set up camp near the parachutists from São Paulo. Tensions between the groups developed immediately, and only grew as supplies dwindled.
Meanwhile, the investigation began. The psychic had been wrong: there were no survivors. Air safety specialists sketched the layout of wreck, which helped them reconstruct the intricacies of the aerial accident. The way a metal cable was frayed, how an oil slick formed on a surface, or how a particular sheet of steel had torn were all valuable clues that hinted at what had happened and offered knowledge that could prevent future tragedies. Indeed, earlier that year PanAm flight 526A had made a successful water landing (technically known as ditching) near Puerto Rico, but many confused passengers could not leave the plane in the rough seas and sank with the plane. That very crash was the reason why passengers today receive detailed instructions on how to exit a plane and float in the case of a water “landing.” Hence the herculean efforts to investigate PanAm Flight 202: it could someday save lives.
It became clear that these were less than ideal conditions for a detailed technical investigation, however. Adhemar de Barros’ paratroopers hadn’t packed well. They ran out of supplies and there wasn’t enough water at the site for both their group and the official investigators. Without a trail back to home base, supplies could only be airlifted in by helicopter; because of the height of the trees, the helicopter had to lower the supplies with a rope that was not long enough. The delivery package dropped, rupturing its water containers. The PanAm expedition’s nerves were also frayed by the paratroopers’ technique for scaring off animals in the darkness: they threw grenades into the jungle at random hours of the night.
Making matters even worse, the helicopter, the team’s only link to the main camp, was suffering from a mechanical malfunction and only had a limited number of flights left. The official party made the decision to evacuate. They took their final notes and photographs, buried the bodies in a mass grave, and started leaving by helicopter.
Humphrey Toomey reads a prayer he prepared on the field, as they buried the fifty passengers and crew members. The handwritten notes seen in his hands can be read by viewing the notes for this article.
If only it were so simple. The paratroopers, with no way back, wanted a guaranteed ride out of the crash site. The American helicopter was on its last legs and could barely airlift the official investigators. One PanAm employee, irritated, later wrote in his notebook that when they asked “What about us?” he was tempted to reply, “You jumped in, why not try jumping out!”
Tensions reached a crescendo when the “Adhemar de Barros” expedition demanded that one of the Americans stay behind to ensure that they too would be evacuated. Scott Magness, from the US Civil Aeronautics Administration, and Major Miranda Correa, from the Brazilian Air Force, volunteered to act as collateral for the paratroopers—in essence, to become hostages. The helicopter pilot offered Magness an opportunity to covertly jump on the helicopter, but he pointed out that their Colt .45’s were no match for the paratroopers’ machine guns.
The story was already a media sensation in both countries. To keep the tragedy from tipping into a disgrace, the official expedition agreed to the deal.  The paratroopers used the chainsaw to open a landing strip long enough for a small plane to land and ferry them out.
Their mission over, the official party radioed a message across thirty-six miles of forest to the main camp at Lagoa Grande: “Mission Complete. All persons dead. Recognition impossible, bodies buried, some personal effects recovered.”
“Some personal effects recovered.” Sitting in Miami, I felt chastened. I hadn’t yet considered the real people, and their belongings, at the center of this tragedy. The next archival envelope I opened made them impossible to avoid.
“Items recovered from Flight 202,” it read. It contained a half-destroyed five Franc bill, a pair of airmail letters, and a travel itinerary never completed.
The money, I later discovered, probably belonged to Lucie Marie Claire Pardieu. She was a French nun from the Sacre Coeur order, returning from a convent in Uruguay. There is a letter from the Sister Superior authorizing PanAm to bury her remains.
The airmail missives were also touching. In one, Richard Temple, in Jamaica, wrote to Lucy Wood, in Buenos Aires, to excuse himself for not sending little Anthony (their son) on a flight to spend the holidays in Buenos Aires. “I know how terribly disappointed you must be, but am sure that you will understand.” The boy was sick, and the doctor warned that his appendix might flare up. Anthony’s illness might have saved him, as he was not on the flight himself. Sadly, he might have also missed his last opportunity to see his mother. The letter was among many items belonging to Lucy found on the wreckage, including a Canadian passport, a certificate of good behavior from the Argentine government, and two valises. “Five cotton bunny heads” and “children toys” were also among the items recovered by investigators. I wondered if they had been presents Lucy was bringing for Anthony.
The list of recovered items written up by the investigators was a snapshot of the workers, the children, and the wealthy travelers who died together—toys, a smashed roll of Kodak film, a flight attendant’s lapel pin and union card, Uruguayan, Brazilian, Argentine, Canadian and English passports, thousands of dollars in travelers checks, calling cards, gold watch, a pearl necklace, a girl’s photograph…
There was also the travel itinerary for Mr. and Mrs. Heinel’s month-long vacation. They had travelled to New Orleans, Rio de Janeiro, and São Paulo, staying at various high-end hotels in rooms with “twin beds and a bath.” They had taken a steamer to Rio de Janeiro, and spent a few days riding the cable car to the Sugarloaf and enjoying the “marvelous city.” In Trinidad, they looked forward to a tour by “private car with English speaking chauffer-guide […] through groves of Cocoa, Nutmeg, Coffee, passing the Great Samaan, the most famous tree in the West Indies.”
They never saw the Great Samaan. Flight 202 stopped along the way.
It was 4:30pm and it was last call at the archive. I gently placed these delicate documents, moldy from their long layover in the heart of the Amazon, back in their box. The friendly librarian, Steven Hersh, placed them on hold so I could continue reading them in the morning.
I took the elevator down and walked out into a balmy Miami afternoon. I got in my car, and started driving aimlessly through Miami. I wondered if might stumble upon The Lighthouse Bar and Restaurant. If I did, I wanted to order bourbon, neat, and ask for some matches.


This project was created with a bootstrap theme named Freelancer, combined with the work of Ian Lunn - Hover.css . Some modifications were made for personalization purposes, such as adding my picture, new sections, and different glyphicons.
With this project, I got in touch with Sass and started to get a feel on how to style pages with proper styling rules, although I need a lot more practice :D. I also learned how to configure a small php program to receive emails directly from a web form.
You can access this project here
This project was the second real world web project I contributed to. This project was developed as part of a funded study and is a web-based, personalized intervention promoting regular aerobic PA among adult Canadian francophones with type 2 diabetes. I developed the image of the site, a part of the business logic behind it, and the behaviour change system by which participants would increase their physical activity level.
Furthermore, this project has been a stepping-stone for me, because it made me fell in love with programming and its superpowers. It really kickstarted my self-driven programming education journey.
You can access the website here
If you want, you can also access a scientific paper I have published related to this project.
DIAGO is a simple logo I have developed for a research grant application submitted to the Canadian Diabetes Association in 2015.
TODOZEN is a prototype front-end project. It helped me experiment the material design style by using Materialize - a modern responsive front-end framework based on Material Design. This project helped me gain a feel on how to design a great user experience for desktop AND mobile/tablet users.
You can access this project here


public static interface Session.State
| Modifier and Type | Method and Description |
|---|---|
Collection<Host> |
getConnectedHosts()
The hosts to which the session is currently connected (more precisely, at the time
this State has been grabbed).
|
int |
getInFlightQueries(Host host)
The number of queries that are currently being executed through a given host.
|
int |
getOpenConnections(Host host)
The number of open connections to a given host.
|
Session |
getSession()
The Session to which this State corresponds to.
|
int |
getTrashedConnections(Host host)
The number of "trashed" connections to a given host.
|
Session getSession()
Collection<Host> getConnectedHosts()
getOpenConnections
return 0, if the
pool itself is created but no connections have been successfully opened yet.int getOpenConnections(Host host)
getTrashedConnections(Host)
.host
- the host to get open connections for.host
. If the session
is not connected to that host, 0 is returned.int getTrashedConnections(Host host)
PoolingOptions.getIdleTimeoutSeconds()
), in case the load
goes up again. This method counts connections in that state.host
- the host to get trashed connections for.host
. If the session
is not connected to that host, 0 is returned.int getInFlightQueries(Host host)
State
was grabbed at least).host
- the host to get in-flight queries for.host
.


Table of Contents
Heuristic Optimization and Dynamical System Safety
Verification
Outline
Focus
Stepper Motor
Stepper Motor Safety Verification
Heuristic Search Landscape
Verification through Optimization
Comparative Testing
Comparative Study Results
Global Optimization Results
Comparative Study Results (cont.)
Global Optimization Results (cont.)
Information-Based Approach
Information-Based Local Optimization
Multi-Level Local Optimization
MLLO Example: Rastrigin Function
MLLO-RIQ Results
Other Work in Progress
Summary |
Author: Todd W. Neller
Home Page: http://www-ksl.stanford.edu/people/neller/
Download presentation source (with
EPS previews) |


Gecode::FloatVarBranch Class Reference
[Branching on float variables]
Which variable to select for branching. More...
#include <float.hh>
Public Types | |
| enum | Select { SEL_NONE = 0, SEL_RND, SEL_MERIT_MIN, SEL_MERIT_MAX, SEL_DEGREE_MIN, SEL_DEGREE_MAX, SEL_AFC_MIN, SEL_AFC_MAX, SEL_ACTION_MIN, SEL_ACTION_MAX, SEL_CHB_MIN, SEL_CHB_MAX, SEL_MIN_MIN, SEL_MIN_MAX, SEL_MAX_MIN, SEL_MAX_MAX, SEL_SIZE_MIN, SEL_SIZE_MAX, SEL_DEGREE_SIZE_MIN, SEL_DEGREE_SIZE_MAX, SEL_AFC_SIZE_MIN, SEL_AFC_SIZE_MAX, SEL_ACTION_SIZE_MIN, SEL_ACTION_SIZE_MAX, SEL_CHB_SIZE_MIN, SEL_CHB_SIZE_MAX } |
Which variable selection. More... | |
Public Member Functions | |
| FloatVarBranch (void) | |
| Initialize with strategy SEL_NONE. | |
| FloatVarBranch (Rnd r) | |
| Initialize with random number generator r. | |
| FloatVarBranch (Select s, BranchTbl t) | |
| Initialize with selection strategy s and tie-break limit function t. | |
| FloatVarBranch (Select s, double, BranchTbl t) | |
| Initialize with selection strategy s, decay factor d, and tie-break limit function t. | |
| FloatVarBranch (Select s, FloatAFC a, BranchTbl t) | |
| Initialize with selection strategy s, AFC a, and tie-break limit function t. | |
| FloatVarBranch (Select s, FloatAction a, BranchTbl t) | |
| Initialize with selection strategy s, action a, and tie-break limit function t. | |
| FloatVarBranch (Select s, FloatCHB c, BranchTbl t) | |
| Initialize with selection strategy s, CHB c, and tie-break limit function t. | |
| FloatVarBranch (Select s, FloatBranchMerit mf, BranchTbl t) | |
| Initialize with selection strategy s, branch merit function mf, and tie-break limit function t. | |
| Select | select (void) const |
| Return selection strategy. | |
| void | expand (Home home, const FloatVarArgs &x) |
| Expand AFC, action, and CHB. | |
Protected Attributes | |
| Select | s |
| Which variable to select. |
Detailed Description
Which variable to select for branching.
Definition at line 1668 of file float.hh.
Member Enumeration Documentation
Which variable selection.
- Enumerator:
SEL_NONE First unassigned.
SEL_RND Random (uniform, for tie breaking).
SEL_MERIT_MIN With least merit.
SEL_MERIT_MAX With highest merit.
SEL_DEGREE_MIN With smallest degree.
SEL_DEGREE_MAX With largest degree.
SEL_AFC_MIN With smallest accumulated failure count.
SEL_AFC_MAX With largest accumulated failure count.
SEL_ACTION_MIN With lowest action.
SEL_ACTION_MAX With highest action.
SEL_CHB_MIN With lowest CHB Q-score.
SEL_CHB_MAX With highest CHB Q-score.
SEL_MIN_MIN With smallest min.
SEL_MIN_MAX With largest min.
SEL_MAX_MIN With smallest max.
SEL_MAX_MAX With largest max.
SEL_SIZE_MIN With smallest domain size.
SEL_SIZE_MAX With largest domain size.
SEL_DEGREE_SIZE_MIN With smallest degree divided by domain size.
SEL_DEGREE_SIZE_MAX With largest degree divided by domain size.
SEL_AFC_SIZE_MIN With smallest accumulated failure count divided by domain size.
SEL_AFC_SIZE_MAX With largest accumulated failure count divided by domain size.
SEL_ACTION_SIZE_MIN With smallest action divided by domain size.
SEL_ACTION_SIZE_MAX With largest action divided by domain size.
SEL_CHB_SIZE_MIN With smallest CHB Q-score divided by domain size.
SEL_CHB_SIZE_MAX With largest CHB Q-score divided by domain size.
Constructor & Destructor Documentation
| Gecode::FloatVarBranch::FloatVarBranch | ( | void | ) | [inline] |
| Gecode::FloatVarBranch::FloatVarBranch | ( | Rnd | r | ) | [inline] |
| Gecode::FloatVarBranch::FloatVarBranch | ( | Select | s, | |
| FloatAction | a, | |||
| BranchTbl | t | |||
| ) | [inline] |
| Gecode::FloatVarBranch::FloatVarBranch | ( | Select | s, | |
| FloatBranchMerit | mf, | |||
| BranchTbl | t | |||
| ) | [inline] |
Member Function Documentation
| FloatVarBranch::Select Gecode::FloatVarBranch::select | ( | void | ) | const [inline] |
| void Gecode::FloatVarBranch::expand | ( | Home | home, | |
| const FloatVarArgs & | x | |||
| ) | [inline] |
Member Data Documentation
Select Gecode::FloatVarBranch::s [protected] |
The documentation for this class was generated from the following files: