GPIO Triggers Example using Pi4J.
The following example demonstrates how to setup GPIO triggers. GPIO Triggers listen for pin state changes and then perform some action on on alternate GPIO pin or perform a callback to a user specified method. Pi4J includes several built in pre-defined trigger implementation classes or you can create your own trigger by implementing the GpioTrigger interface. Triggers are based on the GPIO listener implementation and rely on GPIO hardware interrupts not state polling.
Source Code
The source code for this example is included in the github repository:
https://github.com/Pi4J/pi4j/tree/master/pi4j-example/src/main/java/TriggerGpioExample.java
/* * #%L * ********************************************************************** * ORGANIZATION : Pi4J * PROJECT : Pi4J :: Java Examples * FILENAME : TriggerGpioExample.java * * This file is part of the Pi4J project. More information about * this project can be found here: https://pi4j.com/ * ********************************************************************** * %% * Copyright (C) 2012 - 2021 Pi4J * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ import java.util.concurrent.Callable; import com.pi4j.io.gpio.GpioController; import com.pi4j.io.gpio.GpioFactory; import com.pi4j.io.gpio.GpioPinDigitalInput; import com.pi4j.io.gpio.GpioPinDigitalOutput; import com.pi4j.io.gpio.PinPullResistance; import com.pi4j.io.gpio.PinState; import com.pi4j.io.gpio.RaspiPin; import com.pi4j.io.gpio.trigger.GpioCallbackTrigger; import com.pi4j.io.gpio.trigger.GpioPulseStateTrigger; import com.pi4j.io.gpio.trigger.GpioSetStateTrigger; import com.pi4j.io.gpio.trigger.GpioSyncStateTrigger; /** * This example code demonstrates how to setup simple triggers for GPIO pins on the Raspberry Pi. * * @author Robert Savage */ public class TriggerGpioExample { public static void main(String[] args) throws InterruptedException { System.out.println("<--Pi4J--> GPIO Trigger Example ... started."); // create gpio controller final GpioController gpio = GpioFactory.getInstance(); // provision gpio pin #02 as an input pin with its internal pull down resistor enabled final GpioPinDigitalInput myButton = gpio.provisionDigitalInputPin(RaspiPin.GPIO_02, PinPullResistance.PULL_DOWN); System.out.println(" ... complete the GPIO #02 circuit and see the triggers take effect."); // setup gpio pins #04, #05, #06 as an output pins and make sure they are all LOW at startup GpioPinDigitalOutput myLed[] = { gpio.provisionDigitalOutputPin(RaspiPin.GPIO_04, "LED #1", PinState.LOW), gpio.provisionDigitalOutputPin(RaspiPin.GPIO_05, "LED #2", PinState.LOW), gpio.provisionDigitalOutputPin(RaspiPin.GPIO_06, "LED #3", PinState.LOW) }; // create a gpio control trigger on the input pin ; when the input goes HIGH, also set gpio pin #04 to HIGH myButton.addTrigger(new GpioSetStateTrigger(PinState.HIGH, myLed[0], PinState.HIGH)); // create a gpio control trigger on the input pin ; when the input goes LOW, also set gpio pin #04 to LOW myButton.addTrigger(new GpioSetStateTrigger(PinState.LOW, myLed[0], PinState.LOW)); // create a gpio synchronization trigger on the input pin; when the input changes, also set gpio pin #05 to same state myButton.addTrigger(new GpioSyncStateTrigger(myLed[1])); // create a gpio pulse trigger on the input pin; when the input goes HIGH, also pulse gpio pin #06 to the HIGH state for 1 second myButton.addTrigger(new GpioPulseStateTrigger(PinState.HIGH, myLed[2], 1000)); // create a gpio callback trigger on gpio pin#4; when #4 changes state, perform a callback // invocation on the user defined 'Callable' class instance myButton.addTrigger(new GpioCallbackTrigger(new Callable<Void>() { public Void call() throws Exception { System.out.println(" --> GPIO TRIGGER CALLBACK RECEIVED "); return null; } })); // keep program running until user aborts (CTRL-C) while (true) { Thread.sleep(500); } // stop all GPIO activity/threads by shutting down the GPIO controller // (this method will forcefully shutdown all GPIO monitoring threads and scheduled tasks) // gpio.shutdown(); <--- implement this method call if you wish to terminate the Pi4J GPIO controller } }
JavaDoc
The following JavaDoc links are the primary interfaces used to setup triggers for GPIO state changes:
- com.pi4j.io.gpio.GpioFactory
- com.pi4j.io.gpio.Gpio
- com.pi4j.io.gpio.GpioPin
- com.pi4j.io.gpio.PinEdge
- com.pi4j.io.gpio.PinState
- com.pi4j.io.gpio.PinResistor
- com.pi4j.io.gpio.trigger.GpioCallbackTrigger
- com.pi4j.io.gpio.trigger.GpioPulseStateTrigger
- com.pi4j.io.gpio.trigger.GpioSetStateTrigger
- com.pi4j.io.gpio.trigger.GpioSyncStateTrigger
Wiring Diagram
The following circuit can be used in conjunction with this sample code.
Navigate
If you have not already downloaded and installed the Pi4J library on the RaspberryPi, then view this page for instructions on where to download and how to install Pi4J:
Download & Install Pi4J
First, locate the TriggerGpioExample.java source file in the samples folder of the Pi4J installation on the RaspberryPi.
You can use the following command on the Pi's console or SSH terminal to navigate to this path: cd /opt/pi4j/examples
Compile
Next, use the following command to compile this example program:
javac -classpath .:classes:/opt/pi4j/lib/'*' -d . TriggerGpioExample.java
Execute
The following command will run this example program:
sudo java -classpath .:classes:/opt/pi4j/lib/'*' TriggerGpioExample
Output
The LED attached to GPIO pin 21 should turn ON when the momentary button is pressed and OFF when the button is released.
The LED attached to GPIO pin 22 should turn ON when the momentary button is pressed and OFF when the button is released.
The LED attached to GPIO pin 23 should turn ON for 1 second when the momentary button is pressed. The button release has no effect on this LED.
The following message should be displayed on the console each time the momentary button is pressed and again when released.
--> GPIO TRIGGER CALLBACK RECEIVED


Hi! My name is Kevin. I'm currently a sophomore at Cal pursuing a degree in CS & data science.
In my free time, I enjoy binge watching Game of Thrones and playing guitar!
Contact Me
Cal Hacks 4.0
At Cal Hacks 4.0, my team and I hacked together an ambitious app that took in a user drawing as input and returned a song based on the drawing.
We played with the concepts of image classification and sentiment analysis in the process.
At SLO Hacks, my team and I hacked together a mobile app called PartyPal
that keeps partygoers safe. Our app placed top 5 overall and won best use of Twilio API. Check it out!
I created Day Trip after being frustrated at the lack of simple day-trip planning services. It is still
under development, but feel free to try it out!
Organization:
me
Date:
Summer 2018
Category:
Personal Projects
SCTech
I was a mentor at SCTech, a hackathon for middle school and high school students in Santa Cruz.
H2O Grow is a web app developed by a team of two programmers at CU Hacks 2. The app aims to gamify water conservation in hopes to ameliorate the drought in affected areas. Try it out for yourself! H2O Grow
I worked with the UCSC Puma Project over the summer of 2016 to develop a machine learning algorithm for puma kill prediction. Throughout this process, I learned a lot about Machine Learning through online resources such as Coursera's Machine Learning Course and countless web articles. I ended up implementing the algorithm in R. Later, I summarized my project into a research paper and presented it to the community.


Exercise: Batch Processing JSON Datasets (Spark SQL)
Introduction to Spark Structured Streaming
Streaming Aggregations with groupBy
Lunch Break (12:00pm)
Fault Tolerance and Checkpointing
Monitoring Streaming Queries (with StreamingQueryListeners)
Structured Streaming's Internals
Exercise: Developing Custom Streaming Sources
Experience with Scala language (or Java or Python)
Experience with Dataset API and Spark SQL in general
Experience with basic aggregations (groupBy) and joins
Familiarity with the command line and spark-shell in particular
Java Platform, Standard Edition (Java SE) 8
IntelliJ IDEA Community Edition with Scala plugin
First name
What do you expect from the workshop?

What time do you prefer for lunch? 12pm or 1pm?
Read Spark Structured Streaming gitbook
Read Mastering Apache Spark 2 gitbook
Follow @jaceklaskowski on twitter
Upvote my questions and answers on StackOverflow


This presentation brought to my attention just how much of a systemic issue racism and segregation was in Harford County. Unfortunately, I have never heard of any of this information before. This was all new information that I wish had been brought to my attention earlier. I was aware Harford County had a bad past. Such as prostitution in Havre De Grace. However, this showed an entirely different side to the land in which I grew up.
The most interesting part of the presentation was the Afro-American Expose. The US and Maryland set themselves up for failure when they attempted to integrate laws that only lead to desegregation of African Diplomats. One would think they would see through their biases and realize this would cause issues in the future. However, it is easy to say this in hindsight
The Afro-American Expose demonstrated just how flawed the newly implemented laws were. A reported named Herbert (Could not find the spelling to his last name. His name is said in Part 2 at timestamp 26:20) dresses up as what he thinks an African Diplomat would look like. He barrows a cousin's limo and speaks in a fake African accent. And he has his fellow staffers roll up to restaurants and they said he was the finance manager of Goban (A made up country. Which switches the vowels of Gabon). They are served at the restaurant and receive good service while there. This experience is published in The Afro. This demonstrates the hypocrisy of the laws to the people.
This was the most fascinating part of the presentation. However, close behind this was the correlation to these events and the Cold War. The news of the unfair treatment of the African Diplomats made its way across the world. Papers were written about the unfair treatment in the Soviet Union in order to maintain their regimen. This helped the Soviet Union to paint the US in a negative light.
Personally, I found the presentation interesting. It demonstrated a weakness that still exists in this country. This shows why there is a large disconnect in Maryland. Some of these feelings still exist. These issues will permeate for a long time. However, some day, people will hopefully find peace in themselves and bring a positive message with them.


Base z-index using SASS
I’m developing an application for a client in the form of overlays on top of their existing content. Today, I was informed that our z-indexes are all too low. The client’s site has elements that can go all the way up to 3000, and our elements were definitely below that. They recommended we use a minimum of 4000 to be safe.
The most straightforward solution would be to find every z-index and add 4000 to it.
.element { z-index: 50 }
becomes
.element { z-index: 4050 }
But what happens if we we get a new requirement that our minimum should be 5000? Do you really want to have to find all the z-indexes again? With SASS, this is a non-issue.
First, I created a new SASS variable to note my base z-index.
$base-z-index: 4000;
Next, I added the variable to every z-index instance.
.element { z-index: $base-z-index + 50; }
This also takes advantage of SASS’ built-in math operations.
Now, if the requirement changes, I only have to make one change to the stylesheets.


tasks.pavlov module¶
- Author
Dominic Hunt
- Reference
Value and prediction error in medial frontal cortex: integrating the single-unit and systems levels of analysis. Silvetti, M., Seurinck, R., & Verguts, T. (2011). Frontiers in Human Neuroscience, 5(August), 75. doi:10.3389/fnhum.2011.00075
-
class
tasks.pavlov.
Pavlov
(rewMag=4, rewProb=array([0.87, 0.33]), stimMag=1, stimDur=20, rewDur=4, simDur=30, stimRepeats=7)[source]¶ Bases:
tasks.taskTemplate.Task
Based on the Silvetti et al 2011 paper “Value and prediction error in medial frontal cortex: integrating the single-unit and systems levels of analysis.”
Many methods are inherited from the tasks.taskTemplate.Task class. Refer to its documentation for missing methods.
-
Name
¶ The name of the class used when recording what has been used.
- Type
string
- Parameters
rewMag (float, optional) – The size of the stimulus. Default 4
rewProb (array of floats, optional) – The probabilities of each stimulus producing a reward. Default [0.85,0.33]
stimMag (float, optional) – The size of the stimulus. Default 1
stimDur (int, optional) – The duration, in tens of ms, that the stimulus is produced for. This should be longer than rewDur since rewDur is set to end when stimDur ends. Default 200
rewDur (int, optional) – The duration, in tens of ms, that the reward is produced for. Default 40
simDur (int, optional) – The duration, in tens of ms, that each stimulus event is run for. Default 300
stimRepeats (int, optional) – The number of times a stimulus is introduced. Default 72
-
receiveAction
(action)[source]¶ Receives the next action from the participant
- Parameters
action (int or string) – The action taken by the model
-
-
tasks.pavlov.
pavlovStimTemporal
()[source]¶ Passes the pavlov stimuli to models that cope with stimuli and rewards that have a duration.
- Returns
pavlovStim – The function expects to be passed an event with three components:
(stim,rew,stimDur)``and an action (unused) and yield a series of events ``t,c,r`
.stim
is the value of the stimulus. It is expected to be a list-like object.rew
is a list containing the reward for each trialstep. The reward is expected to be a float.stimDur
is the duration of the stimulus, anint
. This should be less than the length ofrew
.c
the stimulus.r
the reward.t
is the time- Return type
function
-
tasks.pavlov.
Name
¶ The identifier of the function
- Type
string


Match Play. Red trails 2-5 to 7. How should Red play 62?
pips Red=87 White=68
(CorrectAnswer= 0/0, ErrorScore= 0)
If Red loses the game, he loses the match. Therefore, he must hit 7/5* with the two and then it is a question of how to play the six.
It is close but the prosaic 10/4 just wins out over 7/1*. The reason it is close is the blot on White’s 3-pt. Without that the safer play would win easily.
It is close but the prosaic 10/4 just wins out over 7/1*. The reason it is close is the blot on White’s 3-pt. Without that the safer play would win easily.
1. Cubeful 2-ply 7/5* 7/1 Eq.: -0.003 0.445 0.074 0.002 - 0.555 0.106 0.001 2. Cubeful 2-ply 10/4 7/5* Eq.: -0.011 (-0.008) 0.443 0.071 0.003 - 0.557 0.185 0.003 3. Cubeful 2-ply 8/2 7/5* Eq.: -0.031 (-0.028) 0.433 0.071 0.002 - 0.567 0.200 0.003 4. Cubeful 2-ply 7/1 3/1 Eq.: -0.223 (-0.220) 0.372 0.023 0.001 - 0.628 0.015 0.000 5. Cubeful 2-ply 8/6 8/2 Eq.: -0.272 (-0.269) 0.358 0.009 0.000 - 0.642 0.009 0.000


GET MORE STAMPS
LoveStamp provides free digital stamps for everyone!
To be able to send digital stamps from LoveStamp
download the LoveStamp Chrome Extension for Gmail
and follow the installation instructions.
For information for Designers and Artists,
basic troubleshooting and answers to most common questions
please visit the FAQ page.
For other issues, questions, and suggestions
shoot us an email!


If you are a medical Cannabis user, let us pick provide some recommendations based on your choices!
Warning: Must be 21 or Older to Proceed
All recommendations are just suggestions. Please speak with your doctor before trying any medical cannabis or herbal supplements.


Tattle Query Language (TQL)¶
The Tattle Query Language (TQL) is a short hand syntax used for building Elasticsearh DSL queries.
Introduction¶
When I was building the first verion of Tattle (project Bluenote), I noticed a pattern in the Elasticserach queries I was making to find events. For example, They all had time windows, they all had a query_string
(Lucene query), a size
, a to
and from
, etc. So I thought it would be nice to have a short hand syntax to represent an Elasticsearch query that was easy to understand and write, which in turn would make managing hundreds or thousands of Tales easier. Through some experimentation I came up with TQL which aims to do just that.
Examples¶
Let uses NGINX logs for our example (if you are familiar with Apache access-combined logs, this will be similar as well).
Lets get a count of events that have a status code of 502, grouped by their respective host for the past hour.
The Elasticsearch query will look like
{
"query": {
"bool": {
"must_not": [
{
"query_string": {
"query": ""
}
}
],
"must": [
{
"query_string": {
"query": "status:502"
}
},
{
"range": {
"@timestamp": {
"to": "now",
"from": "now-1h"
}
}
}
]
}
},
"_source": {
"include": [
"*"
]
},
"from": 0,
"aggs": {
"hostname": {
"terms": {
"field": "host.raw"
}
}
},
"size": 0
}
The TQL equivilent would be
status:502 | terms name=hostname, field=host.raw
Note: The times for these queries not handled in TQL, but instead are determined in the alert/tale. For demo purposes, we left the times in the DSL query.
Lets break it down¶
Anything before the first |
(pipe) is going to be Lucey Query Syntax. There are many tutorials out there that can explain it much better than here, but in essance what we did was run a lucene query for any logs/events that have a status
of 502
. But just keep in mind, that any lucene query you would use in Kibana or Elasticsearch you will put here.
To the right of our first |
is our terms
aggregation. In this case we are running a terms
agg on the field host.raw
, and we are naming that aggregation hostname
.
If we ran this against our Elasticsearch cluster, we would get results similar to the following:
{
"aggregations": {
"hostname": {
"buckets": [
{
"key": "host1.mycompany.com",
"doc_count": 37
},
{
"key": "host2.mycompany.com",
"doc_count": 29
},
{
"key": "host3.mycompany.com",
"doc_count": 16
}
],
"sum_other_doc_count": 0,
"doc_count_error_upper_bound": 0
}
},
"timed_out": false
}
In this case we have three hosts in the hostname
aggregation that have had 502 errors in the last hour, host1.mycompany.com
(37 events), host2.mycompany.com
(29 events), host3.mycompany.com
(16 events).
Nesting¶
Aggregations in Elasticserach can be nested, and this is the default behaviour in TQL. You can nest as many aggregations as you with by using |
.
In this example, we can want to average a metric and group it by the host.
metric:DatabaseConnections | terms field=database.raw, name=DB_Name | avg field=connections, name=connection_avg
Here we used two aggregations, a terms and and avg. The avg aggregation will nest below the terms. Here are the aggregations for the Elasticsearch Query TQL would generate:
{
"aggs": {
"DB_Name": {
"terms": {
"field": "database.raw"
},
"aggs": {
"connection_avg": {
"avg": {
"field": "connections"
}
}
}
}
},
"size": 0
}
Mappings¶
Generally all of the aggregations available in Elasticsearch can be used in TQL. Simply use the syntax <agg_name> <arguments>
- example terms field=host.raw, name=hostname, order={ "hostname": "desc" }
, cardinality field=author_hash, precision_threshold=100
, stats field=grade
However this rule applies all but one name, fields
. The fields
name is special to TQL and will display only the fields you want to see in your tale/alert.
For example, let use NGINX events. They can have many different fields, but we might only want to see one or two fields in our alert. We can use the fields argument to help with that
status:502 | fields @timestamp, message
In this example we would only see two fields, the @timestamp
for the event, an the message
for the event.
Read up more on Elasticsearch Aggregations here: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html
Ordering¶
Certain Elasticserach aggregations, such as terms can order your results. You can pass along your order syntax as documented by Elasticsearch into the order argument
....| terms field=database.raw, name=database, order=[ { "database.raw": "desc"}, {"_count": "desc"} ]
Scripting¶
Like ordering, certain Elasticsearch aggs can contain scripts to enhance their values during search time. Much like the order function, these are evaluated just like they are in the Elasticsearch docs.
.... | stats name=grades_stats, script={"inline": "_value * correction", "params": {"correction": 1.2}}
An example demonstrating inline scripting with the choice of language, and converting bytes to MB
host.raw:app-servers* | avg name=mb_sent, script="doc['body_bytes_sent']/1024/1024", lang=expression
Note
Groovy inline scripting is disabled by default in modern Elasticsearch clusters. As always, check out the scripting documentation on elastic.co for more examples: https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html
Note
Script style syntax should be evauluted for most, if not all aggregations. For example, percentiles field=status percents=[85, 99, 99.9]
will be evauated into the correct JSON needed for the ES query


| {{title.custName}} |
| {{title.orderNo}} |
| Summary.doc | 09.02.2014 | by Cliff Clye |
| 09.02.2014 | by Cliff Clye | Contacted customer on Tuesday - awaiting response. |
| 09.02.2014 | by Cliff Clye | Changed due date - moved up two days. |
| 09.03.2014 | by Cliff Clye | Customer confirmed. |


(defmacro with-lock ((lock) &body body)
#+allegro
`(mp:with-process-lock (,lock) ,@body)
#+lispworks
`(mp:with-lock (,lock) ,@body)
#+sbcl
`(sb-thread:with-mutex (,lock) ,@body)
#+openmcl
`(ccl:with-lock-grabbed (,lock) ,@body)
#-(or allegro lispworks sbcl openmcl)
(not-implemented 'with-lock))
Source Context


Gold-i Teams Up with TraderEvolution, Pushing New Solution
by Jeff PattersonMulti-market trading software provider, TraderEvolution Global has teamed up with Gold-i to roll out a new end-to end trading solution. The new partnership will cater towards banks, prime brokers, and brokerages globally.
The new deal reflects both fintech groups’ commitment to optimizing connectivity solutions. In particular, the partnership will look to foster improved access to TraderEvolution’s advanced multi-market and multi-asset trading platform.
Mutually beneficial partnership
By extension, Gold-i’s multi-asset liquidity management system will also see increased global access as part of its multi-asset push.
Suggested articles
What Lies Ahead for a British Fintech Industry Outside the EUGo to article >>
“We are glad to expand our connectivity options with such a reputable and experienced company as Gold-i. A wide range of connectivity options is one of the key attributes of a multi-market brokerage solution,” explained Roman Nalivayko, CEO, TraderEvolution Global in a statement on the partnership.
The partnership helps promote enhanced connectivity to a growing group of LPs. Both TraderEvolution and Gold-i presently boast substantial routing and aggregation methods as well as connections with key ECNs, exchanges, and other venues.
“This is a mutually beneficial partnership as we continue to grow our suite of products for financial institutions. TraderEvolution is an excellent multi-market trading platform that complements our existing technology stack superbly,” noted Tom Higgins, CEO, Gold-i in an accompanying statement.


"""Contains AMPAL objects representing pseudo atoms."""
from collections import OrderedDict
from ampal.base_ampal import Atom, Monomer, Polymer, write_pdb
from tools.geometry import distance, radius_of_circumcircle
[docs]class PseudoGroup(Polymer):
"""Container for `PseudoMonomer`, inherits from `Polymer`.
Parameters
----------
monomers : PseudoAtom or [PseudoGroup], optional
`PseudoMonomer` or list containing `PseudoMonomer` objects to form the
`PseudoGroup`.
polymer_id : str, optional
An ID that the user can use to identify the `PseudoGroup`. This is
used when generating a pdb file using `PseudoGroup().pdb`.
ampal_parent : ampal.Assembly, optional
Reference to `Assembly` containing the `PseudoGroup`.
sl : int, optional
The default smoothing level used when calculating the
backbone primitive.
Attributes
----------
id : str
`PseudoGroup` ID
ampal_parent : ampal.Assembly or None
Reference to `Assembly` containing the `PseudoGroup`
molecule_type : str
A description of the type of `Polymer` i.e. Protein, DNA etc.
ligands : ampal.LigandGroup
A `LigandGroup` containing all the `Ligands` associated with this
`PseudoGroup` chain.
tags : dict
A dictionary containing information about this AMPAL object.
The tags dictionary is used by AMPAL to cache information
about this object, but is also intended to be used by users
to store any relevant information they have.
sl : int
The default smoothing level used when calculating the
backbone primitive.
Raises
------
TypeError
`Polymer` type objects can only be initialised empty or using
a `Monomer`.
"""
def __init__(self, monomers=None, polymer_id=' ', ampal_parent=None, sl=2):
super().__init__(
monomers=monomers, polymer_id=polymer_id,
molecule_type='pseudo_group', ampal_parent=ampal_parent, sl=sl)
def __repr__(self):
return '<PseudoGroup chain containing {} {}>'.format(
len(self._monomers),
'PseudoMonomer' if len(self._monomers) == 1 else 'PseudoMonomers')
[docs]class PseudoMonomer(Monomer):
"""Represents a collection of `PsuedoAtoms`.
Parameters
----------
pseudo_atoms : OrderedDict, optional
OrderedDict containing Atoms for the `PsuedoMonomer`. OrderedDict
is used to maintain the order items were added to the
dictionary.
mol_code : str, optional
One or three letter code that represents the `PsuedoMonomer`.
monomer_id : str, optional
String used to identify the `PsuedoMonomer`.
insertion_code : str, optional
Insertion code of `PsuedoMonomer`, used if reading from pdb.
is_hetero : bool, optional
True if is a hetero atom in pdb. Helps with PDB formatting.
ampal_parent : ampal.PseudoGroup, optional
Reference to `PseudoGroup` containing the `PsuedoMonomer`.
Attributes
----------
mol_code : str
PDB molecule code that represents the `Nucleotide`.
insertion_code : str
Insertion code of `Nucleotide`, used if reading from pdb.
is_hetero : bool
True if is a hetero atom in pdb. Helps with PDB formatting.
states : dict
Contains an `OrderedDicts` containing atom information for each
state available for the `Nucleotide`.
id : str
String used to identify the `Nucleotide`.
reference_atom : str
The key that corresponds to the reference `Atom`. This is used
by various functions, for example backbone primitives are
calculated using the `Atom` defined using this key.
ampal_parent : Polynucleotide or None
A reference to the `Polynucleotide` containing this `Nucleotide`.
tags : dict
A dictionary containing information about this AMPAL object.
The tags dictionary is used by AMPAL to cache information
about this object, but is also intended to be used by users
to store any relevant information they have.
Raises
------
ValueError
Raised if `mol_code` is not length 1 or 3.
"""
def __init__(self, pseudo_atoms=None, mol_code='UNK',
monomer_id=' ', insertion_code=' ', ampal_parent=None):
super(PseudoMonomer, self).__init__(
atoms=pseudo_atoms, monomer_id=monomer_id,
ampal_parent=ampal_parent)
self.mol_code = mol_code
self.insertion_code = insertion_code
self.is_hetero = True
def __repr__(self):
return '<PseudoMonomer containing {} {}. PseudoMonomer code: {}>'.format(
len(self.atoms), 'PseudoAtom' if len(self.atoms) == 1 else 'PseudoAtoms', self.mol_code)
@property
def pdb(self):
"""Generates a PDB string for the `PseudoMonomer`."""
pdb_str = write_pdb(
[self], ' ' if not self.tags['chain_id'] else self.tags['chain_id'])
return pdb_str
[docs]class PseudoAtom(Atom):
"""Object containing 3D coordinates and name.
Notes
-----
Used to represent pseudo atoms (e.g. centre_of_mass) in ISAMBARD.
Parameters
----------
coordinates : 3D Vector (tuple, list, numpy.array)
Position of `PseudoAtom` in 3D space.
element : str
Element of `PseudoAtom`.
atom_id : str
Identifier for `PseudoAtom`, usually a number.
res_label : str, optional
Label used in `Monomer` to refer to the `PseudoAtom` type i.e.
"CA" or "OD1".
occupancy : float, optional
The occupancy of the `PseudoAtom`.
bfactor : float, optional
The bfactor of the `PseudoAtom`.
charge : str, optional
The point charge of the `PseudoAtom`.
state : str
The state of this `PseudoAtom`. Used to identify `PseudoAtoms`
with a number of conformations.
ampal_parent : ampal.Monomer, optional
A reference to the `Monomer` containing this `PseudoAtom`.
Attributes
----------
id : str
Identifier for `PseudoAtom`, usually a number.
res_label : str
Label used in `PseudoGroup` to refer to the `Atom` type i.e. "CA" or "OD1".
element : str
Element of `Atom`.
ampal_parent : ampal.PseudoAtom
A reference to the `PseudoGroup` containing this `PseudoAtom`.
number of conformations.
tags : dict
A dictionary containing information about this AMPAL object.
The tags dictionary is used by AMPAL to cache information
about this object, but is also intended to be used by users
to store any relevant information they have.
"""
def __init__(self, coordinates, name='', occupancy=1.0, bfactor=1.0,
charge=' ', ampal_parent=None):
super().__init__(coordinates, element='C', atom_id=' ',
occupancy=occupancy, bfactor=bfactor,
charge=charge, state='A', ampal_parent=ampal_parent)
self.name = name
def __repr__(self):
return ("<PseudoAtom. Name: {}. Coordinates: "
"({:.3f}, {:.3f}, {:.3f})>".format(
self.name, self.x, self.y, self.z))
[docs]class Primitive(PseudoGroup):
"""A backbone path composed of `PseudoAtoms`.
Parameters
----------
pseudo_atoms : OrderedDict, optional
OrderedDict containing Atoms for the `PsuedoMonomer`. OrderedDict
is used to maintain the order items were added to the
dictionary.
mol_code : str, optional
One or three letter code that represents the `PsuedoMonomer`.
monomer_id : str, optional
String used to identify the `PsuedoMonomer`.
insertion_code : str, optional
Insertion code of `PsuedoMonomer`, used if reading from pdb.
is_hetero : bool, optional
True if is a hetero atom in pdb. Helps with PDB formatting.
ampal_parent : ampal.PseudoGroup, optional
Reference to `PseudoGroup` containing the `PsuedoMonomer`.
Attributes
----------
mol_code : str
PDB molecule code that represents the `Nucleotide`.
insertion_code : str
Insertion code of `Nucleotide`, used if reading from pdb.
is_hetero : bool
True if is a hetero atom in pdb. Helps with PDB formatting.
states : dict
Contains an `OrderedDicts` containing atom information for each
state available for the `Nucleotide`.
id : str
String used to identify the `Nucleotide`.
reference_atom : str
The key that corresponds to the reference `Atom`. This is used
by various functions, for example backbone primitives are
calculated using the `Atom` defined using this key.
ampal_parent : Polynucleotide or None
A reference to the `Polynucleotide` containing this `Nucleotide`.
tags : dict
A dictionary containing information about this AMPAL object.
The tags dictionary is used by AMPAL to cache information
about this object, but is also intended to be used by users
to store any relevant information they have.
Raises
------
ValueError
Raised if `mol_code` is not length 1 or 3.
"""
def __init__(self, monomers=None, polymer_id=' ', ampal_parent=None, sl=2):
super().__init__(
monomers=monomers, polymer_id=polymer_id,
ampal_parent=ampal_parent, sl=sl)
def __repr__(self):
return '<Primitive chain containing {} {}>'.format(
len(self._monomers),
'PseudoMonomer' if len(self._monomers) == 1 else 'PseudoMonomers')
@classmethod
[docs] def from_coordinates(cls, coordinates):
"""Creates a `Primitive` from a list of coordinates."""
prim = cls()
for coord in coordinates:
pm = PseudoMonomer(ampal_parent=prim)
pa = PseudoAtom(coord, ampal_parent=pm)
pm.atoms = OrderedDict([('CA', pa)])
prim.append(pm)
prim.relabel_all()
return prim
@property
def coordinates(self):
"""Returns the backbone coordinates for the `Primitive`."""
return [x._vector for x in self.get_atoms()]
[docs] def rise_per_residue(self):
"""The rise per residue at each point on the Primitive.
Notes
-----
Each element of the returned list is the rise per residue,
at a point on the Primitive. Element i is the distance
between primitive[i] and primitive[i + 1]. The final value
is None.
"""
rprs = [distance(self[i]['CA'], self[i + 1]['CA'])
for i in range(len(self) - 1)]
rprs.append(None)
return rprs
[docs] def radii_of_curvature(self):
"""The radius of curvature at each point on the Polymer primitive.
Notes
-----
Each element of the returned list is the radius of curvature,
at a point on the Polymer primitive. Element i is the radius
of the circumcircle formed from indices [i-1, i, i+1] of the
primitve. The first and final values are None.
"""
rocs = []
for i in range(len(self)):
if 0 < i < len(self) - 1:
rocs.append(radius_of_circumcircle(
self[i - 1]['CA'], self[i]['CA'], self[i + 1]['CA']))
else:
rocs.append(None)
return rocs
__author__ = 'Jack W. Heal'


Tourist rescued after floating in Aegean Sea for two days
by David AaroA New Zealand tourist was rescued by Greece authorities after floating in a rubber dinghy in the Aegean Sea for nearly two days, according to coast guard officials.
Kushila Stein, 47, was vacationing on a sailboat near the Greek island of Folegandros when she boarded an inflatable boat on Nov. 1 to get supplies. She was missing a day later, according to Greek authorities.
Stein was found roughly 40 nautical miles southwest of Folegandros near the island of Crete on Sunday morning after an intensive search operation involving seven coast guard vessels, three private boats, a plane, and a helicopter, Reuters reported.
US EMBASSY TO BERLIN TO UNVEIL RONALD REAGAN STATUE AHEAD OF FALL OF BERLIN WALL 30TH ANNIVERSARY
“I was blown away, blown away in my dinghy,” she said as she disembarked a coast guard vessel at the port of Iraklion, on Crete.
Capt Giorgos Marietakis, who helmed a boat which assisted in the relief efforts, told the Guardian she was alone at sea longer than anyone he had ever known.
“I had an image of her being hungry and thirsty,” he told the outlet. “I tried to get into her head and think of what she would do. I imagined her beginning to despair and I thought of her doing whatever she could to survive.”
Stein reportedly survived thanks to candy, which she ate for a meal, a coast guard official told Reuters. Local media reported she's an experienced sailor from New Zealand.
POLICE SEEK PERSON OF INTEREST IN CASE OF UFC FIGHTER'S MISSING STEPDAUGHTER
“She was clearly exhausted but very level-headed, very composed,” he told the Guardian. “She had gone without fresh water and I think had begun to despair. She had survived on boiled sweets, which she had kept in a tiny pouch. By the time we found her, she said she had one left.”
Stein helped improve her chances of survival by wrapping herself in plastic bags, rationing her candy and drying out her socks. She even managed to survive after losing an oar.
CLICK HERE TO GET THE FOX NEWS APP
"She had drifted a long way, over 40 nautical miles south of Folegandros," Marietakis said. "She was so happy. She hugged and kissed us but, if truth be told, I don't know who was more overjoyed, us or her. We had saved a human being and she had survived to tell the tale."


Matric number and Department are only collected for security reasons and they won't be displayed on their public profiles, neither will it be revealed to a potential employer.
Ready to Leave?
Select "Logout" below if you are ready to end your current session.


Abplus From Abprem
Creating AB+ from ABPrem
Use the OS Addressing products attribute mapping and the AddressBase technical specification as references.
The debate about ABP and AB+ still goes on. To help this I have pulled together a query to get an AB+ view from the ABP data. It's not an exact match (it's just quick and dirty) but most things are there.
Count of records in ABPREM_BLPU
select count(*) from ABPREM_BLPU;
giving 311159. This is an important figure. The end should match this!
BLPU and DPA
According to the technical spec there is a 1:(0,1) relationship between BLPU and DPA
select
blpu.CHANGE_TYPE,
blpu.UPRN,
blpu.BLPU_STATE,
blpu.BLPU_STATE_DATE,
blpu.PARENT_UPRN,
blpu.X_COORDINATE,
blpu.Y_COORDINATE,
blpu.RPC,
blpu.LOCAL_CUSTODIAN_CODE,
blpu.START_DATE,
blpu.END_DATE,
blpu.LAST_UPDATE_DATE,
blpu.ENTRY_DATE,
blpu.POSTAL_ADDRESS,
blpu.POSTCODE_LOCATOR,
blpu.MULTI_OCC_COUNT,
dpa.RM_UDPRN,
dpa.ORGANISATION_NAME,
dpa.DEPARTMENT_NAME,
dpa.SUB_BUILDING_NAME,
dpa.BUILDING_NAME,
dpa.BUILDING_NUMBER,
dpa.DEP_THOROUGHFARE_NAME,
dpa.THOROUGHFARE_NAME,
dpa.DOU_DEP_LOCALITY,
dpa.DEP_LOCALITY,
dpa.POST_TOWN,
dpa.POSTCODE,
dpa.POSTCODE_TYPE,
dpa.WELSH_DEP_THOROUGHFARE_NAME,
dpa.WELSH_THOROUGHFARE_NAME,
dpa.WELSH_DOU_DEP_LOCALITY,
dpa.WELSH_DEP_LOCALITY,
dpa.WELSH_POST_TOWN,
dpa.PO_BOX_NUMBER,
dpa.PROCESS_DATE
FROM
ABPREM_BLPU blpu
LEFT OUTER JOIN
ABPREM_DELIVERYPTADDRESS dpa
ON
blpu.UPRN = dpa.UPRN;
So lets count
select
count(*)
FROM
ABPREM_BLPU blpu
LEFT OUTER JOIN
ABPREM_DELIVERYPTADDRESS dpa
ON
blpu.UPRN = dpa.UPRN;
giving 311160. This means instead of a 1:1 match between BLPU and DPA which is what the model states we have a 1: many relationship.
Lets look at this
select
UPRN, count(1)
from
ABPREM_DELIVERYPTADDRESS
group by
UPRN
having
count (UPRN) > 1;
Produces 69 duplicate DPAs with the same UPRN. This is not good news.
Lets look at some of these:
select
a.*
from
ABPREM_DELIVERYPTADDRESS a,
(select
UPRN
from
ABPREM_DELIVERYPTADDRESS
group by
UPRN
having
count (UPRN) > 1) b
where a.UPRN = b.UPRN
order by
a.UPRN;
These appear to be duplicate records in every respect EXCEPT they have a different number in the PRO_ORDER field. We can get around this by using a distinct select.
select
dpa.*
FROM
ABPREM_DELIVERYPTADDRESS dpa
JOIN
(select distinct
UPRN
FROM
ABPREM_DELIVERYPTADDRESS) dup
ON
dup.UPRN = dpa.UPRN;
We should be able to slot this into the earlier query
Lets look at this
select
UPRN, count(1)
from
(select distinct
UPRN
FROM
ABPREM_DELIVERYPTADDRESS)
group by
UPRN
having
count (UPRN) > 1;
Produces O duplicate DPAs with the same UPRN. This is much better news.
There are ways to fix (including deleting duplicates in the source) this but I'm going for quick and dirty. I will materialise the table and then delete the duplicates:
- Materialise the table as SPABLPUDPA
create table SPA_BLPU_DPA
as
select
blpu.CHANGE_TYPE,
blpu.UPRN,
blpu.BLPU_STATE,
blpu.BLPU_STATE_DATE,
blpu.PARENT_UPRN,
blpu.X_COORDINATE,
blpu.Y_COORDINATE,
blpu.RPC,
blpu.LOCAL_CUSTODIAN_CODE,
blpu.START_DATE,
blpu.END_DATE,
blpu.LAST_UPDATE_DATE,
blpu.ENTRY_DATE,
blpu.POSTAL_ADDRESS,
blpu.POSTCODE_LOCATOR,
blpu.MULTI_OCC_COUNT,
dpa.RM_UDPRN,
dpa.ORGANISATION_NAME,
dpa.DEPARTMENT_NAME,
dpa.SUB_BUILDING_NAME,
dpa.BUILDING_NAME,
dpa.BUILDING_NUMBER,
dpa.DEP_THOROUGHFARE_NAME,
dpa.THOROUGHFARE_NAME,
dpa.DOU_DEP_LOCALITY,
dpa.DEP_LOCALITY,
dpa.POST_TOWN,
dpa.POSTCODE,
dpa.POSTCODE_TYPE,
dpa.WELSH_DEP_THOROUGHFARE_NAME,
dpa.WELSH_THOROUGHFARE_NAME,
dpa.WELSH_DOU_DEP_LOCALITY,
dpa.WELSH_DEP_LOCALITY,
dpa.WELSH_POST_TOWN,
dpa.PO_BOX_NUMBER,
dpa.PROCESS_DATE
FROM
ABPREM_BLPU blpu
LEFT OUTER JOIN
ABPREM_DELIVERYPTADDRESS dpa
ON
blpu.UPRN = dpa.UPRN;
commit;
and delete the duplicates
--------------------------------------------------------
-- FORCE UPRN to be unique!
--------------------------------------------------------
delete from SPA_BLPU_DPA
where rowid in (select rowid
from SPA_BLPU_DPA
minus
select min(rowid)
from SPA_BLPU_DPA
group by UPRN);
commit;
we can now count the table
select
count (*)
from
SPA_BLPU_DPA;
- thats better
This is a problem with AddressPlace Premium). According to the ER model^[see page 6] there should be 1:(0,1) relationship between BLPU and DPA tables. This is clearly wrong
CLASSIFICATION and BLPU
According to the technical spec there is a 1:many relationship between BLPU and Classification
Lets look at the many side of things.....
select
count(*)
from
(select
UPRN
from
ABPREM_CLASSIFICATION
group by
UPRN
having
count (UPRN) > 1);
There are 576 multiple classifications from 4.2 million
So this is going to be an annoyingly regular thing. We can get rid of the 1 to manys with the following:
select
UPRN,
max(CLASSIFICATION_CODE) CLASS
from
ABPREM_CLASSIFICATION
group by
UPRN;
which allows us to join to SPABLPUDPA as follows
select
blpudpa.*,
class.CLASS
FROM
SPA_BLPU_DPA blpudpa
LEFT OUTER JOIN
(select
UPRN,
max(CLASSIFICATION_CODE) CLASS
from
ABPREM_CLASSIFICATION
group by
UPRN) class
ON
blpudpa.UPRN = class.UPRN;
Application cross reference
According to the technical spec there is a 1:many relationship between BLPU and Application cross reference
The primary fields are UPRN, SOURCE and CROSSREFERENCE. Ideally each UPRN, SOURCE, CROSSREFERENCE combination should be unique:
select
UPRN,
SOURCE,
CROSS_REFERENCE,
count(1)
from
ABPREM_APPXREF
group by
UPRN,
SOURCE,
CROSS_REFERENCE
having
count (UPRN) > 1);
Produces duplicates. Again not good :-(
The best way of dealing with this is to look at it as a pivot table. We can pivot this data out and give it the required headings using the query below:
select
*
from
(select
UPRN,
SOURCE,
CROSS_REFERENCE
from
ABPREM_APPXREF)
pivot
(min(CROSS_REFERENCE)
for SOURCE
in
('7666MA' as OS_ADDRESS_TOID,
'7666MT' as OS_TOPO_TOID,
'7666MI' AS OS_ROADLINK_TOID,
'7666VC' AS VOA_CT_RECORD,
'7666VN' AS VOA_NDR_RECORD,
'7666OW' AS WARD_CODE,
'7666OP' AS PARISH_CODE));
which allows us to join to SPABLPUDPA as follows:
select
blpudpa.*,
xref.OS_ADDRESS_TOID,
xref.OS_TOPO_TOID,
xref.OS_ROADLINK_TOID,
xref.VOA_CT_RECORD,
xref.VOA_NDR_RECORD,
xref.WARD_CODE,
xref.PARISH_CODE
FROM
SPA_BLPU_DPA blpudpa
LEFT OUTER JOIN
(select
*
from
(select
UPRN,
SOURCE,
CROSS_REFERENCE
from
ABPREM_APPXREF)
pivot
(min(CROSS_REFERENCE)
for SOURCE
in
('7666MA' as OS_ADDRESS_TOID,
'7666MT' as OS_TOPO_TOID,
'7666MI' AS OS_ROADLINK_TOID,
'7666VC' AS VOA_CT_RECORD,
'7666VN' AS VOA_NDR_RECORD,
'7666OW' AS WARD_CODE,
'7666OP' AS PARISH_CODE))) xref
ON
blpudpa.UPRN = xref.UPRN;
ORGANISATION and BLPU
According to the technical spec there is a 1:many relationship between BLPU and ORGANISATION
Lets look at the many side of things.....
select
count(*)
from
(select
UPRN
from
ABPREM_ORGANISATION
group by
UPRN
having
count (UPRN) > 1);
There are 4 multiple ORGANISATIONs from 87,772.
We can get rid of the 1 to manys with the following:
select
UPRN,
max(ORGANISATION) ORGANISATION
from
ABPREM_ORGANISATION
group by
UPRN;
which allows us to join to SPABLPUDPA as follows
select
blpudpa.*,
org.ORGANISATION
FROM
SPA_BLPU_DPA blpudpa
LEFT OUTER JOIN
(select
UPRN,
max(ORGANISATION) ORGANISATION
from
ABPREM_ORGANISATION
group by
UPRN) org
ON
blpudpa.UPRN = org.UPRN;
LPI and BLPU
According to the technical spec there is a 1:many relationship between BLPU and LPI
However, we already have the table ABPSINGLEADDRESS which should have resolved most of these many issues.
Lets look at the many side of things.....
select
count(*)
from
(select
UPRN
from
ABP_SINGLE_ADDRESS
group by
UPRN
having
count (UPRN) > 1);
This is null. So we can join the tables together with SPABLPUDPA as follows
select
blpudpa.*,
lpi.SAO_TEXT,
lpi.SAO_START_NUMBER,
lpi.SAO_START_SUFFIX,
lpi.SAO_END_NUMBER,
lpi.SAO_END_SUFFIX,
lpi.PAO_TEXT,
lpi.PAO_START_NUMBER,
lpi.PAO_START_SUFFIX,
lpi.PAO_END_NUMBER,
lpi.PAO_END_SUFFIX,
lpi.STREET_DESCRIPTION,
lpi.LOCALITY_NAME,
lpi.POSTCODE_LOCATOR,
lpi.GEO_SINGLE_ADDRESS_LABEL
FROM
SPA_BLPU_DPA blpudpa
LEFT OUTER JOIN
ABP_SINGLE_ADDRESS lpi
ON
blpudpa.UPRN = lpi.UPRN;
Bringing it all together
Basically just plug them all together into a big long multiple join statement:-)
select
blpudpa.*,
class.CLASS,
org.ORGANISATION,
lpi.SAO_TEXT,
lpi.SAO_START_NUMBER,
lpi.SAO_START_SUFFIX,
lpi.SAO_END_NUMBER,
lpi.SAO_END_SUFFIX,
lpi.PAO_TEXT,
lpi.PAO_START_NUMBER,
lpi.PAO_START_SUFFIX,
lpi.PAO_END_NUMBER,
lpi.PAO_END_SUFFIX,
lpi.STREET_DESCRIPTION,
lpi.LOCALITY_NAME,
lpi.POSTCODE_LOCATOR,
lpi.GEO_SINGLE_ADDRESS_LABEL,
xref.OS_ADDRESS_TOID,
xref.OS_TOPO_TOID,
xref.OS_ROADLINK_TOID,
xref.VOA_CT_RECORD,
xref.VOA_NDR_RECORD,
xref.WARD_CODE,
xref.PARISH_CODE
FROM
SPA_BLPU_DPA blpudpa
LEFT OUTER JOIN
(select
UPRN,
max(CLASSIFICATION_CODE) CLASS
from
ABPREM_CLASSIFICATION
group by
UPRN) class
ON
blpudpa.UPRN = class.UPRN
LEFT OUTER JOIN
(select
UPRN,
max(ORGANISATION) ORGANISATION
from
ABPREM_ORGANISATION
group by
UPRN) org
ON
blpudpa.UPRN = org.UPRN
LEFT OUTER JOIN
ABP_SINGLE_ADDRESS lpi
ON
blpudpa.UPRN = lpi.UPRN
LEFT OUTER JOIN
(select
*
from
(select
UPRN,
SOURCE,
CROSS_REFERENCE
from
ABPREM_APPXREF)
pivot
(min(CROSS_REFERENCE)
for SOURCE
in
('7666MA' as OS_ADDRESS_TOID,
'7666MT' as OS_TOPO_TOID,
'7666MI' AS OS_ROADLINK_TOID,
'7666VC' AS VOA_CT_RECORD,
'7666VN' AS VOA_NDR_RECORD,
'7666OW' AS WARD_CODE,
'7666OP' AS PARISH_CODE))) xref
ON
blpudpa.UPRN = xref.UPRN;
This can be used to create a new table SPAABPLUSCLONE
create table SPA_ABPLUS_CLONE as
select
blpudpa.*,
class.CLASS,
org.ORGANISATION,
lpi.SAO_TEXT,
lpi.SAO_START_NUMBER,
lpi.SAO_START_SUFFIX,
lpi.SAO_END_NUMBER,
lpi.SAO_END_SUFFIX,
lpi.PAO_TEXT,
lpi.PAO_START_NUMBER,
lpi.PAO_START_SUFFIX,
lpi.PAO_END_NUMBER,
lpi.PAO_END_SUFFIX,
lpi.STREET_DESCRIPTION,
lpi.LOCALITY_NAME,
lpi.POSTCODE_LOCATOR as LPI_POSTCODE_LOCATOR,
lpi.GEO_SINGLE_ADDRESS_LABEL,
xref.OS_ADDRESS_TOID,
xref.OS_TOPO_TOID,
xref.OS_ROADLINK_TOID,
xref.VOA_CT_RECORD,
xref.VOA_NDR_RECORD,
xref.WARD_CODE,
xref.PARISH_CODE
FROM
SPA_BLPU_DPA blpudpa
LEFT OUTER JOIN
(select
UPRN,
max(CLASSIFICATION_CODE) CLASS
from
ABPREM_CLASSIFICATION
group by
UPRN) class
ON
blpudpa.UPRN = class.UPRN
LEFT OUTER JOIN
(select
UPRN,
max(ORGANISATION) ORGANISATION
from
ABPREM_ORGANISATION
group by
UPRN) org
ON
blpudpa.UPRN = org.UPRN
LEFT OUTER JOIN
ABP_SINGLE_ADDRESS lpi
ON
blpudpa.UPRN = lpi.UPRN
LEFT OUTER JOIN
(select
*
from
(select
UPRN,
SOURCE,
CROSS_REFERENCE
from
ABPREM_APPXREF)
pivot
(min(CROSS_REFERENCE)
for SOURCE
in
('7666MA' as OS_ADDRESS_TOID,
'7666MT' as OS_TOPO_TOID,
'7666MI' AS OS_ROADLINK_TOID,
'7666VC' AS VOA_CT_RECORD,
'7666VN' AS VOA_NDR_RECORD,
'7666OW' AS WARD_CODE,
'7666OP' AS PARISH_CODE))) xref
ON
blpudpa.UPRN = xref.UPRN;
commit;
To wrap this all up we should then count the records
Select count(*) from SPA_ABPLUS_CLONE
at 311159 records. Our work here is done.


Search Hotels
Hotel Details
Rooms
Foods
F Hotels & Restuarant
Address : Dhaka, BAngladesh
Email<EMAIL_ADDRESS>Room : 102
@
2500 BDT
Facilities
1

AC
2

Bed
1

TV
Book
Set Menu 1
@
550 BDT
Items :
1
Fried Rice
1
Chicken
1
Vegetable
1
Salaad
Order


{% extends "base.html" %} {% load staticfiles %} {% load boards_tags %} {% load humanize %} {% block title %}
Unban user if they were banned by mistake from board.
{% endif %} {% for user in users %}No User Banned Yet!
{% endfor %} {% endblock content %}


- Home
- Agenda Center
▼Airport Advisory Board
| Agenda | Minutes | Download |
|---|---|---|
Nov 19, 2020 — Posted Nov 16, 2020 11:47 AMAirport Advisory Board Meeting Agenda for November 19, 2020 |
▼Board of Commissioners for Las Cruces Utilities
| Agenda | Minutes | Media | Download |
|---|---|---|---|
Nov 19, 2020 — Posted Nov 16, 2020 3:23 PMPotential Quorum Notice |
|||
Nov 12, 2020 — Posted Nov 2, 2020 4:29 PMLCU Board Regular Meeting for November 12, 2020, will focus on the Administrative Report, Three Resolutions on Consent, and Seven Resolutions for Discussion. |
▼Capital Improvements Advisory Committee
| Agenda | Minutes | Media | Download |
|---|---|---|---|
Nov 19, 2020 — Posted Nov 13, 2020 12:34 PMCIAC Agenda for November 19, 2020 , will focus on Utilities Department Impact Fee Updates and Seven Year Report for Park Impact Fees Reviews for: Utilities, Parks & Rec, and Public Safety. |
▼City Art Board
| Agenda | Minutes | Media | Download |
|---|---|---|---|
Dec 8, 2020 — Posted Dec 3, 2020 8:13 AMCity Art Board Agenda |
|||
Nov 10, 2020 — Posted Nov 5, 2020 9:11 AMCity Art Board Agenda |
▼DAC Juvenile Justice Continuum Board
| Agenda | Minutes | Download |
|---|---|---|
Dec 9, 2020 — Posted Dec 4, 2020 8:20 AMDOÑA ANA COUNTY JUVENILE JUSTICE CONTINUUM BOARD AGENDA |
▼Development Review Committee
| Agenda | Minutes | Download |
|---|---|---|
Dec 2, 2020 — Posted Nov 30, 2020 11:10 AMDRC Meeting on December 2, 2020 - CANCELLED |
||
Nov 18, 2020 — Posted Nov 13, 2020 8:04 AMDRC Meeting on November 18, 2020 - CANCELLED |
▼Downtown Parking Committee
| Agenda | Minutes | Download |
|---|---|---|
Nov 19, 2020 — Posted Nov 16, 2020 6:11 AMDowntown Parking Committee Meeting |
▼Economic Development PRC
| Agenda | Minutes | Download |
|---|---|---|
Nov 18, 2020 — Posted Nov 13, 2020 3:06 PMEconomic Development PRC Meeting |
▼Health PRC
| Agenda | Minutes | Download |
|---|---|---|
Dec 2, 2020 — Posted Nov 23, 2020 10:53 AMHealth PRC Meeting December 2, 2020 |
▼Historic Preservation Commission
| Agenda | Minutes | Download |
|---|---|---|
Dec 14, 2020 — Posted Dec 10, 2020 2:49 PMHistoric Preservation Commission Meeting on December 14, 2020 |
||
Nov 17, 2020 — Posted Nov 17, 2020 9:08 AMHistoric Preservation Committee Meeting on November 20, 2020 |
||
Nov 9, 2020 — Posted Nov 5, 2020 1:00 PMHistoric Preservation Commission Meeting on November 9, 2020 |
▼Housing PRC
| Agenda | Minutes | Download |
|---|---|---|
Nov 18, 2020 — Posted Nov 16, 2020 6:20 AMHousing PRC Meeting on November 18, 2020 - Cancelled |
▼Las Cruces Economic Recovery Ad Hoc Board
| Agenda | Minutes | Download |
|---|---|---|
Dec 3, 2020 — Posted Nov 24, 2020 11:11 AMLas Cruces Economic Recovery Ad Hoc Board Agenda for December 3, 2020 |
||
Nov 19, 2020 — Amended Nov 18, 2020 9:40 AMCancelled- Las Cruces Economic Recovery Ad-Hoc Board Agenda for November 19, 2020 |
▼Mayor's Suicide Prevention Taskforce
| Agenda | Minutes | Download |
|---|---|---|
Nov 18, 2020 — Posted Nov 18, 2020 12:00 PMThe Las Cruces Mayor's Suicide Prevention Task Force |
▼Parks & Rec Advisory Board
| Agenda | Minutes | Download |
|---|---|---|
Nov 19, 2020 — Posted Nov 12, 2020 2:43 PMParks & Recreation Advisory Board Meeting |
▼Planning and Zoning Commission
| Agenda | Minutes | Download |
|---|---|---|
Dec 14, 2020 — Posted Dec 10, 2020 3:14 PMPlanning & Zoning Commission Potential Quorum Notice for December 13-19, 2020 |
||
Nov 24, 2020 — Posted Nov 9, 2020 9:59 AMP&Z Agenda for November 24, 2020 |
▼Quality of Life PRC
| Agenda | Minutes | Download |
|---|---|---|
Dec 9, 2020 — Posted Dec 2, 2020 3:13 PMQuality of Life Policy Review Committee Meeting Agenda |
▼Senior Programs Advisory Board
| Agenda | Minutes | Download |
|---|---|---|
Dec 10, 2020 — Amended Dec 10, 2020 7:26 AMSenior Programs Advisory Board Meeting December 10, 2020 CANCELLED |
||
Nov 12, 2020 — Posted Nov 4, 2020 7:51 AMCANCELLED - Senior Programs Advisory Board Meeting - November 12, 2020 |
▼Transit Advisory Board
| Agenda | Minutes | Download |
|---|---|---|
Dec 3, 2020 — Posted Nov 26, 2020 3:00 PMLAS CRUCES AREA TRANSIT ADVISORY BOARD MEETING AGENDA |
▼TSI PRC
| Agenda | Minutes | Download |
|---|---|---|
Dec 1, 2020 — Posted Nov 25, 2020 8:28 AMTransportation-Sustainability-Infrastructure PRC Meeting Agenda for December 1, 2020 |
▼University District Citizen's Design Review Board
| Agenda | Minutes | Download |
|---|---|---|
Dec 7, 2020 — Posted Dec 2, 2020 11:22 AMUniversity District Citizen Design Review Committee Meeting on December 7, 2020 - Cancelled |


{% extends "base_template.html" %} {% block content %}
Simple web client for initiating a WAE collection on-demand. The resulting plan file can be retrieved with the WAE Design client.


Resume
of Paul Vudmaska
Developer
Full stack, Ruby on Rails developer (12+ years experience) with other complimentary design and technology skills.
Why me?
My best asset is my interest. I keep up with web development trends (both front and back) because I love it.
- I seek value - "how is this technology going to help me create value for myself and others?"
- Finding the right tool for the job used to be the hardest part. Now, choosing, the right tool is hardest because of paradox of choice.
- I've got 20 years of experience choosing and implementing the right tools for the job.
May 1997
Education
- Bachelor of Business Administration
- Information Systems
- UTSA, San Antonio, Texas
Skills
Server
- Rails
- Many ruby gems Gemfile
- Mysql / Postgres
- Managed production servers on Digital Ocean and Linode for more than 10 years
- Ubuntu
- Passenger
- Nginx
- SSH / Keys
- Capistrano
- SSL certs
Client
- HTML
- CSS
- Javascript
- jQuery
- jQuery Mobile
- Vue
- Svelte
- Static site generators
Experience
Jan 2007 to Present
- Full stack development of CRM for small business.
- Manages customer's clients, phones, invoices and more
- Rails (started with 2, currently on 4+)
- Twilio
- Scriptable phone number
- Call Routing
- Jquery Mobile
- UI / Javascript
- I've worked for MBLZ on a project basis over the last few years.
- Some of the projects include:
- Added product invoices and inventory
- Updating all sites to use SSL (Let's Encrypt)
- Moved the CMS portion out of Rails and into a static site generator
- Multi-site Middleman - all the sites use one instance, each containing their own data and content - making maintenance (including adding sites) very efficient, performant and cost effective
- Bootstrap (3&4 - the upgrade to 4 was a breeze)
2010-2015
Senior developer working on internal apps that managed contracts.
- Using their API, interfaced with Salesforce
- Encrypted documents at rest
- Implemented workflows that streamlined the sales/contract process
Before 2010
Others
- Navy (3 years). Honorably discharged. Attained rank of E6 in short enlistment.
- Worked on the flight deck of an air craft carrier (Saratoga)
- Visited the Mediterranean
- USAA
- Tech lead
- Intranet apps
- ASP - Jscript on the server


Home
About
Donate
Green New Deal
Carbon Connections
Contact
Search
Find me
Show level of government:
Local
County
State
Federal


Function: SB-EXT:RUN-PROGRAM¶
RUN-PROGRAM creates a new process specified by PROGRAM. ARGS are passed as the arguments to the program.
The program arguments and the environment are encoded using the default external format for streams.
RUN-PROGRAM will return a PROCESS structure. See the CMU Common Lisp Users Manual for details about the PROCESS structure.
Notes about Unix environments (as in the :ENVIRONMENT and :ENV args):
- The SBCL implementation of RUN-PROGRAM, like Perl and many other programs, but unlike the original CMU CL implementation, copies the Unix environment by default.
- Running Unix programs from a setuid process, or in any other situation where the Unix environment is under the control of someone else, is a mother lode of security problems. If you are contemplating doing this, read about it first. (The Perl community has a lot of good documentation about this and other security issues in script-like programs.)
The &KEY arguments have the following meanings: :ENVIRONMENT a list of STRINGs describing the new Unix environment (as in “man environ”). The default is to copy the environment of the current process. :ENV an alternative lossy representation of the new Unix environment, for compatibility with CMU CL :SEARCH Look for PROGRAM in each of the directories in the child’s $PATH environment variable. Otherwise an absolute pathname is required. :WAIT If non-NIL (default), wait until the created process finishes. If NIL, continue running Lisp until the program finishes. :PTY (not supported on win32) Either T, NIL, or a stream. Unless NIL, the subprocess is established under a PTY. If :pty is a stream, all output to this pty is sent to this stream, otherwise the PROCESS-PTY slot is filled in with a stream connected to pty that can read output and write input. :INPUT Either T, NIL, a pathname, a stream, or :STREAM. T: the standard input for the current process is inherited. NIL: /dev/null (nul on win32) is used. pathname: the specified file is used. stream: all the input is read from that stream and sent to the subprocess. :STREAM: the PROCESS-INPUT slot is filled in with a stream that sends its output to the process. Defaults to NIL. :IF-INPUT-DOES-NOT-EXIST (when :INPUT is the name of a file) can be one of: :ERROR to generate an error :CREATE to create an empty file NIL (the default) to return NIL from RUN-PROGRAM :OUTPUT Either T, NIL, a pathname, a stream, or :STREAM. T: the standard output for the current process is inherited. NIL: /dev/null (nul on win32) is used. pathname: the specified file is used. stream: all the output from the process is written to this stream. :STREAM: the PROCESS-OUTPUT slot is filled in with a stream that can be read to get the output. Defaults to NIL. :ERROR Same as :OUTPUT, additionally accepts :OUTPUT, making all error output routed to the same place as normal output. Defaults to :OUTPUT. :IF-OUTPUT-EXISTS (when :OUTPUT is the name of a file) can be one of: :ERROR (the default) to generate an error :SUPERSEDE to supersede the file with output from the program :APPEND to append output from the program to the file NIL to return NIL from RUN-PROGRAM, without doing anything :IF-ERROR-EXISTS Same as :IF-OUTPUT-EXISTS, controlling :ERROR output to files. Ignored when :ERROR :OUTPUT. Defaults to :ERROR. :STATUS-HOOK This is a function the system calls whenever the status of the process changes. The function takes the process as an argument. :EXTERNAL-FORMAT The external-format to use for :INPUT, :OUTPUT, and :ERROR :STREAMs. :DIRECTORY Specifies the directory in which the program should be run. NIL (the default) means the directory is unchanged.
Windows specific options: :ESCAPE-ARGUMENTS (default T) Controls escaping of the arguments passed to CreateProcess.
Lambda list¶
(sb-impl::program sb-impl::args &key sb-impl::env sb-impl::environment sb-impl::wait search
sb-impl::pty sb-impl::input sb-impl::if-input-does-not-exist sb-impl::output
sb-impl::if-output-exists error sb-impl::if-error-exists sb-impl::status-hook
sb-impl::external-format directory)


The Demand Curve Analyzer is designed to assist clinicians and researchers in conducting behavior economic analyses while also providing more accessible options for these calculations. Demand Curve Analyzer fits respective parameters using differential evolution, a robust metaheuristic process for optimizing model performance. At present, only a single series may be fitted at a time. All methods are performed "behind the scenes", faciliating model fitting while retaining a simple, spreadsheet-based interface. This project is fully open-sourced under a GPL-license (v3) and all source code is completely available.
Published:
Gilroy, S. P., Kaplan, B. A., Reed, D. D., Koffarnus, M. N. & Hantula, D. A. (2018). The Demand Curve Analyzer: Behavioral economic software for applied researchers. Journal of the Experimental Analysis of Behavior. doi: 10.1002/jeab.479
This web-app automates the fitting of the Exponential and Exponentiated models of operant demand (with the Exponential model as the default).
Demand curve analysis is performed by providing least 3 pairs (x and y) of Pricing and Consumption data in the control below. At least three pairs of data are necessary to perform any type of modeling (at the extreme minimum).
Prices (x) and Consumption (y) values can be any positive real number (i.e., greater or equal to 0).
The Demand Curve Analyzer (Web) uses the following tools to function:
Differential Evolution - Github
Random.js (MIT Licensed) - Github
Math.js (Apache 2.0 Licensed) - Github
Jquery (MIT Licensed) - Github


Before you can mark a student post it has to be allocated as an answer to one of the specified questions.
This allocation is done either automatically by BIM or manually be a teacher.
The "Change allocation to" drop box provides a list of the question titles for all the questions not yet answered by this student. If you select one of these question titles, the post will be reallocated to that question.


Class DataSourceBase
Base class for all datasources such as TableDataSource.
Inheritance
Inherited Members
Namespace: FastReport.Data
Assembly: FastReport.OpenSource.dll
Syntax
public abstract class DataSourceBase : Column, IFRSerializable, IParent
Constructors
DataSourceBase()
Initializes a new instance of the DataSourceBase class with default settings.
Declaration
public DataSourceBase()
Fields
currentRow
Declaration
protected object currentRow
Field Value
| Type | Description |
|---|---|
| System.Object |
Properties
BindableControl
This property is not relevant to this class.
Declaration
public ColumnBindableControl BindableControl { get; set; }
Property Value
| Type | Description |
|---|---|
| ColumnBindableControl |
Calculated
This property is not relevant to this class.
Declaration
public bool Calculated { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Boolean |
CurrentRow
Gets the current data row.
Declaration
public object CurrentRow { get; }
Property Value
| Type | Description |
|---|---|
| System.Object |
Remarks
This property is updated when you call the Next() method.
CurrentRowNo
Gets an index of current data row.
Declaration
public int CurrentRowNo { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Int32 |
Remarks
You should initialize the datasource by the Init method before using this property.
This property is updated when you call the Next() method.
CustomBindableControl
This property is not relevant to this class.
Declaration
public string CustomBindableControl { get; set; }
Property Value
| Type | Description |
|---|---|
| System.String |
DataType
This property is not relevant to this class.
Declaration
public Type DataType { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Type |
Expression
This property is not relevant to this class.
Declaration
public string Expression { get; set; }
Property Value
| Type | Description |
|---|---|
| System.String |
ForceLoadData
Forces loading of data for this datasource.
Declaration
public bool ForceLoadData { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Boolean |
Remarks
This property is false by default. Set it to true if you need to reload data each time when the datasource initialized. Note that this may slow down the performance.
Format
This property is not relevant to this class.
Declaration
public ColumnFormat Format { get; set; }
Property Value
| Type | Description |
|---|---|
| ColumnFormat |
HasMoreRows
Gets a value indicating that datasource has more rows, that is the CurrentRowNo is less than the RowCount.
Declaration
public bool HasMoreRows { get; }
Property Value
| Type | Description |
|---|---|
| System.Boolean |
Remarks
You should initialize the datasource by the Init method before using this property.
Usually this property is used with the following code block:
dataSource.Init();
while (dataSource.HasMoreRows)
{
// do something...
dataSource.Next();
}
Item[Column]
Gets data stored in a specified column.
Declaration
public object this[Column column] { get; }
Parameters
| Type | Name | Description |
|---|---|---|
| Column | column | The column. |
Property Value
| Type | Description |
|---|---|
| System.Object | The column's value. |
Remarks
You should initialize the datasource by the Init method before using this property.
Item[String]
Gets data stored in a specified column.
Declaration
public object this[string columnAlias] { get; }
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | columnAlias | Alias of a column. |
Property Value
| Type | Description |
|---|---|
| System.Object | The column's value. |
Remarks
You should initialize the datasource by the Init method before using this property.
RowCount
Gets a number of data rows in this datasource.
Declaration
public int RowCount { get; }
Property Value
| Type | Description |
|---|---|
| System.Int32 |
Remarks
You should initialize the datasource by the Init method before using this property.
Methods
Deserialize(FRReader)
Deserializes the object.
Declaration
public override void Deserialize(FRReader reader)
Parameters
| Type | Name | Description |
|---|---|---|
| FRReader | reader | Reader object. |
Overrides
Remarks
Do not call this method directly. You should override it if you are developing a new component for FastReport.
This method is called when the object needs to restore the state. It may happen when:
- loading the report from a file or stream;
- loading the report from the designer's undo buffer;
- assigning another object to this object using the Assign(Base) or AssignAll(Base) methods;
- loading the object from the designer's clipboard;
EnsureInit()
Initializes the data source if it is not initialized yet.
Declaration
public void EnsureInit()
First()
Navigates to the first row.
Declaration
public void First()
Remarks
You should initialize the datasource by the Init method before using this method.
GetValue(Column)
Gets data stored in a specified column.
Declaration
protected abstract object GetValue(Column column)
Parameters
| Type | Name | Description |
|---|---|---|
| Column | column | The column. |
Returns
| Type | Description |
|---|---|
| System.Object | An object that contains the data. |
GetValue(String)
Gets data stored in a specified column.
Declaration
protected virtual object GetValue(string alias)
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | alias | The column alias. |
Returns
| Type | Description |
|---|---|
| System.Object | An object that contains the data. |
Init()
Initializes this datasource.
Declaration
public void Init()
Remarks
This method fills the table with data. You should always call it before using most of datasource properties.
Init(DataSourceBase)
Initializes this datasource and filters data rows according to the master-detail relation between this datasource and parentData.
Declaration
public void Init(DataSourceBase parentData)
Parameters
| Type | Name | Description |
|---|---|---|
| DataSourceBase | parentData | Parent datasource. |
Remarks
To use master-detail relation, you must define the Relation object that describes the relation, and add it to the Report.Dictionary.Relations collection.
Init(DataSourceBase, String, SortCollection)
Initializes this datasource and filters data rows according to the master-detail relation between this datasource and parentData. Also applies the specified filter and sorts the rows.
Declaration
public void Init(DataSourceBase parentData, string filter, SortCollection sort)
Parameters
| Type | Name | Description |
|---|---|---|
| DataSourceBase | parentData | Parent datasource. |
| System.String | filter | The filter expression. |
| SortCollection | sort | The collection of sort descriptors. |
Remarks
To use master-detail relation, you must define the Relation object that describes the relation, and add it to the Report.Dictionary.Relations collection.
Init(Relation, String, SortCollection)
Initializes this datasource and filters data rows according to the master-detail relation. Also applies the specified filter and sorts the rows.
Declaration
public void Init(Relation relation, string filter, SortCollection sort)
Parameters
| Type | Name | Description |
|---|---|---|
| Relation | relation | The master-detail relation. |
| System.String | filter | The filter expression. |
| SortCollection | sort | The collection of sort descriptors. |
Remarks
To use master-detail relation, you must define the Relation object that describes the relation, and add it to the Report.Dictionary.Relations collection.
Init(String)
Initializes this datasource and applies the specified filter.
Declaration
public void Init(string filter)
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | filter | The filter expression. |
Init(String, SortCollection)
Initializes this datasource, applies the specified filter and sorts the rows.
Declaration
public void Init(string filter, SortCollection sort)
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | filter | The filter expression. |
| SortCollection | sort | The collection of sort descriptors. |
InitializeComponent()
Initializes the object before running a report.
Declaration
public override void InitializeComponent()
Overrides
Remarks
This method is used by the report engine, do not call it directly.
InitSchema()
Initializes the datasource schema.
Declaration
public abstract void InitSchema()
Remarks
This method is used to support the FastReport.Net infrastructure. Do not call it directly.
LoadData(ArrayList)
Loads the datasource with data.
Declaration
public abstract void LoadData(ArrayList rows)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Collections.ArrayList | rows | Rows to fill with data. |
Remarks
This method is used to support the FastReport.Net infrastructure. Do not call it directly.
Next()
Navigates to the next row.
Declaration
public void Next()
Remarks
You should initialize the datasource by the Init method before using this method.
Prior()
Navigates to the prior row.
Declaration
public void Prior()
Remarks
You should initialize the datasource by the Init method before using this method.
Serialize(FRWriter)
Serializes the object.
Declaration
public override void Serialize(FRWriter writer)
Parameters
| Type | Name | Description |
|---|---|---|
| FRWriter | writer | Writer object. |
Overrides
Remarks
Do not call this method directly. You should override it if you are developing a new component for FastReport.
This method is called when the object needs to save the state. It may happen when:
- saving the report to the file or stream;
- saving the report to the designer's undo buffer;
- assigning the object to another object using the Assign(Base) or AssignAll(Base) methods;
- saving the object to the designer's clipboard;
- saving the object to the preview (when run a report).
Events
Load
Occurs when the FastReport engine loads data source with data.
Declaration
public event EventHandler Load
Event Type
| Type | Description |
|---|---|
| System.EventHandler |
Remarks
Use this event if you want to implement load-on-demand. Event handler must load the data into the data object which this datasource is bound to (for example, the TableDataSource uses data from the DataTable object bound to the Table property).


We take your privacy seriously, and as such, this document is designed to clearly outline what kind of data LinuxServer.io collects, and how it uses it. Personal information is any data with which a user (you) could be personally identified.
All data collected on this website (linuxserver.io), its blog (blog.linuxserver.io) and its forum (discourse.linuxserver.io) is processed by LinuxServer's Data Protection Officer.
The level of data that LinuxServer.io collects is dependent on which site you visit. Some of this data is classified as Personally Identifiable Information - data that can be directly linked to you as a person or entity. Not all information logged or obtained by LinuxServer.io is personally identifiable.
The data collected by LinuxServer.io is used to help improve its services to its users. Details such as IP address (broad geolocation), referral websites, and device type helps LinuxServer.io understand on a broad basis where its readers/users are coming from, how long they stay, and what kind of content they gravitate to. If you sign up to the forum, the email address you provide will be used for login and password recovery purposes. No data collected by LinuxServer.io is used to tailor specific user journeys for any individual or entity. You data is not used for marketing purposes and will not be used to attempt to sell products to you.
All analytical data is stored on a privately hosted server provided by Hetzner in a secure database. Only the Data Protection Officer has direct access to this data via the database. The data is made available to select LinuxServer.io staff via its analytics web interface. Forum-related data is stored as part of the forum database, which is secured and rendered inaccessible to those without the required credentials.
None of the data collected and used by LinuxServer.io is accessible by any third party. We do not sell your data to any third-party. We never will.
LinuxServer.io provides an API that retrieves the pull count of Docker images hosted on Docker Hub. This data is anonymous and can not be used to identify an individual user.
When browsing to any site owned by LinuxServer.io, a web access log is generated by the underlying web server and/or software running in it. These logs contain information such as:
Cookies are small pieces of data that reside in your web browser. LinuxServer.io uses analytical cookies to identify you as a "session user" in order for your journey to be tracked when you browse the LinuxServer.io blog. The content of this cookie does not contain any personally identifiable information. It does, however, link your page views to your anonymised IP address.
| Cookie Name | Usage |
|---|---|
| _pk_id | A unique identifer randomly generated which is used by the analytics to track your journey through the blog. |
| _pk_ses | A session identifier - used in conjunction with your analytics identifier. |
| _pk_ref | |
| _pk_cvar |
Disabling cookies on the Linuxserver.io website and blog will not affect your ability to consume content. Disabling cookies on the Linuxserver.io forum may affect your ability to remain signed in.
As part of the registration process for the forum, express consent must be given by you before completion allowing LinuxServer.io to use the data you provide to contact you if required. You may at any time revoke consent for LinuxServer.io to contact you regarding updates to its services.
You have the right to request some or all of the data that LinuxServer.io holds about you. You can do this by contacting LinuxServer.io's Data Protection Officer (outlined below). LinuxServer.io will ensure to provide you with any personally identifiable information held about you. This does not include analytical data used for blog tracking as all analytical data is anonymised. LinuxServer.io holds very little personally identifiable information about its users - if you request this data, you should expect to receive a relatively small amount of data back.
In accordance with the General Data Protection Regulation (GDPR), LinuxServer.io processes all data as both a Processor and as a Controller. If you wish to contact LinuxServer.io's Data Protection Officer regarding your data, you can email them at<EMAIL_ADDRESS>Contact can be made in order to:
LinuxServer.io provides a means for its users to donate via the Open Collective. Any donations/payments made to LinuxServer.io will include the payment data supplied to Open Collective. The LinuxServer.io team maintains no copies of transaction data made via the Open Collective.


things to love about Amsterdam
- Dutchies - the people on the bikes
- Bridges and the metal railings
- Bikes, bike paths, flowers on bikes, more than 2 people on a bike
- Oliebollen in Christmas time
- The complete and shameless self
LAST NIGHT I RAN INTO MY PARENTS
Last night I ran into my parents,
two pale shadows inclining towards
each other in the glow of a street light.
Judging by their happiness I hadn’t yet
been born. They were young and very much in love.
A great sadness weighed me down,
knowing how the story would unfold.
He whispered something and she laughed out loud.
He roared with laughter as he still often does.
Briefly we exchanged civilities
and then we went our separate ways.
‘Just you wait’, I called out after them,
‘you’ll see, our paths will cross.’ They didn’t speak.
Arm in arm they turned the corner of the street.
what to do now?
- get a flight
- get a bike
- be a dutchie


Mac OS X interface for Aspell.
Version 2.5
Introduction
This is a release of cocoAspell package. This version supports Mac OS 10.11 and higher. If you are using any previous version of Mac OS X, you cannot use this software.
Installing the software
The Installer should do all the work. You will need an Administrator user name and password to install the software.
The distribution contains three pieces:
Once the installation is complete open System Preferences, select Spelling, and enable the dictionaries
Installing a dictionary
English dictionary is installed by default. Additional dictionaries can be downloaded from ftp://ftp.gnu.org/gnu/aspell/dict. The site contains dictionaries for over 90 languages. They are organized in folders by the two-letter language codes. Each folder contains a file with a name that looks like this (this is the German dictionary)
aspell-de-0.50-2.tar.bz2
Download the file, uncompress it (e.g., you may use StuffIt Expander to do that), and place the resulting folder into /Library/Application Support/cocoAspell/. Alternatively, you may install the dictionary into your own Library folder: ~/Library/Application Support/cocoAspell/. Here "~" stands for your home folder.
In our example, the installed dictionary will be:
/Library/Application Support/cocoAspell/aspell-de-0.50-2
Some of the languages have multiple dictionaries (i.e., multiple files on the ftp site), any of them should work with this version of cocoAspell. For example, suppose the German dictionary folder has three versions
I would suggest you choose the dictionary using the following rule: prefer files that start with "aspell6" over files that start with "aspell5" over files that start with simply "aspell". If you are interested in more details about the differences, see the README file at the ftp site.
Unfortunately, I do not have any information about the quality of individual dictionaries. If you have any questions, please contact the author of the particular dictionary. Generally, you may find the contact information in the ReadMe file in the dictionary folder.


[gecode-users] Gecode BAB Questions
Jean-Noël Monette
jean-noel.monette at it.uu.se
Wed Apr 3 10:12:44 CEST 2013
Hello Dean,
I think that the problem is that you want to have a solution even if
some variables have an empty domain. Unfortunately(?), in constraint
programming and in Gecode in particular, as soon as any variable of the
model has an empty domain, the solver considers it as a failure. In your
model, if I understand correctly (I did not read the code), you want to
get a solution for X, even if one of the Y has an empty domain, which is
not possible as such.
One workaround (maybe not the best one?) is to add a "dummy" value to
the domain of each of the Y, which is not in the domain of X, so that if
everything else is ruled out from the domain of some of the Y, they can
still take that value, to avoid triggering a failure. This has the
downside that all the constraints on Y (except the one linking Y and X)
must be modified so that they do not remove the dummy value.
Regarding the number of solution, I think that if you care about all the
solutions, you should not use the BAB engine but the DFS. BAB is to look
for a best solution. The number of solutions visited before reaching the
best one may very well depend on the branching strategy. Using DFS and
looking for all solutions, you should find all the solutions,
independently from the cost (but again the order in which the solutions
are provided may depend on the branching strategy).
Best,
JN
On 04/03/2013 09:52 AM, Christian Schulte wrote:
> Hi Dean,
>
> I tried to understand what you are doing but failed. This is not really a
> Gecode issue but an issue how you model your problem. In particular your
> statement that only six solutions are found while there are ten is a little
> strange. What you could try, though, is: take the values for the variables
> you believe are solutions which are missing and constrain your variables by
> hand to these values to verify whether they are solutions according to your
> model. Then try to remove some constraints to see which of the constraints
> rule out your intended solutions.
>
> Sorry for not being more helpful
> Christian
>
> --
> Christian Schulte, Professor of Computer Science, KTH,
> www.ict.kth.se/~cschulte/
>
>
> -----Original Message-----
> From: users-bounces at gecode.org [mailto:users-bounces at gecode.org] On Behalf
> Of Dean Hiller
> Sent: Thursday, March 28, 2013 5:19 PM
> To: users at gecode.org
> Subject: [gecode-users] Gecode BAB Questions
>
> I am very new to constraint programming, but by using the MPG have been able
> to develop a fairly large Gecode application in a relatively short period of
> time. Due to my lack of constraint programming knowledge, I may not have
> selected the best methods for solving my particular problem, but what I have
> done appears to work with two exceptions which are shown in the attached
> program.
> This program is the minimum program I could generate to show what I am doing
> and to replicate my two problems.
>
> In the attached program, I have an IntVar X which is to receive ordered
> values from Y0, Y1, and Y2 along with an indication of from which Y the
> value came.
>
> The first problem I am having is that the program stops after finding 6 of
> the 10 possible solutions and I don't understand how to debug this problem.
>
> The second problem I am having is that the program fails to find any
> solutions if the constraints on one of the Y variables results in it not
> having any solutions even though there are other solutions for X.
>
> I have this problem with both the 3.7.3 release and the
> 4.0.0 release.
>
> I would appreciate any assistance you can provide.
>
> Thanks,
> Dean
>
> #include <gecode/int.hh>
> #include <gecode/search.hh>
> #include <gecode/minimodel.hh>
>
> using namespace Gecode;
>
> typedef struct Y_s
> {
> IntVar nY;
> } Y;
>
> class GecodeTest3 : public Space {
> protected:
> int m_nMin;
> int m_nMax;
> int m_nNumY;
> IntVar m_nX;
> IntVarArray m_naX;
> BoolVarArray m_baX;
> int m_nYIndex;
> IntVar m_nY0;
> IntVar m_nY1;
> IntVar m_nY2;
> IntVar *m_vY[3];
> IntVar m_nCost;
> IntVarArray m_nValue;
> IntArgs m_nC;
>
> public:
> void AddY(int* naY, int nSize)
> {
> m_nYIndex++;
> *m_vY[m_nYIndex] = IntVar(*this, m_nMin, m_nMax);
> ConstrainY(naY, nSize);
> rel(*this, m_naX[m_nYIndex] == *m_vY[m_nYIndex]);
> rel(*this, m_baX[m_nYIndex] == (m_naX[m_nYIndex] == m_nX));
> branch(*this, *m_vY[m_nYIndex], INT_VAL_MIN());
> }
>
> void ConstrainY(int *naY, int nSize)
> {
> IntArgs nTemp;
> for (int i = 0; i < nSize; i++)
> {
> nTemp << naY[i];
> }
> IntSet nsTemp(nTemp);
> dom(*this, *m_vY[m_nYIndex], nsTemp);
> }
>
> int GetX(void)
> {
> return m_nX.val();
> }
>
> int GetWhichY(void)
> {
> return m_nValue[0].val();
> }
>
> int GetCost(void)
> {
> return m_nCost.val();
> }
>
> GecodeTest3(int nMin, int nMax, int nNumY) :
> m_nMin(nMin), m_nMax(nMax), m_nNumY(nNumY), m_nYIndex(-1)
> {
> if (m_nMin < 0)
> {
> std::cout << "m_nMin must not be negative" <<
> std::endl;
> }
> m_vY[0] = &m_nY0;
> m_vY[1] = &m_nY1;
> m_vY[2] = &m_nY2;
> m_nX = IntVar(*this, m_nMin, m_nMax);
> m_naX = IntVarArray(*this, m_nNumY, m_nMin, m_nMax);
> m_baX = BoolVarArray(*this, m_nNumY, 0, 1);
> m_nC << 1;
> m_nC << m_nNumY;
> int nTemp = m_nNumY * m_nMax + m_nNumY;
> m_nCost = IntVar(*this, 0, nTemp);
> nTemp = m_nMax > nNumY ? m_nMax : nNumY;
> m_nValue = IntVarArray(*this, 2, 0, nTemp);
> rel(*this, m_nX == min(m_naX));
> element(*this, m_baX, m_nValue[0], 1);
> rel(*this, m_nValue[1] == m_nX);
> linear(*this, m_nC, m_nValue, IRT_EQ, m_nCost);
> branch(*this, m_naX, INT_VAR_MIN_MIN(), INT_VAL_MIN());
> branch(*this, m_nX, INT_VAL_MIN());
> branch(*this, m_nValue[0], INT_VAL_MIN());
> }
> // search support
> GecodeTest3(bool share, GecodeTest3& s) : Space(share, s) {
> // s.print(std::cout);
> m_vY[0] = &m_nY0;
> m_vY[1] = &m_nY1;
> m_vY[2] = &m_nY2;
> m_nX.update(*this, share, s.m_nX);
> m_naX.update(*this, share, s.m_naX);
> m_baX.update(*this, share, s.m_baX);
> m_nCost.update(*this, share, s.m_nCost);
> m_nY0.update(*this, share, s.m_nY0);
> m_nY1.update(*this, share, s.m_nY1);
> m_nY2.update(*this, share, s.m_nY2);
> m_nValue.update(*this, share, s.m_nValue);
> for (int i = 0; i < 2; i++)
> {
> m_nC << s.m_nC[i];
> }
> }
> virtual Space* copy(bool share) {
> return new GecodeTest3(share,*this);
> }
> virtual void constrain(const Space& _b)
> {
> const GecodeTest3& b = static_cast<const GecodeTest3&>(_b);
> rel(*this, m_nCost > b.m_nCost);
> }
>
> // print solution
> void print(std::ostream& os) const {
> os << "m_nX: " << m_nX << std::endl;
> for (int i = 0; i < m_naX.size(); i++)
> {
> os << "m_naX[" << i << "]: " << m_naX[i] << " ";
> os << "m_baX[" << i << "]: " << m_baX[i] << " ";
> os << std::endl;
> }
> for (int i = 0; i < m_nC.size(); i++)
> {
> os << "m_nC[" << i << "]: " << m_nC[i] <<
> std::endl;
> }
> for (int i = 0; i < m_nValue.size(); i++)
> {
> os << "m_nValue[" << i << "]: " << m_nValue[i] <<
> std::endl;
> }
> os << "m_nCost: " << m_nCost << std::endl;
> }
> };
>
> void BuildAndSolve(bool b2Y1)
> {
> int Y0[3] = {1, 3, 7};
> int Y1[3] = {2, 4, 5};
> int Y2[4] = {4, 6, 8, 9};
> int Y1a[3] = {1, 3, 8};
>
> // create model and search engine
> GecodeTest3 *m = new GecodeTest3(0, 20, 3);
> m->AddY(Y0, sizeof(Y0)/sizeof(int));
> m->AddY(Y1, sizeof(Y1)/sizeof(int));
> if (b2Y1)
> {
> m->ConstrainY(Y1a, sizeof(Y1a)/sizeof(int));
> }
> m->AddY(Y2, sizeof(Y2)/sizeof(int));
> // m->print(std::cout);
> bool bFailed = true;
> BAB<GecodeTest3> e(m);
> GecodeTest3 *s;
> while (((s = e.next()) != 0))
> {
> bFailed = false;
> // s->print(std::cout);
> int X = s->GetX();
> int whichY = s->GetWhichY();
> int nCost = s->GetCost();
> std::cout << "X=" << X << " from Y" << whichY << ". Cost="
> << nCost << std::endl;
> // std::cout << std::endl;
> delete s;
> }
>
> if (bFailed)
> {
> std::cout << "Model failed" << std::endl;
> }
>
> Search::Statistics stat = e.statistics();
> std::cout << "Search Statistics" << std::endl;
> std::cout << " Propagations: " << stat.propagate << std::endl;
> std::cout << " Nodes: " << stat.node << std::endl;
> std::cout << " Failures: " << stat.fail << std::endl;
> std::cout << " Depth: " << stat.depth << std::endl;
> int nPeakMemoryKB = static_cast<int>((stat.memory+1023) / 1024);
> std::cout << " Peak Memory " << nPeakMemoryKB << "KB" <<
> std::endl;
> std::cout << std::endl;
> delete m;
> return;
> }
>
> int GecodeTest3Main(int argc, char* argv[]) {
> std::cout << "One Y1 constraint" << std::endl;
> BuildAndSolve(false);
> std::cout << "Two Y1 constraints" << std::endl;
> BuildAndSolve(true);
> return 0;
> }
>
> Sample output:
> One Y1 constraint
> X=1 from Y0. Cost=3
> X=2 from Y1. Cost=7
> X=3 from Y0. Cost=9
> X=4 from Y1. Cost=13
> X=4 from Y2. Cost=14
> X=5 from Y1. Cost=16
> Search Statistics
> Propagations: 149
> Nodes: 21
> Failures: 5
> Depth: 3
> Peak Memory 8KB
>
> Two Y1 constraints
> Model failed
> Search Statistics
> Propagations: 0
> Nodes: 0
> Failures: 1
> Depth: 0
> Peak Memory 4KB
>
> _______________________________________________
> Gecode users mailing list
> users at gecode.org
> https://www.gecode.org/mailman/listinfo/gecode-users
>
>
> _______________________________________________
> Gecode users mailing list
> users at gecode.org
> https://www.gecode.org/mailman/listinfo/gecode-users
>
More information about the users
mailing list


There are {{topAtoms}} {{(topAtoms == 1 ? atom?.name : atom?.plural)}} in the top {{frameSize|toWords}} frame. How many {{atom?.plural}} are in the bottom {{frameSize|toWords}} frame?
Hint: the bottom {{frameSize|toWords}} frame has one {{countType}}.
|
{{topAtoms}}
|
|
|


View Photos of 450-HP Chevy E-10 Pickup Concept
by Car and DriverTech borrowed from the Chevrolet Bolt EV and fitted to a 1962 C-10 brings about a modern take on the hot-rod pickup.
Tech borrowed from the Chevrolet Bolt EV and fitted to a 1962 C-10 brings about a modern take on the hot-rod pickup.


Live a happier life, one good habit at a time.
Start Good Habits
Refresh your life with new good habits. Habeats helps you start small and build your way up.
Gain Motivation
Feel empowered to complete your habits as you build up streaks and unlock rewards.

Available 2019
© William Park 2019 | Habeats.


Government failing to deliver on the economy
by New Zealand National PartyPaul Goldsmith - Finance
25 November 2019
The economy looks set to continue to slow with yet another downgrade to New Zealand’s growth projections, National’s Finance spokesperson Paul Goldsmith says.
“ASB Chief Economist Nick Tuffley is now forecasting annual growth of less than 2 per cent for the year to March 2020, which is made up almost entirely by population growth.
“Tuffley is absolutely right when he says ‘growth can and should be stronger’. Our export prices are at historically high levels and so far have been largely unaffected by slowing international growth, interest rates are low and the Government inherited big surpluses.
“Yet our growth per person, which is the true measure of the progress we are making as a country, is currently only 0.5 per cent. That is well behind most of the OECD and below the 1.7 per cent average during the last five years under National.
“The economy has slowed primarily because New Zealanders lack confidence in this Government’s economic policies, policies that have driven up costs and created massive uncertainty. The Government has also utterly failed on delivering its flagship policies, most notably KiwiBuild.
“The Government should be stimulating the economy with much needed tax relief for hardworking Kiwis and by delivering the infrastructure New Zealand desperately needs.
“National will index tax thresholds to inflation, repeal the Regional Fuel Tax and get on with building the roads this Government has either cancelled or postponed. We have also floated other ideas for stimulating the economy such as accelerated depreciation for business investment or tax relief for small businesses.
“If National is elected in 2020 we’ll stop the excuses and get on with implementing our positive economic plan to restore business confidence and revive the economy.”
ends