~--- ../tmp/ldapclient.1m.txt Fri Apr 4 14:18:56 2008
+++ ldapclient.1m.txt.standalone Fri Apr 25 19:17:08 2008
@@ -1,733 +1,813 @@
System Administration Commands ldapclient(1M)
NAME
ldapclient - initialize LDAP client machine or output an
LDAP client profile in LDIF format
SYNOPSIS
/usr/sbin/ldapclient [-v | -q] init [-a profileName=profileName]
[-a domainName=domain] [-a proxyDN=proxyDN] [-a proxyPassword=password]
- [-a certificatePath=path] LDAP_server[:port_number]
+ [-a authenticationMethod=authenticationMethod] [-a certificatePath=path]
+ [-D bindDN] [-w bindPassword] [-j passwdFile] [-y passwdFile]
+ LDAP_server[:port_number]
/usr/sbin/ldapclient [-v | -q] manual [-a attrName=attrVal]
/usr/sbin/ldapclient [-v | -q] mod [-a attrName=attrVal]
/usr/sbin/ldapclient [-v | -q] list
/usr/sbin/ldapclient [-v | -q] uninit
/usr/sbin/ldapclient [-v | -q] genprofile -a profileName=profileName
[-a attrName=attrVal]
DESCRIPTION
The ldapclient utility can be used to:
o initialize LDAP client machines
o restore the network service environment on LDAP
clients
o list the contents of the LDAP client cache in human
readable format.
The init form of the ldapclient utility is used to initial-
ize an LDAP client machine, using a profile stored on an
LDAP server specified by LDAP_server. The LDAP client will
use the attributes in the specified profile to determine the
configuration of the LDAP client. Using a configuration pro-
file allows for easy installation of LDAP client and propa-
gation of configuration changes to LDAP clients. The
ldap_cachemgr(1M) utility will update the LDAP client confi-
guration when its cache expires by reading the profile. For
more information on the configuration profile refer to IETF
document A Configuration Schema for LDAP Based Directory
User Agents.
The manual form of the ldapclient utility is used to ini-
tialize an LDAP client machine manually. The LDAP client
will use the attributes specified on the command line. Any
unspecified attributes will be assigned their default
values. At least one server must be specified in the
defaultServerList or the preferredServerList attributes.The
domainName attribute must be specified if the client's
domainName is not set.
The mod form of the ldapclient utility is used to modify the
configuration of an LDAP client machine that was setup manu-
ally. This option modifies only those LDAP client configura-
tion attributes specified on the command line. The mod
option should only be used on LDAP clients that were ini-
tialized using the manual option.
Regardless of which method is used for initialization, if a
client is to be configured to use a proxy credentialLevel,
- proxy credentials must be provided using -a proxyDN=proxyD
+ proxy credentials must be provided using -a proxyDN=proxyDN
and -a proxyPassword=proxyPassword options. However, if -a
proxyPassword=proxyPassword is not specified, ldapclient
will prompt for it. Note that NULL passwords are not allowed
in LDAP. If a self credentialLevel is configured, authenti-
cationMethod must be sasl/GSSAPI.
If any file is modified during installation, it will be
backed up to /var/ldap/restore. The files that are typically
modified during initialization are:
o /etc/nsswitch.conf
o /etc/defaultdomain (if it exists)
o /var/yp/binding/`domainname` (for a NIS(YP) client)
o /var/nis/NISOLD_START (for a NIS+ client)
o /var/ldap/ldap_client_file (for an existing LDAP
client)
o /var/ldap/ldap_client_cred (for an existing LDAP
client)
ldapclient does not set up a client to resolve hostnames
using DNS. It simply copies /etc/nsswitch.ldap to
/etc/nsswitch.conf. If you prefer to use DNS for host reso-
lution, please refer to the DNS documentation for informa-
tion on setting up DNS. See resolv.conf(4). If you want to
use sasl/GSSAPI as the authentication method, you have to
use DNS for hosts and ipnodes resolution.
The list form of the ldapclient utility is used to list the
LDAP client configuration. The output will be human read-
able. LDAP configuration files are not guaranteed to be
human readable.
The uninit form of the ldapclient utility is used to unini-
tialize the network service environment, restoring it to the
state it was in prior to the last execution of ldapclient
using init or manual. The restoration will succeed only if
the machine was initialized with the init or manual form of
ldapclient, as it uses the backup files created by these
options.
The genprofile option is used to write an LDIF formatted
configuration profile based on the attributes specified on
the command line to standard output. This profile can then
be loaded into an LDAP server to be used as the client pro-
file, which can be downloaded by means of the ldapclient
init command. Loading the LDIF formatted profile to the
directory server can be done through ldapadd(1), or through
any server specific import tool. Note that the attributes
proxyDN, proxyPassword, certificatePath, and domainName are
not part of the configuration profile and thus are not per-
mitted.
You must have superuser privileges to run the ldapclient
command, except with the genprofile option.
To access the information stored in the directory, clients
can either authenticate to the directory, or use an unau-
thenticated connection. The LDAP client is configured to
have a credential level of either anonymous or proxy. In the
first case, the client does not authenticate to the direc-
tory. In the second case, client authenticates to the direc-
tory using a proxy identity. In the third case, client
authenticates to the directory using a Kerberos principal
that is mapped to an LDAP identity by the LDAP server. Refer
to the chapter on implementing security in the Sun ONE
Directory Server Administration Guide or your appropriate
directory server documentation for identity mapping details.
If a client is configured to use an identity, you can con-
figure which authentication method the client will use. The
LDAP client supports the following authentication methods:
none
simple
sasl/CRAM-MD5
sasl/DIGEST-MD5
sasl/GSSAPI
tls:simple
tls:sasl/CRAM-MD5
tls:sasl/DIGEST-MD5
Note that some directory servers may not support all of
these authentication methods. For simple, be aware that the
bind password will be sent in the clear to the LDAP server.
For those authentication methods using TLS (transport layer
security), the entire session is encrypted. You will need to
install the appropriate certificate databases to use TLS.
Commands
The following commands are supported:
init
Initialize client from a profile on a server.
manual
Manually initialize client with the specified attribute
values.
mod
Modify attribute values in the configuration file after
a manual initialization of the client.
list
Write the contents of the LDAP client cache to standard
output in human readable form.
uninit
Uninitialize an LDAP client, assuming that ldapclient
was used to initialize the client.
genprofile
Attributes
The following attributes are supported:
attributeMap
Specify a mapping from an attribute defined by a service
to an attribute in an alternative schema. This can be
used to change the default schema used for a given ser-
vice. The syntax of attributeMap is defined in the pro-
file IETF draft. This option can be specified multiple
times. The default value for all services is NULL. In
the example,
attributeMap: passwd:uid=employeeNumber
the LDAP client would use the LDAP attribute employ-
eeNumber rather than uid for the passwd service. This is
a multivalued attribute.
authenticationMethod
Specify the default authentication method used by all
services unless overridden by the serviceAuthentication-
Method attribute. Multiple values can be specified by
using a semicolon-separated list. The default value is
none. For those services that use credentialLevel and
credentialLevel is anonymous, this attribute is ignored.
Services such as pam_ldap will use this attribute, even
if credentialLevel is anonymous. The supported authenti-
cation methods are described above. If the authentica-
tionMethod is sasl/GSSAPI, the hosts and ipnodes of
/etc/nsswitch.conf must be configured with DNS support,
for example:
hosts: dns files
ipnodes: dns files
bindTimeLimit
The maximum time in seconds that a client should spend
performing a bind operation. Set this to a positive
integer. The default value is 30.
certificatePath
The certificate path for the location of the certificate
database. The value is the path where security database
files reside. This is used for TLS support, which is
specified in the authenticationMethod and serviceAuthen-
ticationMethod attributes. The default is /var/ldap.
credentialLevel
Specify the credential level the client should use to
contact the directory. The credential levels supported
are either anonymous or proxy. If a proxy credential
level is specified, then the authenticationMethod attri-
bute must be specified to determine the authentication
mechanism. Further, if the credential level is proxy and
at least one of the authentication methods require a
bind DN, the proxyDN and proxyPassword attribute values
must be set. If a self credential level is specified,
the authenticationMethod must be sasl/GSSAPI.
defaultSearchBase
Specify the default search base DN. There is no default.
The serviceSearchDescriptor attribute can be used to
override the defaultSearchBase for given services.
defaultSearchScope=one | sub
Specify the default search scope for the client's search
operations. This default can be overridden for a given
service by specifying a serviceSearchDescriptor. The
default is one level search.
defaultServerList
A space separated list of server names or server
addresses, either IPv4 or IPv6. If you specify server
names, be sure that the LDAP client can resolve the name
without the LDAP name service. You must resolve the LDAP
servers' names by using either files or dns. If the LDAP
server name cannot be resolved, your naming service will
fail.
The port number is optional. If not specified, the
default LDAP server port number 389 is used, except when
TLS is specified in the authentication method. In this
case, the default LDAP server port number is 636.
The format to specify the port number for an IPv6
address is:
[ipv6_addr]:port
To specify the port number for an IPv4 address, use the
following format:
ipv4_addr:port
If the host name is specified, use the format:
host_name:port
If you use TLS, the LDAP server's hostname must match
the hostname in the TLS certificate. Typically, the
hostname in the TLS certificate is a fully qualified
domain name. With TLS, the LDAP server host addresses
must resolve to the hostnames in the TLS certificate.
You must use files or dns to resolve the host address.
domainName
Specify the DNS domain name. This becomes the default
domain for the machine. The default is the current
domain name. This attribute is only used in client ini-
tialization.
followReferrals=true | false
Specify the referral setting. A setting of true implies
that referrals will be automatically followed and false
would result in referrals not being followed. The
default is true.
objectclassMap
Specify a mapping from an objectclass defined by a ser-
vice to an objectclass in an alternative schema. This
can be used to change the default schema used for a
given service. The syntax of objectclassMap is defined
in the profile IETF draft. This option can be specified
multiple times. The default value for all services is
NULL. In the example,
objectclassMap=passwd:posixAccount=unixAccount
the LDAP client would use the LDAP objectclass of
unixAccount rather than the posixAccount for the passwd
service. This is a multivalued attribute.
preferredServerList
Specify the space separated list of server names or
server addresses, either IPv4 or IPv6, to be contacted
before servers specified by the defaultServerList attri-
bute. If you specify server names, be sure that the LDAP
client can resolve the name without the LDAP name ser-
vice. You must resolve the LDAP servers' names by using
either files or dns. If the LDAP server name cannot be
resolved, your naming service will fail.
The port number is optional. If not specified, the
default LDAP server port number 389 is used, except when
TLS is specified in the authentication method. In this
case, the default LDAP server port number is 636.
The format to specify the port number for an IPv6
address is:
[ipv6_addr]:port
To specify the port number for an IPv4 address, use the
following format:
ipv4_addr:port
If the host name is specified, use the format:
host_name:port
If you use TLS, the LDAP server's hostname must match
the hostname in the TLS certificate. Typically, the
hostname in the TLS certificate is a fully qualified
domain name. With TLS, the LDAP server host addresses
must resolve to the hostnames in the TLS certificate.
You must use files or dns to resolve the host address.
profileName
Specify the profile name. For ldapclient init, this
attribute is the name of an existing profile which may
be downloaded periodically depending on the value of the
profileTTL attribute. For ldapclient genprofile, this is
the name of the profile to be generated. The default
value is default.
profileTTL
Specify the TTL value in seconds for the client informa-
tion. This is only relevant if the machine was initial-
ized with a client profile. If you do not want
ldap_cachemgr(1M) to attempt to refresh the LDAP client
configuration from the LDAP server, set profileTTL to 0
(zero). Valid values are either zero 0 (for no expira-
tion) or a positive integer in seconds. The default
value is 12 hours.
proxyDN
Specify the Bind Distinguished Name for the proxy iden-
tity. This option is required if the credential level is
proxy, and at least one of the authentication methods
requires a bind DN. There is no default value.
proxyPassword
Specify client proxy password. This option is required
if the credential level is proxy, and at least one of
the authentication methods requires a bind DN. There is
no default.
searchTimeLimit
Specify maximum number of seconds allowed for an LDAP
search operation. The default is 30 seconds. The server
may have its own search time limit.
serviceAuthenticationMethod
Specify authentication methods to be used by a service
in the form servicename:authenticationmethod, for exam-
ple:
pam_ldap:tls:simple
For multiple authentication methods, use a semicolon-
separated list. The default value is no service authen-
tication methods, in which case, each service would
default to the authenticationMethod value. The supported
authentications are described above.
Three services support this feature: passwd-cmd,
keyserv, and pam_ldap. The passwd-cmd service is used to
define the authentication method to be used by passwd(1)
to change the user's password and other attributes. The
keyserv service is used to identify the authentication
method to be used by the chkey(1) and newkey(1M) utili-
ties. The pam_ldap service defines the authentication
method to be used for authenticating users when
pam_ldap(5) is configured. If this attribute is not set
for any of these services, the authenticationMethod
attribute is used to define the authentication method.
This is a multivalued attribute.
serviceCredentialLevel
Specify credential level to be used by a service. Multi-
ple values can be specified in a space-separated list.
The default value for all services is NULL. The sup-
ported credential levels are: anonymous or proxy. At
present, no service uses this attribute. This is a mul-
tivalued attribute.
serviceSearchDescriptor
Override the default base DN for LDAP searches for a
given service. The format of the descriptors also allow
overriding the default search scope and search filter
for each service. The syntax of serviceSearchDescriptor
is defined in the profile IETF draft. The default value
for all services is NULL. This is a multivalued attri-
bute. In the example,
serviceSearchDescriptor=passwd:ou=people,dc=a1,dc=acme,dc=com?one
the LDAP client would do a one level search in
ou=people,dc=a1,dc=acme,dc=com rather than
ou=people,defaultSearchBase for the passwd service.
OPTIONS
The following options are supported:
-a
Specify attrName and its value.
-q
Quiet mode. No output is generated.
-v
Verbose output.
+ -D bindDN
+
+ Specifies an entry which has read permission to the
+ requested database.
+
+
+ -w bindPassword Password to be used for authenti-
+ cating the bindDN. If this param-
+ eter is missing, the command will
+ prompt for a password. NULL pass-
+ words are not supported in LDAP.
+
+ When you use -w bindPassword to
+ specify the password to be used
+ for authentication, the password
+ is visible to other users of the
+ system by means of the ps com-
+ mand, in script files or in shell
+ history.
+
+ If the value of "-" is supplied
+ as a password, the command will
+ prompt for a password.
+
+
+ -j passwdFile Specify a file containing the
+ password for the bind DN or the
+ password for the SSL client's key
+ database. To protect the
+ password, use this option in
+ scripts and place the password in
+ a secure file. This option is
+ mutually exclusive of the -w opt-
+ ion.
+
+
+ -y passwdFile Specify a file containing the
+ password for the proxy DN. To
+ protect the password, use this
+ option in scripts and place the
+ password in a secure file. This
+ option is mutually exclusive of
+ the -a proxyPassword option.
+
OPERANDS
The following operand is supported:
LDAP_server
An address or a name for the LDAP server from which the
profile will be loaded. The current naming service
specified in the nsswitch.conf file is used. Once the
- profile is loaded, thepreferredServerList and
+ profile is loaded, the preferredServerList and
defaultServerList specified in the profile are used.
EXAMPLES
Example 1 Setting Up a Client By Using the Default Profile
Stored on a Specified LDAP Server
The following example shows how to set up a client using the
default profile stored on the specified LDAP server. This
command will only be successful if either the credential
level in the profile is set to anonymous or the authentica-
tion method is set to none.
example# ldapclient init <IP_ADDRESS>
Example 2 Setting Up a Client By Using the simple Profile
Stored on a Specified LDAP Server
The following example shows how to set up a client using the
simple profile stored on the specified LDAP server. The
domainname is set to xyz.mycompany.com and the proxyPassword
is secret.
example# ldapclient init -a profileName=simple \
-a domainName=xyz.mycompany.com \
-a proxyDN=cn=proxyagent,ou=profile,dc=xyz,dc=mycompany,dc=com \
-a proxyPassword=secret '['fe80::a00:20ff:fea3:388']':386
Example 3 Setting Up a Client Using Only One Server
The following example shows how to set up a client using
only one server. The authentication method is set to none,
and the search base is dc=mycompany,dc=com.
example# ldapclient manual -a authenticationMethod=none \
-a defaultSearchBase=dc=mycompany,dc=com \
-a defaultServerList=<IP_ADDRESS>
Example 4 Setting Up a Client Using Only One Server That
Does Not Follow Referrals
The following example shows how to set up a client using
only one server. The credential level is set to proxy. The
authentication method of is sasl/CRAM-MD5, with the option
not to follow referrals. The domain name is
xyz.mycompany.com, and the LDAP server is running on port
number 386 at IP address <IP_ADDRESS>.
example# ldapclient manual \
-a credentialLevel=proxy \
-a authenticationMethod=sasl/CRAM-MD5 \
-a proxyPassword=secret \
-a proxyDN=cn=proxyagent,ou=profile,dc=xyz,dc=mycompany,dc=com \
-a defaultSearchBase=dc=xyz,dc=mycompany,dc=com \
-a domainName=xyz.mycompany.com \
-a followReferrals=false \
-a defaultServerList=<IP_ADDRESS>:386
Example 5 Using genprofile to Set Only the defaultSearchBase
and the Server Addresses
The following example shows how to use the genprofile com-
mand to set the defaultSearchBase and the server addresses.
example# ldapclient genprofile -a profileName=myprofile \
-a defaultSearchBase=dc=eng,dc=sun,dc=com \
-a "defaultServerList=<IP_ADDRESS> <IP_ADDRESS>:386" \
> myprofile.ldif
Example 6 Creating a Profile on IPv6 servers
The following example creates a profile on IPv6 servers
example# ldapclient genprofile -a profileName=eng \
-a credentialLevel=proxy \
-a authenticationMethod=sasl/DIGEST-MD5 \
-a defaultSearchBase=dc=eng,dc=acme,dc=com \
-a "serviceSearchDescriptor=passwd:ou=people,dc=a1,dc=acme,dc=com?one"\
-a preferredServerList= '['fe80::a00:20ff:fea3:388']' \
-a "defaultServerList='['fec0::111:a00:20ff:fea3:edcf']' \
'['fec0::111:a00:20ff:feb5:e41']'" > eng.ldif
Example 7 Creating a Profile That Overrides Every Default
Value
The following example shows a profile that overrides every
default value.
example# ldapclient genprofile -a profileName=eng \
-a credentialLevel=proxy -a authenticationMethod=sasl/DIGEST-MD5 \
-a bindTimeLimit=20 \
-a defaultSearchBase=dc=eng,dc=acme,dc=com \
-a "serviceSearchDescriptor=passwd:ou=people,dc=a1,dc=acme,dc=com?one"\
-a serviceAuthenticationMethod=pam_ldap:tls:simple \
-a defaultSearchScope=sub \
-a attributeMap=passwd:uid=employeeNumber \
-a objectclassMap=passwd:posixAccount=unixAccount \
-a followReferrals=false -a profileTTL=6000 \
-a preferredServerList=<IP_ADDRESS> -a searchTimeLimit=30 \
-a "defaultServerList=<IP_ADDRESS> <IP_ADDRESS> <IP_ADDRESS>" > eng.ldif
EXIT STATUS
The following exit values are returned:
0 The command successfully executed.
1 An error occurred. An error message is output.
2 proxyDN and proxyPassword attributes are required, but
they are not provided.
FILES
/var/ldap/ldap_client_cred
/var/ldap/ldap_client_file
Contain the LDAP configuration of the client. These
files are not to be modified manually. Their content is
not guaranteed to be human readable. Use ldapclient to
update them.
/etc/defaultdomain
System default domain name, matching the domain name of
the data in the LDAP servers. See defaultdomain(4).
/etc/nsswitch.conf
Configuration file for the name-service switch. See
nsswitch.conf(4).
/etc/nsswitch.ldap
Sample configuration file for the name-service switch
configured with LDAP and files.
ATTRIBUTES
See attributes(5) for descriptions of the following attri-
butes:
{{{____________________________________________________________}}}
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
|{{{_____________________________}}}|{{{_____________________________}}}|
| Availability | SUNWnisu |
|{{{_____________________________}}}|{{{_____________________________}}}|
- | Interface Stability | Evolving |
+ | Interface Stability | Committed |
|{{{_____________________________}}}|{{{_____________________________}}}|
+CAVEATS
+
+
+ Currently StartTLS is not supported by libldap.so.5,
+ therefore the port number provided refers to the port
+ used during a TLS open, versus the port used as part
+ of a StartTLS sequence. To avoid timeout delays,
+ mixed use of TLS and non-TLS authentication mechanism
+ is not recommended.
+
+ Example 1
+
+ -h foo:1000 -a authenticationMethod=tls:simple
+
+ or
+
+ defaultServerList= foo:1000
+ authenticationMethod= tls:simple
+
+ Refers to a raw TLS open on host foo port 1000, not a
+ open, StartTLS sequence on an unsecured port 1000.
+ If port 1000 is unsecured the connection will not
+ be made.
+
+ Example 2
+
+ defaultServerList= foo:636 foo:389
+ authenticationMethod= simple
+
+ This configuration will incur a significant timeout
+ delay while attempting the connection to foo:636 with an
+ unsecured bind.
+
+
SEE ALSO
chkey(1), ldap(1), ldapadd(1), ldapdelete(1), ldaplist(1),
ldapmodify(1), ldapmodrdn(1), ldapsearch(1), idsconfig(1M),
ldapaddent(1M), ldap_cachemgr(1M), suninstall(1M), default-
domain(4), nsswitch.conf(4), resolv.conf(4), attributes(5)


--- layout: post title: A Heroku update published: true ---
I've added a note to Section 2.3.5 (Deploying the demo app) about pushing data as well as data models up to Heroku. This uses the taps gem (along with the main heroku gem), which has recently been updated by Heroku. Ruby on Rails Tutorial readers using Heroku should update both gems per this Heroku blog post on supporting large data sets:
$ [sudo] gem update heroku taps
(As indicated by the square brackets, many users will need to use sudo to install gems, but users of Ruby Version Manager (rvm) should omit it.)


Notification
New User Registered
Just Now
New Order has been placed
2 days
New Payment has made through Paypal
1 week
Justin Trudeau
My Account
My Calendar
My Inbox
2
Log Out
Justin Trudeau
Music Expert
Dashboard
Manage Orders
Order List
Add Order
Reports
Payment Method
Payment Method List
Add Payment Method
Edit Account
Logout
Justin Trudeau
Spotify Expert
Upload Profile Photo
Delete Image
Personal Information
Full Name
*
Username
*
Email Address
*
Website
Password
*
Confirm Password
*
Country
*
Select Country
Australia
Bangladesh
USA
Canada
Brazil
Sweden
Phone Number
About Me
Cancel
Save Changes
Billing Information
Full Name
*
Company Name
*
Email Address
*
Country
*
Select Country
Australia
Bangladesh
USA
Canada
Brazil
Sweden
Address Line1
*
Address Line2
*
City / State
*
Select City
Australia
Bangladesh
USA
Canada
Brazil
Sweden
ZIP / Postal Code
Cancel
Save Changes


Collection
Academies investigation reports
Reports by the Government's cross-departmental internal audit investigation team into concerns about the use of academies funding.


The ||
(or operator) is the appropriate choice:
( chars.equals( "yes" ) || chars.equals( "YES" ) || chars.equals( "y" ) || chars.equals( "Y" ) )
Since any one choice is all we need, the OR operation is the appropriate way
to combine the choices.
Here is the while
loop version of the program modified in this way:
import java.io.* ; class SqrtCalc { public static void main( String[] args ) throws IOException { String chars ; double x; BufferedReader stdin = new BufferedReader( new InputStreamReader(System.in) ); chars = "yes" ; while ( chars.equals( "yes" ) || chars.equals( "YES" ) || chars.equals( "y" ) || chars.equals( "Y" ) ) { System.out.print("Enter a number-->"); chars = stdin.readLine(); x = Double.parseDouble( chars ); System.out.println("Square root of " + x + " is " + Math.sqrt( x ) ); System.out.print("Do you wish to continue? (yes or no) -->"); chars = stdin.readLine(); } } }


--- layout: default title: nothing subtitle: craphole ---
I’m an alum of the University of Puget Sound with a BS in biology, a minor in math, and an emphasis in Chinese. Through my math, chemistry, and biology courses, I fell in love with crunching numbers, analyzing trends, and using results to tell stories and recommend further research. I continue to fuel my enthusiasm for data analysis through online courses and work experience.
| Excel | SQL Queries | R Statistical Computing | Confluence | Jira | Basic Python | html & css |
| Agile mindset | team player | quick to learn | problem solver |
Yes, I'm one of those cat moms!


November 23 2015
This is my first article
He got in touch with Chappell as he thought he "would be the best person" to help him in his mission. "In our previous meetings he had impressed me with his deep cricketing knowledge," Ganguly writes in his autobiography "A Century is Not Enough".
But little did Ganguly know then that this association was going to be one of the most controversial of that era. On Greg's appointment, the former Team India skipper says that when there was discussion in 2004 on who could succeed John Wright as the coach, Chappell's name flashed in his mind first.
"I thought Greg Chappell would be the best person to take us to the number one slot from the challenger's position. I had conveyed my personal choice to Mr (Jagmohan) Dalmiya when they were looking for a new Indian coach," the book, co-authored by Gautam Bhattacharya and published by Juggernaut, says.
September 20 2016
This is my second article
"A few people advised me against this move. Sunil Gavaskar was one of them. 'Sourav, think about it. With him around you might have problems in running the team. His past coaching record is not spectacular, he told me," writes Ganguly.
He says Dalmiya also called one morning and asked him to come to his house for an urgent discussion. "He shared in confidence that even his brother Ian thought Greg might not be the right choice for India. Well, I decided to ignore all these warnings and follow my instincts," Ganguly writes.
"The rest as they say is history. But then that's life. Some scripts go your way, like my tour of Australia, and some don't, like the Greg chapter. I conquered the country but not one of its citizens," he says.
He says suddenly from 'Maharaj' he joined the ranks of the oppressed. "This (the year 2005) remains the most turbulent chapter of my life. Not only was my captaincy suddenly taken away for no reason but I was also dropped as a player. I feel angry even as I write this. What happened was unthinkable. Unacceptable. Unforgivable," he writes.


There are 5 available transitions: fade, hinge, scale, slide and spin. The buttons below allow you to apply a transition to the red element on the right.
Fade transitions
Hinge transitions
Scale transitions
Slide transitions
Spin transitions


parse_boresight_line¶
-
Data_Reduction.DSN.logs.
parse_boresight_line
(line)¶ Parse a line of boresight data.
Proxesses data from an EAC
5pYYYYDDD.xxx
file, where xxx ispri
(primary, the preferred frequency for the boresight) orsec
(secondary).line
is a line from the log file. The columns in the table are:- DOY: day of year (3 digit integer) - UTC: Coordinated Universal Time (HH:MM:SS) - SOURCE: name of the source used for boresight - FREQ: receiver frequency used (MHz) - POL: feed polarization (LCP/RCP) - HA: approximate hour angle (deg) at center position - DEC: approximate declination (deg) at center position - AZ: approximate azimuth (deg) at center position - EL: approximate elevation (deg) at center position - AX_HXPOS: total initial cross-elevation or cross-declination offset (deg) - EL_DEPOS: total initial elevation or declination offset (deg) - DELTAP_X: delta Ta (K) at X-direction plus offset (nominallY +HPBW/2) - DELTAZ_X: delta Ta (K) at X-direction zero offset - DELTAM_X: delta Ta (K) at X-direction minus offset (nominally -HPBW/2) - NUMPTS_X: always 0 (number of samples at a position?) - RMS_X: always 0.0 (r.m.s. of sample mean) - BASEP_X: Ta (K) of baseline in plus X offset direction - ON1_X: always 0 - ON2_X: always 0 - BASEM_X: Ta (K) of baseline in minus X offset direction - BW_X: measured beamwidth (deg) in X direction - ERR_X: estimated error (deg) of beamwidth in X direction - POS_X: total boresight offset (deg) in X not including manual offset - DELTAP_Y: delta Ta (K) at Y-direction minus offset (nominallY -HPBW/2) - DELTAZ_Y: delta Ta (K) at Y-direction zero offset position - DELTAM_Y: delta Ta (K) at Y-direction plus offset (nominallY +HPBW/2) - NUMPTS_Y: always 0 - RMS_Y: always 0.0 - BASEP_Y: Ta (K) of baseline in plus Y offset direction - ON1_Y: always 0 - ON2_Y: always 0 - BASEM_Y: Ta (K) of baseline in minus Y offset direction - BW_Y: measured beamwidth (DEG) in Y direction - ERR_Y: estimated error (deg) of beamwidth in Y direction - POS_Y: total boresight offset (deg) in Y not including manual offset
The following summarize the boresight results. One pair of columns should be the same as POS_X and POS_Y and the other pair calculated from these, depending on whether the boresight was done in XDEC,DEC or XEL,EL:
- XELOFF: total boresight offet (deg) in cross-el, not incl. manual offs. - ELOFF: total boresight offet (deg) in elevation, not incl. manual offs. - XDECOFF: total boresight offet (deg) in cross-dec, not incl. manual offs. - DECOFF: total boresight offet (deg) in declination, not incl. manual offs. - The following may vary according to a subreflector position model - YPOS: subreflector Y axis position (inches) - ZPOS: subreflector Z axis position (inches)
The following are offsets from the model:
- YOFF: subreflector Y axis offset (inches) - ZOFF: subreflector Z axis offset (inches)
The information extracted from this and returned in a dictionary is:
- time: UNIX timestamp in seconds since the epoch 1970.0 - SOURCE: - FREQ: - POL: - HA: - DEC - AZ: - EL:
Notes
This function is unfinished.


--- layout: page title: About header-img: "img/about-bg.png" ---
Digital journalist turned wannabe web developer. Currently living in a cramped Brooklyn apartment with my husband, two laptops and our crazy ideas for the future.


"x" "1" "KROPKO,ML, JAEN,JC, THEISS,JC, WOLD,S, CAPRATHE,BW AND WISE,LD,CHEMICAL PURITY AND MUTAGENICITY: CASE STUDY OF A DRUG IN DEVELOPMENT, MUTAT.RES. 281(4):233-238, 1992"


Pick me one!


Non-linear Least Squares¶
Introduction¶
Ceres can solve bounds constrained robustified non-linear least squares problems of the form
Problems of this form comes up in a broad range of areas across science and engineering - from fitting curves in statistics, to constructing 3D models from photographs in computer vision.
In this chapter we will learn how to solve (1) using Ceres Solver. Full working code for all the examples described in this chapter and more can be found in the examples directory.
The expression
\(\rho_i\left(\left\|f_i\left(x_{i_1},...,x_{i_k}\right)\right\|^2\right)\)
is known as a ResidualBlock
, where \(f_i(\cdot)\) is a
CostFunction
that depends on the parameter blocks
\(\left[x_{i_1},... , x_{i_k}\right]\). In most optimization
problems small groups of scalars occur together. For example the three
components of a translation vector and the four components of the
quaternion that define the pose of a camera. We refer to such a group
of small scalars as a ParameterBlock
. Of course a
ParameterBlock
can just be a single parameter. \(l_j\) and
\(u_j\) are bounds on the parameter block \(x_j\).
\(\rho_i\) is a LossFunction
. A LossFunction
is
a scalar function that is used to reduce the influence of outliers on
the solution of non-linear least squares problems.
As a special case, when \(\rho_i(x) = x\), i.e., the identity function, and \(l_j = -\infty\) and \(u_j = \infty\) we get the more familiar non-linear least squares problem.
Hello World!¶
To get started, consider the problem of finding the minimum of the function
This is a trivial problem, whose minimum is located at \(x = 10\), but it is a good place to start to illustrate the basics of solving a problem with Ceres [1].
The first step is to write a functor that will evaluate this the function \(f(x) = 10 - x\):
struct CostFunctor {
template <typename T>
bool operator()(const T* const x, T* residual) const {
residual[0] = T(10.0) - x[0];
return true;
}
};
The important thing to note here is that operator()
is a templated
method, which assumes that all its inputs and outputs are of some type
T
. The use of templating here allows Ceres to call
CostFunctor::operator<T>()
, with T=double
when just the value
of the residual is needed, and with a special type T=Jet
when the
Jacobians are needed. In Derivatives we will discuss the
various ways of supplying derivatives to Ceres in more detail.
Once we have a way of computing the residual function, it is now time to construct a non-linear least squares problem using it and have Ceres solve it.
int main(int argc, char** argv) {
google::InitGoogleLogging(argv[0]);
// The variable to solve for with its initial value.
double initial_x = 5.0;
double x = initial_x;
// Build the problem.
Problem problem;
// Set up the only cost function (also known as residual). This uses
// auto-differentiation to obtain the derivative (jacobian).
CostFunction* cost_function =
new AutoDiffCostFunction<CostFunctor, 1, 1>(new CostFunctor);
problem.AddResidualBlock(cost_function, NULL, &x);
// Run the solver!
Solver::Options options;
options.linear_solver_type = ceres::DENSE_QR;
options.minimizer_progress_to_stdout = true;
Solver::Summary summary;
Solve(options, &problem, &summary);
std::cout << summary.BriefReport() << "\n";
std::cout << "x : " << initial_x
<< " -> " << x << "\n";
return 0;
}
AutoDiffCostFunction
takes a CostFunctor
as input,
automatically differentiates it and gives it a CostFunction
interface.
Compiling and running examples/helloworld.cc gives us
iter cost cost_change |gradient| |step| tr_ratio tr_radius ls_iter iter_time total_time
0 4.512500e+01 0.00e+00 9.50e+00 0.00e+00 0.00e+00 1.00e+04 0 5.33e-04 3.46e-03
1 4.511598e-07 4.51e+01 9.50e-04 9.50e+00 1.00e+00 3.00e+04 1 5.00e-04 4.05e-03
2 5.012552e-16 4.51e-07 3.17e-08 9.50e-04 1.00e+00 9.00e+04 1 1.60e-05 4.09e-03
Ceres Solver Report: Iterations: 2, Initial cost: 4.512500e+01, Final cost: 5.012552e-16, Termination: CONVERGENCE
x : 0.5 -> 10
Starting from a \(x=5\), the solver in two iterations goes to 10 [2]. The careful reader will note that this is a linear problem and one linear solve should be enough to get the optimal value. The default configuration of the solver is aimed at non-linear problems, and for reasons of simplicity we did not change it in this example. It is indeed possible to obtain the solution to this problem using Ceres in one iteration. Also note that the solver did get very close to the optimal function value of 0 in the very first iteration. We will discuss these issues in greater detail when we talk about convergence and parameter settings for Ceres.
Footnotes
| [1] | examples/helloworld.cc |
| [2] | Actually the solver ran for three iterations, and it was by looking at the value returned by the linear solver in the third iteration, it observed that the update to the parameter block was too small and declared convergence. Ceres only prints out the display at the end of an iteration, and terminates as soon as it detects convergence, which is why you only see two iterations here and not three. |
Derivatives¶
Ceres Solver like most optimization packages, depends on being able to evaluate the value and the derivatives of each term in the objective function at arbitrary parameter values. Doing so correctly and efficiently is essential to getting good results. Ceres Solver provides a number of ways of doing so. You have already seen one of them in action – Automatic Differentiation in examples/helloworld.cc
We now consider the other two possibilities. Analytic and numeric derivatives.
Numeric Derivatives¶
In some cases, its not possible to define a templated cost functor,
for example when the evaluation of the residual involves a call to a
library function that you do not have control over. In such a
situation, numerical differentiation can be used. The user defines a
functor which computes the residual value and construct a
NumericDiffCostFunction
using it. e.g., for \(f(x) = 10 - x\)
the corresponding functor would be
struct NumericDiffCostFunctor {
bool operator()(const double* const x, double* residual) const {
residual[0] = 10.0 - x[0];
return true;
}
};
Which is added to the Problem
as:
CostFunction* cost_function =
new NumericDiffCostFunction<NumericDiffCostFunctor, ceres::CENTRAL, 1, 1>(
new NumericDiffCostFunctor);
problem.AddResidualBlock(cost_function, NULL, &x);
Notice the parallel from when we were using automatic differentiation
CostFunction* cost_function =
new AutoDiffCostFunction<CostFunctor, 1, 1>(new CostFunctor);
problem.AddResidualBlock(cost_function, NULL, &x);
The construction looks almost identical to the one used for automatic
differentiation, except for an extra template parameter that indicates
the kind of finite differencing scheme to be used for computing the
numerical derivatives [3]. For more details see the documentation
for NumericDiffCostFunction
.
Generally speaking we recommend automatic differentiation instead of numeric differentiation. The use of C++ templates makes automatic differentiation efficient, whereas numeric differentiation is expensive, prone to numeric errors, and leads to slower convergence.
Analytic Derivatives¶
In some cases, using automatic differentiation is not possible. For example, it may be the case that it is more efficient to compute the derivatives in closed form instead of relying on the chain rule used by the automatic differentiation code.
In such cases, it is possible to supply your own residual and jacobian
computation code. To do this, define a subclass of
CostFunction
or SizedCostFunction
if you know the
sizes of the parameters and residuals at compile time. Here for
example is SimpleCostFunction
that implements \(f(x) = 10 -
x\).
class QuadraticCostFunction : public ceres::SizedCostFunction<1, 1> {
public:
virtual ~QuadraticCostFunction() {}
virtual bool Evaluate(double const* const* parameters,
double* residuals,
double** jacobians) const {
const double x = parameters[0][0];
residuals[0] = 10 - x;
// Compute the Jacobian if asked for.
if (jacobians != NULL && jacobians[0] != NULL) {
jacobians[0][0] = -1;
}
return true;
}
};
SimpleCostFunction::Evaluate
is provided with an input array of
parameters
, an output array residuals
for residuals and an
output array jacobians
for Jacobians. The jacobians
array is
optional, Evaluate
is expected to check when it is non-null, and
if it is the case then fill it with the values of the derivative of
the residual function. In this case since the residual function is
linear, the Jacobian is constant [4] .
As can be seen from the above code fragments, implementing
CostFunction
objects is a bit tedious. We recommend that
unless you have a good reason to manage the jacobian computation
yourself, you use AutoDiffCostFunction
or
NumericDiffCostFunction
to construct your residual blocks.
More About Derivatives¶
Computing derivatives is by far the most complicated part of using
Ceres, and depending on the circumstance the user may need more
sophisticated ways of computing derivatives. This section just
scratches the surface of how derivatives can be supplied to
Ceres. Once you are comfortable with using
NumericDiffCostFunction
and AutoDiffCostFunction
we
recommend taking a look at DynamicAutoDiffCostFunction
,
CostFunctionToFunctor
, NumericDiffFunctor
and
ConditionedCostFunction
for more advanced ways of
constructing and computing cost functions.
Footnotes
| [3] | examples/helloworld_numeric_diff.cc. |
| [4] | examples/helloworld_analytic_diff.cc. |
Powell’s Function¶
Consider now a slightly more complicated example – the minimization of Powell’s function. Let \(x = \left[x_1, x_2, x_3, x_4 \right]\) and
\(F(x)\) is a function of four parameters, has four residuals and we wish to find \(x\) such that \(\frac{1}{2}\|F(x)\|^2\) is minimized.
Again, the first step is to define functors that evaluate of the terms in the objective functor. Here is the code for evaluating \(f_4(x_1, x_4)\):
struct F4 {
template <typename T>
bool operator()(const T* const x1, const T* const x4, T* residual) const {
residual[0] = T(sqrt(10.0)) * (x1[0] - x4[0]) * (x1[0] - x4[0]);
return true;
}
};
Similarly, we can define classes F1
, F2
and F3
to evaluate
\(f_1(x_1, x_2)\), \(f_2(x_3, x_4)\) and \(f_3(x_2, x_3)\)
respectively. Using these, the problem can be constructed as follows:
double x1 = 3.0; double x2 = -1.0; double x3 = 0.0; double x4 = 1.0;
Problem problem;
// Add residual terms to the problem using the using the autodiff
// wrapper to get the derivatives automatically.
problem.AddResidualBlock(
new AutoDiffCostFunction<F1, 1, 1, 1>(new F1), NULL, &x1, &x2);
problem.AddResidualBlock(
new AutoDiffCostFunction<F2, 1, 1, 1>(new F2), NULL, &x3, &x4);
problem.AddResidualBlock(
new AutoDiffCostFunction<F3, 1, 1, 1>(new F3), NULL, &x2, &x3)
problem.AddResidualBlock(
new AutoDiffCostFunction<F4, 1, 1, 1>(new F4), NULL, &x1, &x4);
Note that each ResidualBlock
only depends on the two parameters
that the corresponding residual object depends on and not on all four
parameters. Compiling and running examples/powell.cc
gives us:
Initial x1 = 3, x2 = -1, x3 = 0, x4 = 1
iter cost cost_change |gradient| |step| tr_ratio tr_radius ls_iter iter_time total_time
0 1.075000e+02 0.00e+00 1.55e+02 0.00e+00 0.00e+00 1.00e+04 0 4.95e-04 2.30e-03
1 5.036190e+00 1.02e+02 2.00e+01 2.16e+00 9.53e-01 3.00e+04 1 4.39e-05 2.40e-03
2 3.148168e-01 4.72e+00 2.50e+00 6.23e-01 9.37e-01 9.00e+04 1 9.06e-06 2.43e-03
3 1.967760e-02 2.95e-01 3.13e-01 3.08e-01 9.37e-01 2.70e+05 1 8.11e-06 2.45e-03
4 1.229900e-03 1.84e-02 3.91e-02 1.54e-01 9.37e-01 8.10e+05 1 6.91e-06 2.48e-03
5 7.687123e-05 1.15e-03 4.89e-03 7.69e-02 9.37e-01 2.43e+06 1 7.87e-06 2.50e-03
6 4.804625e-06 7.21e-05 6.11e-04 3.85e-02 9.37e-01 7.29e+06 1 5.96e-06 2.52e-03
7 3.003028e-07 4.50e-06 7.64e-05 1.92e-02 9.37e-01 2.19e+07 1 5.96e-06 2.55e-03
8 1.877006e-08 2.82e-07 9.54e-06 9.62e-03 9.37e-01 6.56e+07 1 5.96e-06 2.57e-03
9 1.173223e-09 1.76e-08 1.19e-06 4.81e-03 9.37e-01 1.97e+08 1 7.87e-06 2.60e-03
10 7.333425e-11 1.10e-09 1.49e-07 2.40e-03 9.37e-01 5.90e+08 1 6.20e-06 2.63e-03
11 4.584044e-12 6.88e-11 1.86e-08 1.20e-03 9.37e-01 1.77e+09 1 6.91e-06 2.65e-03
12 2.865573e-13 4.30e-12 2.33e-09 6.02e-04 9.37e-01 5.31e+09 1 5.96e-06 2.67e-03
13 1.791438e-14 2.69e-13 2.91e-10 3.01e-04 9.37e-01 1.59e+10 1 7.15e-06 2.69e-03
Ceres Solver v1.12.0 Solve Report
----------------------------------
Original Reduced
Parameter blocks 4 4
Parameters 4 4
Residual blocks 4 4
Residual 4 4
Minimizer TRUST_REGION
Dense linear algebra library EIGEN
Trust region strategy LEVENBERG_MARQUARDT
Given Used
Linear solver DENSE_QR DENSE_QR
Threads 1 1
Linear solver threads 1 1
Cost:
Initial 1.075000e+02
Final 1.791438e-14
Change 1.075000e+02
Minimizer iterations 14
Successful steps 14
Unsuccessful steps 0
Time (in seconds):
Preprocessor 0.002
Residual evaluation 0.000
Jacobian evaluation 0.000
Linear solver 0.000
Minimizer 0.001
Postprocessor 0.000
Total 0.005
Termination: CONVERGENCE (Gradient tolerance reached. Gradient max norm: 3.642190e-11 <= 1.000000e-10)
Final x1 = 0.000292189, x2 = -2.92189e-05, x3 = 4.79511e-05, x4 = 4.79511e-05
It is easy to see that the optimal solution to this problem is at \(x_1=0, x_2=0, x_3=0, x_4=0\) with an objective function value of \(0\). In 10 iterations, Ceres finds a solution with an objective function value of \(4\times 10^{-12}\).
Footnotes
| [5] | examples/powell.cc. |
Curve Fitting¶
The examples we have seen until now are simple optimization problems with no data. The original purpose of least squares and non-linear least squares analysis was fitting curves to data. It is only appropriate that we now consider an example of such a problem [6]. It contains data generated by sampling the curve \(y = e^{0.3x + 0.1}\) and adding Gaussian noise with standard deviation \(\sigma = 0.2\). Let us fit some data to the curve
We begin by defining a templated object to evaluate the residual. There will be a residual for each observation.
struct ExponentialResidual {
ExponentialResidual(double x, double y)
: x_(x), y_(y) {}
template <typename T>
bool operator()(const T* const m, const T* const c, T* residual) const {
residual[0] = T(y_) - exp(m[0] * T(x_) + c[0]);
return true;
}
private:
// Observations for a sample.
const double x_;
const double y_;
};
Assuming the observations are in a \(2n\) sized array called
data
the problem construction is a simple matter of creating a
CostFunction
for every observation.
double m = 0.0;
double c = 0.0;
Problem problem;
for (int i = 0; i < kNumObservations; ++i) {
CostFunction* cost_function =
new AutoDiffCostFunction<ExponentialResidual, 1, 1, 1>(
new ExponentialResidual(data[2 * i], data[2 * i + 1]));
problem.AddResidualBlock(cost_function, NULL, &m, &c);
}
Compiling and running examples/curve_fitting.cc gives us:
iter cost cost_change |gradient| |step| tr_ratio tr_radius ls_iter iter_time total_time
0 1.211734e+02 0.00e+00 3.61e+02 0.00e+00 0.00e+00 1.00e+04 0 5.34e-04 2.56e-03
1 1.211734e+02 -2.21e+03 0.00e+00 7.52e-01 -1.87e+01 5.00e+03 1 4.29e-05 3.25e-03
2 1.211734e+02 -2.21e+03 0.00e+00 7.51e-01 -1.86e+01 1.25e+03 1 1.10e-05 3.28e-03
3 1.211734e+02 -2.19e+03 0.00e+00 7.48e-01 -1.85e+01 1.56e+02 1 1.41e-05 3.31e-03
4 1.211734e+02 -2.02e+03 0.00e+00 7.22e-01 -1.70e+01 9.77e+00 1 1.00e-05 3.34e-03
5 1.211734e+02 -7.34e+02 0.00e+00 5.78e-01 -6.32e+00 3.05e-01 1 1.00e-05 3.36e-03
6 3.306595e+01 8.81e+01 4.10e+02 3.18e-01 1.37e+00 9.16e-01 1 2.79e-05 3.41e-03
7 6.426770e+00 2.66e+01 1.81e+02 1.29e-01 1.10e+00 2.75e+00 1 2.10e-05 3.45e-03
8 3.344546e+00 3.08e+00 5.51e+01 3.05e-02 1.03e+00 8.24e+00 1 2.10e-05 3.48e-03
9 1.987485e+00 1.36e+00 2.33e+01 8.87e-02 9.94e-01 2.47e+01 1 2.10e-05 3.52e-03
10 1.211585e+00 7.76e-01 8.22e+00 1.05e-01 9.89e-01 7.42e+01 1 2.10e-05 3.56e-03
11 1.063265e+00 1.48e-01 1.44e+00 6.06e-02 9.97e-01 2.22e+02 1 2.60e-05 3.61e-03
12 1.056795e+00 6.47e-03 1.18e-01 1.47e-02 1.00e+00 6.67e+02 1 2.10e-05 3.64e-03
13 1.056751e+00 4.39e-05 3.79e-03 1.28e-03 1.00e+00 2.00e+03 1 2.10e-05 3.68e-03
Ceres Solver Report: Iterations: 13, Initial cost: 1.211734e+02, Final cost: 1.056751e+00, Termination: CONVERGENCE
Initial m: 0 c: 0
Final m: 0.291861 c: 0.131439
Starting from parameter values \(m = 0, c=0\) with an initial objective function value of \(121.173\) Ceres finds a solution \(m= 0.291861, c = 0.131439\) with an objective function value of \(1.05675\). These values are a bit different than the parameters of the original model \(m=0.3, c= 0.1\), but this is expected. When reconstructing a curve from noisy data, we expect to see such deviations. Indeed, if you were to evaluate the objective function for \(m=0.3, c=0.1\), the fit is worse with an objective function value of \(1.082425\). The figure below illustrates the fit.
Footnotes
| [6] | examples/curve_fitting.cc |
Robust Curve Fitting¶
Now suppose the data we are given has some outliers, i.e., we have some points that do not obey the noise model. If we were to use the code above to fit such data, we would get a fit that looks as below. Notice how the fitted curve deviates from the ground truth.
To deal with outliers, a standard technique is to use a
LossFunction
. Loss functions reduce the influence of
residual blocks with high residuals, usually the ones corresponding to
outliers. To associate a loss function with a residual block, we change
problem.AddResidualBlock(cost_function, NULL , &m, &c);
to
problem.AddResidualBlock(cost_function, new CauchyLoss(0.5) , &m, &c);
CauchyLoss
is one of the loss functions that ships with Ceres
Solver. The argument \(0.5\) specifies the scale of the loss
function. As a result, we get the fit below [7]. Notice how the
fitted curve moves back closer to the ground truth curve.
Footnotes
| [7] | examples/robust_curve_fitting.cc |
Bundle Adjustment¶
One of the main reasons for writing Ceres was our need to solve large scale bundle adjustment problems [HartleyZisserman], [Triggs].
Given a set of measured image feature locations and correspondences, the goal of bundle adjustment is to find 3D point positions and camera parameters that minimize the reprojection error. This optimization problem is usually formulated as a non-linear least squares problem, where the error is the squared \(L_2\) norm of the difference between the observed feature location and the projection of the corresponding 3D point on the image plane of the camera. Ceres has extensive support for solving bundle adjustment problems.
Let us solve a problem from the BAL dataset [8].
The first step as usual is to define a templated functor that computes
the reprojection error/residual. The structure of the functor is
similar to the ExponentialResidual
, in that there is an
instance of this object responsible for each image observation.
Each residual in a BAL problem depends on a three dimensional point and a nine parameter camera. The nine parameters defining the camera are: three for rotation as a Rodriques’ axis-angle vector, three for translation, one for focal length and two for radial distortion. The details of this camera model can be found the Bundler homepage and the BAL homepage.
struct SnavelyReprojectionError {
SnavelyReprojectionError(double observed_x, double observed_y)
: observed_x(observed_x), observed_y(observed_y) {}
template <typename T>
bool operator()(const T* const camera,
const T* const point,
T* residuals) const {
// camera[0,1,2] are the angle-axis rotation.
T p[3];
ceres::AngleAxisRotatePoint(camera, point, p);
// camera[3,4,5] are the translation.
p[0] += camera[3]; p[1] += camera[4]; p[2] += camera[5];
// Compute the center of distortion. The sign change comes from
// the camera model that Noah Snavely's Bundler assumes, whereby
// the camera coordinate system has a negative z axis.
T xp = - p[0] / p[2];
T yp = - p[1] / p[2];
// Apply second and fourth order radial distortion.
const T& l1 = camera[7];
const T& l2 = camera[8];
T r2 = xp*xp + yp*yp;
T distortion = T(1.0) + r2 * (l1 + l2 * r2);
// Compute final projected point position.
const T& focal = camera[6];
T predicted_x = focal * distortion * xp;
T predicted_y = focal * distortion * yp;
// The error is the difference between the predicted and observed position.
residuals[0] = predicted_x - T(observed_x);
residuals[1] = predicted_y - T(observed_y);
return true;
}
// Factory to hide the construction of the CostFunction object from
// the client code.
static ceres::CostFunction* Create(const double observed_x,
const double observed_y) {
return (new ceres::AutoDiffCostFunction<SnavelyReprojectionError, 2, 9, 3>(
new SnavelyReprojectionError(observed_x, observed_y)));
}
double observed_x;
double observed_y;
};
Note that unlike the examples before, this is a non-trivial function
and computing its analytic Jacobian is a bit of a pain. Automatic
differentiation makes life much simpler. The function
AngleAxisRotatePoint()
and other functions for manipulating
rotations can be found in include/ceres/rotation.h
.
Given this functor, the bundle adjustment problem can be constructed as follows:
ceres::Problem problem;
for (int i = 0; i < bal_problem.num_observations(); ++i) {
ceres::CostFunction* cost_function =
SnavelyReprojectionError::Create(
bal_problem.observations()[2 * i + 0],
bal_problem.observations()[2 * i + 1]);
problem.AddResidualBlock(cost_function,
NULL /* squared loss */,
bal_problem.mutable_camera_for_observation(i),
bal_problem.mutable_point_for_observation(i));
}
Notice that the problem construction for bundle adjustment is very similar to the curve fitting example – one term is added to the objective function per observation.
Since this is a large sparse problem (well large for DENSE_QR
anyways), one way to solve this problem is to set
Solver::Options::linear_solver_type
to
SPARSE_NORMAL_CHOLESKY
and call Solve()
. And while this is
a reasonable thing to do, bundle adjustment problems have a special
sparsity structure that can be exploited to solve them much more
efficiently. Ceres provides three specialized solvers (collectively
known as Schur-based solvers) for this task. The example code uses the
simplest of them DENSE_SCHUR
.
ceres::Solver::Options options;
options.linear_solver_type = ceres::DENSE_SCHUR;
options.minimizer_progress_to_stdout = true;
ceres::Solver::Summary summary;
ceres::Solve(options, &problem, &summary);
std::cout << summary.FullReport() << "\n";
For a more sophisticated bundle adjustment example which demonstrates the use of Ceres’ more advanced features including its various linear solvers, robust loss functions and local parameterizations see examples/bundle_adjuster.cc
Footnotes
| [8] | examples/simple_bundle_adjuster.cc |
Other Examples¶
Besides the examples in this chapter, the example directory contains a number of other examples:
bundle_adjuster.cc shows how to use the various features of Ceres to solve bundle adjustment problems.
circle_fit.cc shows how to fit data to a circle.
ellipse_approximation.cc fits points randomly distributed on an ellipse with an approximate line segment contour. This is done by jointly optimizing the control points of the line segment contour along with the preimage positions for the data points. The purpose of this example is to show an example use case for
Solver::Options::dynamic_sparsity
, and how it can benefit problems which are numerically dense but dynamically sparse.denoising.cc implements image denoising using the Fields of Experts model.
nist.cc implements and attempts to solves the NIST non-linear regression problems.
more_garbow_hillstrom.cc A subset of the test problems from the paper
Testing Unconstrained Optimization Software Jorge J. More, Burton S. Garbow and Kenneth E. Hillstrom ACM Transactions on Mathematical Software, 7(1), pp. 17-41, 1981
which were augmented with bounds and used for testing bounds constrained optimization algorithms by
A Trust Region Approach to Linearly Constrained Optimization David M. Gay Numerical Analysis (Griffiths, D.F., ed.), pp. 72-105 Lecture Notes in Mathematics 1066, Springer Verlag, 1984.
libmv_bundle_adjuster.cc is the bundle adjustment algorithm used by Blender/libmv.
libmv_homography.cc This file demonstrates solving for a homography between two sets of points and using a custom exit criterion by having a callback check for image-space error.
robot_pose_mle.cc This example demonstrates how to use the
DynamicAutoDiffCostFunction
variant of CostFunction. TheDynamicAutoDiffCostFunction
is meant to be used in cases where the number of parameter blocks or the sizes are not known at compile time.This example simulates a robot traversing down a 1-dimension hallway with noise odometry readings and noisy range readings of the end of the hallway. By fusing the noisy odometry and sensor readings this example demonstrates how to compute the maximum likelihood estimate (MLE) of the robot’s pose at each timestep.
slam/pose_graph_2d/pose_graph_2d.cc The Simultaneous Localization and Mapping (SLAM) problem consists of building a map of an unknown environment while simultaneously localizing against this map. The main difficulty of this problem stems from not having any additional external aiding information such as GPS. SLAM has been considered one of the fundamental challenges of robotics. There are many resources on SLAM [9]. A pose graph optimization problem is one example of a SLAM problem. The following explains how to formulate the pose graph based SLAM problem in 2-Dimensions with relative pose constraints.
Consider a robot moving in a 2-Dimensional plane. The robot has access to a set of sensors such as wheel odometry or a laser range scanner. From these raw measurements, we want to estimate the trajectory of the robot as well as build a map of the environment. In order to reduce the computational complexity of the problem, the pose graph approach abstracts the raw measurements away. Specifically, it creates a graph of nodes which represent the pose of the robot, and edges which represent the relative transformation (delta position and orientation) between the two nodes. The edges are virtual measurements derived from the raw sensor measurements, e.g. by integrating the raw wheel odometry or aligning the laser range scans acquired from the robot. A visualization of the resulting graph is shown below.
The figure depicts the pose of the robot as the triangles, the measurements are indicated by the connecting lines, and the loop closure measurements are shown as dotted lines. Loop closures are measurements between non-sequential robot states and they reduce the accumulation of error over time. The following will describe the mathematical formulation of the pose graph problem.
The robot at timestamp \(t\) has state \(x_t = [p^T, \psi]^T\) where \(p\) is a 2D vector that represents the position in the plane and \(\psi\) is the orientation in radians. The measurement of the relative transform between the robot state at two timestamps \(a\) and \(b\) is given as: \(z_{ab} = [\hat{p}_{ab}^T, \hat{\psi}_{ab}]\). The residual implemented in the Ceres cost function which computes the error between the measurement and the predicted measurement is:
\[\begin{split}r_{ab} = \left[ \begin{array}{c} R_a^T\left(p_b - p_a\right) - \hat{p}_{ab} \\ \mathrm{Normalize}\left(\psi_b - \psi_a - \hat{\psi}_{ab}\right) \end{array} \right]\end{split}\]where the function \(\mathrm{Normalize}()\) normalizes the angle in the range \([-\pi,\pi)\), and \(R\) is the rotation matrix given by
\[\begin{split}R_a = \left[ \begin{array}{cc} \cos \psi_a & -\sin \psi_a \\ \sin \psi_a & \cos \psi_a \\ \end{array} \right]\end{split}\]To finish the cost function, we need to weight the residual by the uncertainty of the measurement. Hence, we pre-multiply the residual by the inverse square root of the covariance matrix for the measurement, i.e. \(\Sigma_{ab}^{-\frac{1}{2}} r_{ab}\) where \(\Sigma_{ab}\) is the covariance.
Lastly, we use a local parameterization to normalize the orientation in the range which is normalized between \([-\pi,\pi)\). Specially, we define the
AngleLocalParameterization::operator()
function to be: \(\mathrm{Normalize}(\psi + \delta \psi)\).This package includes an executable
pose_graph_2d
that will read a problem definition file. This executable can work with any 2D problem definition that uses the g2o format. It would be relatively straightforward to implement a new reader for a different format such as TORO or others.pose_graph_2d
will print the Ceres solver full summary and then output to disk the original and optimized poses (poses_original.txt
andposes_optimized.txt
, respectively) of the robot in the following format:pose_id x y yaw_radians pose_id x y yaw_radians pose_id x y yaw_radians
where
pose_id
is the corresponding integer ID from the file definition. Note, the file will be sorted in ascending order for thepose_id
.The executable
pose_graph_2d
expects the first argument to be the path to the problem definition. To run the executable,/path/to/bin/pose_graph_2d /path/to/dataset/dataset.g2o
A python script is provided to visualize the resulting output files.
/path/to/repo/examples/slam/pose_graph_2d/plot_results.py --optimized_poses ./poses_optimized.txt --initial_poses ./poses_original.txt
As an example, a standard synthetic benchmark dataset [10] created by Edwin Olson which has 3500 nodes in a grid world with a total of 5598 edges was solved. Visualizing the results with the provided script produces:
with the original poses in green and the optimized poses in blue. As shown, the optimized poses more closely match the underlying grid world. Note, the left side of the graph has a small yaw drift due to a lack of relative constraints to provide enough information to reconstruct the trajectory.
Footnotes
[9] (1, 2) Giorgio Grisetti, Rainer Kummerle, Cyrill Stachniss, Wolfram Burgard. A Tutorial on Graph-Based SLAM. IEEE Intelligent Transportation Systems Magazine, 52(3):199–222, 2010.
[10] E. Olson, J. Leonard, and S. Teller, “Fast iterative optimization of pose graphs with poor initial estimates,” in Robotics and Automation (ICRA), IEEE International Conference on, 2006, pp. 2262–2269.
slam/pose_graph_3d/pose_graph_3d.cc The following explains how to formulate the pose graph based SLAM problem in 3-Dimensions with relative pose constraints. The example also illustrates how to use Eigen’s geometry module with Ceres’s automatic differentiation functionality.
The robot at timestamp \(t\) has state \(x_t = [p^T, q^T]^T\) where \(p\) is a 3D vector that represents the position and \(q\) is the orientation represented as an Eigen quaternion. The measurement of the relative transform between the robot state at two timestamps \(a\) and \(b\) is given as: \(z_{ab} = [\hat{p}_{ab}^T, \hat{q}_{ab}^T]^T\). The residual implemented in the Ceres cost function which computes the error between the measurement and the predicted measurement is:
\[\begin{split}r_{ab} = \left[ \begin{array}{c} R(q_a)^{T} (p_b - p_a) - \hat{p}_{ab} \\ 2.0 \mathrm{vec}\left((q_a^{-1} q_b) \hat{q}_{ab}^{-1}\right) \end{array} \right]\end{split}\]where the function \(\mathrm{vec}()\) returns the vector part of the quaternion, i.e. \([q_x, q_y, q_z]\), and \(R(q)\) is the rotation matrix for the quaternion.
To finish the cost function, we need to weight the residual by the uncertainty of the measurement. Hence, we pre-multiply the residual by the inverse square root of the covariance matrix for the measurement, i.e. \(\Sigma_{ab}^{-\frac{1}{2}} r_{ab}\) where \(\Sigma_{ab}\) is the covariance.
Given that we are using a quaternion to represent the orientation, we need to use a local parameterization (
EigenQuaternionParameterization
) to only apply updates orthogonal to the 4-vector defining the quaternion. Eigen’s quaternion uses a different internal memory layout for the elements of the quaternion than what is commonly used. Specifically, Eigen stores the elements in memory as \([x, y, z, w]\) where the real part is last whereas it is typically stored first. Note, when creating an Eigen quaternion through the constructor the elements are accepted in \(w\), \(x\), \(y\), \(z\) order. Since Ceres operates on parameter blocks which are raw double pointers this difference is important and requires a different parameterization.This package includes an executable
pose_graph_3d
that will read a problem definition file. This executable can work with any 3D problem definition that uses the g2o format with quaternions used for the orientation representation. It would be relatively straightforward to implement a new reader for a different format such as TORO or others.pose_graph_3d
will print the Ceres solver full summary and then output to disk the original and optimized poses (poses_original.txt
andposes_optimized.txt
, respectively) of the robot in the following format:pose_id x y z q_x q_y q_z q_w pose_id x y z q_x q_y q_z q_w pose_id x y z q_x q_y q_z q_w ...
where
pose_id
is the corresponding integer ID from the file definition. Note, the file will be sorted in ascending order for thepose_id
.The executable
pose_graph_3d
expects the first argument to be the path to the problem definition. The executable can be run via/path/to/bin/pose_graph_3d /path/to/dataset/dataset.g2o
A script is provided to visualize the resulting output files. There is also an option to enable equal axes using
--axes_equal
/path/to/repo/examples/slam/pose_graph_3d/plot_results.py --optimized_poses ./poses_optimized.txt --initial_poses ./poses_original.txt
As an example, a standard synthetic benchmark dataset [9] where the robot is traveling on the surface of a sphere which has 2500 nodes with a total of 4949 edges was solved. Visualizing the results with the provided script produces:


Schlichting, D., Hetland, R., Qu, L., and Kobashi, D. (2021). Using tracer variance budgets to quantify numerical mixing offline in a coastal ocean model. Warnemunde Turbulence Days, December 6-9. Talk.
Schlichting*, D., and Hetland, R. (2021). Using total exchange flow to characterize submesoscale processes in the northern Gulf of Mexico. Poster and talk. Download poster PDF. Download talk PDF
Schlichting, D., Lieberthal, B., and Huguenard, K. (2019). An assessment into vegetation farms as a solution to coastal erosion in southern Maine. Northeast Aquaculture Conference, Boston MA. January 9-11. Poster. Download PDF
Schlichting, D.and Hetland, R. (2018). Using salinity variance and total exchange flow to analyze salinity structure in an unsteady estuary. Physics of Estuaries and Coastal Seas Conference, Galveston TX. October 14-18. Poster. Download PDF
Schlichting, D.and Hetland, R. (2018). Mechanisms controlling salinity structure structure in a broad, shallow, unsteady estuary. Sustainable Ecological Aquaculture Network Undergraduate Research Symposium, Walpole ME. August 7. Poster. Download PDF
Schlichting, D.and Hetland, R. (2018). Salinity structure in Copano Bay. Texas A&M University Observing the Ocean REU Student Symposium, College Station, TX. August 2.Talk.
Schlichting, D., Lieberthal, B., and Huguenard, K. (2017). Vegetation farms as a solution to coastal erosion for Saco, Maine. Sustainable Ecological Aquaculture Network Undergraduate Research Symposium, Walpole ME. August 16. Poster. Download PDF
*: This was part of a series of presentations for a graduate class on communicating ocean science to the general public. So this serves as an excellent introduction to my research to a general oceanographic audience.


When you work with us, you are part of a team of committed
collaborators. All aspects of our software development process are
integrated, iterative and agile.
Our approach unifies design, development and project management to
create exceptional products.
We start each project by understanding our business goals, the user's
needs and the products requirements.
Then we help translate them into effective and elegant solutions
Before we sign a contract or write a line of code our team will spend
necessary time to understand your product vision.
The outcome of this scoping session is a proposal of high-level
statement of work.
Based on your requirement, we can provide a complete offering or just
the pieces you need.
design
Our design practice offers a full range of services including branding strategy,interaction and visual design and user experience testing. Throughout your project, our designers create and implement visual designs and workflows solicit user feedback, and work with you to make sure what gets built is what is needed.
development
All engineers are fluent in the latest enterprise, mobile and web development technologies. They collaborate with your team to write, test, and improve code on a daily basis, using proven practices such as test-driven development and pair programming.
Product management
Planning and development is iterative. Because we are constantly coding and testing, the products we build are always ready to go live.This iterative process allows for changes as business requirements eveolve.
BLACK STUDIO
ONTARIO SECURITY
PYRAMID
JIM CARREY
Have A GOOD DAY
CALCULATOR
BUREND
GIRAFFE RESTORANT
DELANI STUDIO
2019


{% extends "layout.html" %} {% block page_title %} Other money {% endblock %} {% block content %} {% include "../includes/phase_banner_beta.html" %} Back Other money Apart from benefits, do you get any other money? Other money can include money from an insurance policy, a boarder, student loans or grants. Yes No What other money do you get? How much do you get? £ How often do you get it? Weekly Monthly Yearly Other Add another Where is the money coming from? How often do you get it? Weekly Monthly Yearly Other How much do you get? £ Add another Where is the money coming from? How often do you get it? Weekly Monthly Yearly Other How much do you get? £ {% include "../includes/help.html" %} {% endblock %} {% block body_end %} {% include "includes/scripts.html" %} {% endblock %}
Apart from benefits, do you get any other money?
Other money can include money from an insurance policy, a boarder, student loans or grants.
Add another


{{ page.title }}
{{ page.date | date: "%b %-d, %Y" }} {{ author.name }} {{ page.categories | array_to_sentence_string }}Note: A newer revision of this blogpost for apiman 1.2.x can be found here. This version was written for apiman 1.1.x.
{%- endif -%} {%- if page.oldUrl -%}Note: This is a redux of our blogpost for apiman 1.2.x. If you're still using apiman 1.1.x, you can refer to the older revision.
{%- endif -%}


For this project, I was tasked with creating an interface that could be used by nurses and physicians to document patient information in order to administer better care. My goal was to include elements like current and past health, tobaco and alcohol use, family history, and immunizations.
I made a variety of sketches to outline the flow of information and how the pages would be organized. I decided on having a single, long-form page for data entry, with two smaller pages for adding additional details to entries.
I created a rough style guide and a sample patient to make the high-fidelity mockups for this project. The annotations in the sidebar explain in detail the functions of each element in the interface.


About Me
For the past 7 years, I've been developing applications for the web using mostly Angular & Java. I do this for a living and love what I do as every day there is something new and exciting to learn.  Whether teaching code to kids at a local school, managing online programming groups and blogs or attending a conference, I find keeping involved helps me stay up to date.
See Details
Problem Solving
I can take vague problems and requirements and break them down into steps and solutions.
See moreSystems Thinking
I'm good at thinking abstractly and putting together systems with many moving parts.
See moreCommunicating
I can explain things clearly, communicate problems quickly and write accurately and concisely.
See moreOrganising
I can self-manage, work to deadlines, organise projects and present well-structured and complete deliverables.
See more


You can select from different transitions, like:
默认翻页 - 渐变式显示 - 魔方(划入) - 透明翻转(凸) - 透明翻转(凹) - 放大
这些颜色你不满意，那你来打我啊
A boy will make you think he loves you, but he really doesn’t. A girl will make you think she doesn’t love you, when she really does. —— 很多时候，男人会让你觉得他爱上了你，其实他真没有；而女人会让你觉得她不可能会爱上你，结果她却动了心。
Being nice to someone you Dislike doesn’t mean you’re a Fake. It means you’re Mature enough to Tolerate your dislike towards them.
能够善待不太喜欢的人， 并不代表你虚伪， 而意味着你内心成熟到可以容纳这些不喜欢.
电脑按下 ESC 按键,你就能看到整个布局.
当然,如果你使用手机查看。那就当此话我没讲过.按住键盘上的 Alt 键 点击页面任何一个地方都可以放大.
BUT
I will bring you a different feeling
Wait for me to come......
loding......


public final class SOAPTraceRegistry
extends java.lang.Object
| Modifier and Type | Method and Description |
|---|---|
static SOAPTraceRegistry |
getInstance()
Delivers the one and only instance of this class.
|
int |
recallThreadLocalInRequestEOI()
This method returns the thread-local eoi previously
registered using the method registerTraceId(curTraceId).
|
int |
recallThreadLocalInRequestESS()
This method returns the thread-local ess previously
registered using the method registerTraceId(curTraceId).
|
boolean |
recallThreadLocalInRequestIsEntryCall()
Returns the value of the ThreadLocal variable threadLocalInRequestIsEntryCall.
|
long |
recallThreadLocalInRequestTin()
This method returns the thread-local traceid previously
registered using the method registerTraceId(curTraceId).
|
boolean |
recallThreadLocalOutRequestIsEntryCall()
Returns the value of the ThreadLocal variable threadLocalOutRequestIsEntryCall.
|
long |
recallThreadLocalOutRequestTin()
This method returns the thread-local traceid previously
registered using the method registerTraceId(curTraceId).
|
void |
storeThreadLocalInRequestEOI(int eoi)
Used to explicitly register an eoi for an incoming SOAP request.
|
void |
storeThreadLocalInRequestESS(int ess)
Used to explicitly register an ess for an incoming SOAP request.
|
void |
storeThreadLocalInRequestIsEntryCall(boolean isEntry)
This method is used to store whether or not an incoming SOAP call
was the entry point to the current trace.
|
void |
storeThreadLocalInRequestTin(long tin)
Used to explicitly register the time tin of an incoming request.
|
void |
storeThreadLocalOutRequestIsEntryCall(boolean isEntry)
This method is used to store whether or not an outgoing SOAP call
was the entry point to the current trace.
|
void |
storeThreadLocalOutRequestTin(long tin)
Used to explicitly register the time tin of an outgoing request.
|
void |
unsetThreadLocalInRequestEOI()
This method unsets a previously registered eoi.
|
void |
unsetThreadLocalInRequestESS()
This method unsets a previously registered ess.
|
void |
unsetThreadLocalInRequestIsEntryCall()
This method unsets a previously registered variable isInRequestEntryCall.
|
void |
unsetThreadLocalInRequestTin()
This method unsets a previously registered entry time tin.
|
void |
unsetThreadLocalOutRequestIsEntryCall()
This method unsets a previously registered variable isOutRequestEntryCall.
|
void |
unsetThreadLocalOutRequestTin()
This method unsets a previously registered entry time tin.
|
public static final SOAPTraceRegistry getInstance()
public final void storeThreadLocalInRequestTin(long tin)
tin
- The tin time of the request.public final long recallThreadLocalInRequestTin()
public final void unsetThreadLocalInRequestTin()
public final void storeThreadLocalOutRequestTin(long tin)
tin
- The tin time of the request.public final long recallThreadLocalOutRequestTin()
public final void unsetThreadLocalOutRequestTin()
public final void storeThreadLocalInRequestIsEntryCall(boolean isEntry)
isEntry
- Determines whether the call was the entry point to the trace or not.public final boolean recallThreadLocalInRequestIsEntryCall()
public final void unsetThreadLocalInRequestIsEntryCall()
public final void storeThreadLocalOutRequestIsEntryCall(boolean isEntry)
isEntry
- Determines whether the call was the entry point to the trace or not.public final boolean recallThreadLocalOutRequestIsEntryCall()
public final void unsetThreadLocalOutRequestIsEntryCall()
public final void storeThreadLocalInRequestEOI(int eoi)
eoi
- The execution order index to store.public final int recallThreadLocalInRequestEOI()
public final void unsetThreadLocalInRequestEOI()
public final void storeThreadLocalInRequestESS(int ess)
ess
- The execution stack size to store.public final int recallThreadLocalInRequestESS()
public final void unsetThreadLocalInRequestESS()
Copyright 2017 Kieker Project, http://kieker-monitoring.net


The SNHC provides two services: a basic care-focused clinic on Saturday mornings and a specialty-care clinic Wednesday evenings.
| {{event.summary}} | {{ event.start.dateTime | date:"MMMM d, y h:mm" }} - {{event.end.dateTime | date: "h:mm a"}} |
The Saturday Neighborhood Health Clinic (SNHC) is a free clinic for the uninsured, run by medical students and staffed by physicians from Washington University School of Medicine in St. Louis, Missouri. We provide basic services much like those you would find at a primary care provider's office: preventative care, treatment of acute or chronic medical conditions, women's health, physical exams, vaccinations, referrals, and prescription refills, among others. We do not provide pediatric care, dental service, or referrals for dental care.
Any adult patient seeking our services is welcome at our clinic. However, SNHC is not currently equipped to function as a long-term medical home. We strongly encourage our patients to set up routine appointments with primary care physicians after visiting the SHNC. Please visit our resources page for help with finding medications and other local health centers.
The SNHC is located in the Forest Park Southeast neighborhood in St. Louis, Missouri. The clinic is held in the Family Health Care Center facility at 4352 Manchester Avenue on most Saturdays from 9:00AM to 12:00PM.
We do not take appointments. Patients are seen on a first come, first serve basis. Due to the limited number of staff members we have at the clinic, we can only see the first 9 patients who come in each Saturday. We encourage you to arrive as early as possible in order to ensure that you can be seen in a timely manner.
The Wednesday Specialty Nights provide free medical specialty services for uninsured patients. Specialty services currently include a depression and anxiety clinc located at 620 S Taylor Avenue on the fourth Wednesday of the month. The services offered vary by week, so please check our Google calendar for the most up to date information.


Implementation of Tyler, Critchley, Duembgen and Oja's (JRSS B, 2009, <doi:10.1111/j.1467-9868.2009.00706.x>) and Oja, Sirkia and Eriksson's (AJS, 2006, <http://www.ajs.or.at/index.php/ajs/article/view/vol35,%20no2%263%20-%207>) method of two different scatter matrices to obtain an invariant coordinate system or independent components, depending on the underlying assumptions.
| Version: | 1.3-1 |
| Depends: | R (≥ 2.5.0), methods, mvtnorm |
| Imports: | survey, graphics |
| Suggests: | pixmap, robustbase, MASS, ICSNP |
| Published: | 2018-03-03 |
| Author: | Klaus Nordhausen, Hannu Oja, David E. Tyler |
| Maintainer: | Klaus Nordhausen <klaus.nordhausen at tuwien.ac.at> |
| License: | GPL-2 | GPL-3 [expanded from: GPL (≥ 2)] |
| NeedsCompilation: | no |
| Citation: | ICS citation info |
| In views: | Multivariate |
| CRAN checks: | ICS results |
| Reference manual: | ICS.pdf |
| Vignettes: |
Tools for Exploring Multivariate Data: The Package ICS |
| Package source: | ICS_1.3-1.tar.gz |
| Windows binaries: | r-devel: ICS_1.3-1.zip, r-release: ICS_1.3-1.zip, r-oldrel: ICS_1.3-1.zip |
| OS X binaries: | r-release: ICS_1.3-1.tgz, r-oldrel: ICS_1.3-1.tgz |
| Old sources: | ICS archive |
| Reverse depends: | ICSNP, ICSOutlier, ICSShiny, ICtest, OjaNP |
| Reverse imports: | MNM |
| Reverse suggests: | JADE |
| Reverse enhances: | robustX |
Please use the canonical form https://CRAN.R-project.org/package=ICS to link to this page.


- Generating technical contributions to proposals and whitepapers
- Providing project management support
- Helping tech leads develop and maintain artifacts of the design process, including requirements tracking and design review packages
- Brainstorming and ideating as part of the product development process
- Analyzing and reporting on competitive technical specifications


Komodo
talk-trading
A channel to discuss trading. For useful links and more info click the pinned messages to the right.
100 messages
Before 05-Dec-19 12:00 AM
Tek
17-Apr-19 01:19 PM
not sure
I think whalebro is back
Hollowman9000
17-Apr-19 01:19 PM
BTC
klein
17-Apr-19 01:20 PM
kmd/usdt isn;t a listed pair
on binance
Tek
17-Apr-19 01:20 PM
strap in bois
dokrates
17-Apr-19 01:20 PM
who is whalebro?
Tek
17-Apr-19 01:21 PM
misterious dude who regularly puts 100 btc buy walls for kmd
past half year or so
klein
17-Apr-19 01:21 PM
interesting
dokrates
17-Apr-19 01:21 PM
wow
any idea about who is him?
Tek
17-Apr-19 01:22 PM
not sure
klein
17-Apr-19 01:22 PM
haven't watched the kmd orderbook for that long to notice
p.
17-Apr-19 01:22 PM
dont see any plebs getting their 1900sat kmd any time soon
Tek
17-Apr-19 01:22 PM
i have a collection of whalebro screenshots
wait i'll upload them
klein
17-Apr-19 01:22 PM
excellent
dokrates
17-Apr-19 01:22 PM
yes, please
CoinKing88
17-Apr-19 01:23 PM
buywall gone
Tek
17-Apr-19 01:23 PM
here
https://imgur.com/a/WzWo3LM
CoinKing88
17-Apr-19 01:23 PM
it back
dokrates
17-Apr-19 01:24 PM
wow
CoinKing88
17-Apr-19 01:24 PM
Ha some1 put a sellwall @ 100K sats for a whopping 70 KMD, moonboy
Tek
17-Apr-19 01:24 PM
lmao
if you click on the imgur link / galary theres a few more screenoshot
dokrates
17-Apr-19 01:25 PM
did he wrote in here any time? or is he shy?
Tek
17-Apr-19 01:26 PM
no one really knows who he is
CoinKing88
17-Apr-19 01:26 PM
He speaks through the orderbook, buywalls when happy, marketsells when sad
Tek
17-Apr-19 01:26 PM
but the buy orders on KMD started popping up after the "100k buttcoins tied to alphabay"
started moving
Malti
17-Apr-19 01:26 PM
is he active on binance or trex?
Tek
17-Apr-19 01:26 PM
nance
Hollowman9000
17-Apr-19 01:27 PM
Does anybody remember KMD all time low?
Hollow farms remembers
http://i68.tinypic.com/xp1mo8.jpg
Tek
17-Apr-19 01:27 PM
wew
Hollowman9000
17-Apr-19 01:28 PM
That was a rage quit when something went wrong shortly after launch
I forget what it was
Tek
17-Apr-19 01:28 PM
m glad KMD is moving again
for a bit I was starting to get worried
Keppie
17-Apr-19 01:29 PM
JL sure got himself a nice deal if he bought 40btc worth last few days
klein
17-Apr-19 01:29 PM
50btc
Keppie
17-Apr-19 01:29 PM
Great macro trade if this is the bounce
Tek
17-Apr-19 01:30 PM
think it will push on
Q.
17-Apr-19 01:30 PM
needs volume
Kitchen Table
17-Apr-19 01:30 PM
Does Binance receive vote coins as well? CZ could be a NN by default if he wanted to.
Hollowman9000
17-Apr-19 01:31 PM
Unless they know the binance addresses then I would assume so
Keppie
17-Apr-19 01:31 PM
Only coins hold in wallets i believe
Tek
17-Apr-19 01:32 PM
what yall think about Iexec RLC?
Hollowman9000
17-Apr-19 01:32 PM
Never heard of it
Tek
17-Apr-19 01:32 PM
wtf
Keppie
17-Apr-19 01:32 PM
wallets you hold the private keys to i mean
Cryptoon
17-Apr-19 01:32 PM
whalebro has enough of these discount prices
30BTC buywall at 22k
Tek
17-Apr-19 01:32 PM
tijd voor maan : D
Keppie
17-Apr-19 01:32 PM
oh NL
Hollowman9000
17-Apr-19 01:33 PM
You think binance doesn’t hold the priv keys to the addresses they use?
Not sure how that works
Keppie
17-Apr-19 01:33 PM
Binance does, user doesnt
Hollowman9000
17-Apr-19 01:33 PM
Of course
Cryptoon
17-Apr-19 01:33 PM
What if
Binance created a dex
just so they regain control of their private keys
!!!!!!!
Keppie
17-Apr-19 01:34 PM
btw, what's the progress on the website rebrand? Had no time to check the other channels lately
Cryptoon
17-Apr-19 01:34 PM
it's moving along
but it has a lot of moving parts
siu - Chainmakers
17-Apr-19 01:35 PM
@Tek
latest agama latest release has a voting tool
Cryptoon
17-Apr-19 01:35 PM
and everything needs to be right before they release it
CoinKing88
17-Apr-19 01:35 PM
110BTC sellwall @ 35000 sats
Whalebro has betrayed ys
dokrates
17-Apr-19 01:36 PM
the buys are endless
Keppie
17-Apr-19 01:36 PM
huobi 24k
but yea, we need volume
CoinKing88
17-Apr-19 01:37 PM
This happened to Nano to a few days ago, next day Binance announced a usdt pair
p.
17-Apr-19 01:37 PM
that would be noooiiice
Tek
17-Apr-19 01:37 PM
kmd and nano i both picked up this bear market
CoinKing88
17-Apr-19 01:37 PM
Maybe thats the case too, they annouance ENJ today
Kitchen Table
17-Apr-19 01:37 PM
That is a lot of reward to miss out on unless 350k kmd is only 10% of your holdings.

CoinKing88
17-Apr-19 01:40 PM
those 3 girls wanted to see your Nano Balance first i assume?
 Sounds a lot like you're buying drugs of of them
ComputerGenie 👴👴👴
17-Apr-19 01:40 PM
>Hi, I'm a DASH trader, may I buy you a drink
1
CoinKing88
17-Apr-19 01:40 PM
Haha, dont just pay for their drink @ the bar, NO send crypto so they can buy it for themselves
Tek
17-Apr-19 01:40 PM
srs if your wallet is so easy that girls in clubs can accept nano in under 3 minutes
and mail themselves the recovery seed
and they all understand
and these girls werent smart
rite


Hayward Credenza
from $1,829.00
Hedge House is an independent furniture company focused on functional design and understated silhouettes. Every piece of furniture is made to order and handcrafted by local artisans.
Click here to read what our customers have to say.
from $1,829.00
from $1,449.00
from $1,399.00


--- layout: post title: Multiplying Your Impact Through Mentoring at Chicago Roboto ---
I recently presented an updated version of my "Multiplying Your Impact Through Mentoring" presentation at Chicago Roboto. The audience had some really great questions which made me realize I need to think more deeply about some aspects of mentoring and update my presentation the next time around. The slides that I presented are below


CCNA Routing and Switching Lodz University of Technology, PL2014 Cisco Certified Network Associate ( CCNA ) in Routing and Switching


[gecode-users] QuickXplain implementation for Gecode/Flatzinc
Adriane Boyd
adriane at ling.ohio-state.edu
Thu Dec 2 14:39:47 CET 2010
Hi,
In case it could be useful for others, I wanted to share an implementation
of QuickXplain that I wrote for Gecode/FlatZinc. I've made it available
as a patch for Gecode 3.4.2 here:
http://www.ling.ohio-state.edu/~adriane/code/gecode/fz-qx-3.4.2-0.1.patch
The patch adds the executable fz-qx, which implements the QuickXplain
algorithm from Junker (2001). fz-qx prints out the set of conflicting
constraints as a list of constraint IDs, which correspond to the position
of the constraints in the flatzinc input. The patch extends the flatzinc
parser and space so that constraints that have just been parsed can be
stored as part of the space instead of being posted immediately. This
makes it possible for fz-qx to clone a space with its stored constraints
and post subsets of constraints as needed for QuickXplain.
The output could certainly be more user-friendly, but I figured that most
users would need to customize the output for their own applications
anyway. (An obvious next step would be to modify the flatzinc parser and
data structures so that you can store/generate human-readable versions of
constraints.)
Please feel free to let me know if you find any bugs or have suggestions
for improvements!
Adriane Boyd
More information about the users
mailing list


Adding this middleware to the Owin pipeline
builder.Register(ninject.Get<OwinFramework.Documenter.DocumenterMiddleware>())
.As("Documenter")
.ConfigureWith(config, "/owinFramework/middleware/documenter");
The assumes that you are using Ninject as your IoC container, and followed the
getting started walkthrough. If this is not the case
then you will need to adjust the code to work in your application.
Default Configuration
The configuration below is the configuration you will get by default if you do not provide
a configuration for this middleware.
{
"owinFramework": {
"middleware": {
"documenter": {
"path": "/owin/endpoints",
"enabled": true,
"requiredPermission": null,
"localFilePath ": ""
}
}
}
}
Configuration Notes
-
The "path" configuration specifies the relative URL within your web site
where the documentation will be available at run-time. If you are using
routes in your Owin pipeline then you must make sure that the documenter
middleware is on a route where it will receive requests for this URL.
-
In a publically accessible website you probably do not want to expose
documentation for all of the endpoints unless this is a public API and
you actually want to supply end users with documentation. To disable in
production either set the "enabled" property to false, or configure
Identification and Authorization middleware then set the "requiredPermission"
to the name of a permission that users must have to see the documentation.
-
The "localFilePath" specifies a location on the file system where you
placed an alternate set of templates. If you do not provide any templates
then the built-in ones will be used by default. The built-in templates are
embedded into the assembly so their are no additional files to deploy.


#import "../base.html" as layout /><EMAIL_ADDRESS>title="index">
Materialize, a CSS Framework based on material design. (MIT) Copyright (c) 2014-2017 Materialize http://materializecss.com
InputMask, Inputmask is a javascript library which creates an input mask. (MIT) Copyright (c) 2010 - 2017 Robin Herbots https://github.com/RobinHerbots/Inputmask
jQuery, New Wave Javascript. Copyright JS Foundation and other contributors, https://js.foundation https://jquery.com
jxBrowser, a Chromium-based Swing/JavaFX component. (Commercial) https://www.teamdev.com/jxbrowser
Spark Framework, an expressive web framework for Kotlin and Java. (Apache 2 License) Copyright (c) 2011-2015 Per Wendel http://sparkjava.com
FreeMarker, a Java template engine library. (Apache 2 License) Copyright (c) 1999–2017 The Apache Software Foundation http://freemarker.org
Are you sure to quit DevHelp?
The program will no longer be active, you would need to restart the application to start using DevHelp again.


Across: 1. Lucas lay about in a careless manner (8) 5,20. PM proposed legislation get returned, hamstring briefly restraining caucus leader at work (5 7) 9. Soft, unassertive, half-quisling at heart (7) 10. Student loan initially something that provides good money (7) 11. Politicians all working for the working man somehow, bar Tory pal (5 5) 12. Table arrangements, not taking long to get a second (4) 14. see 29 16. Produce the start of something special to value (7) 18. Part for hearing? (3) 19. see 6 down 20. see 5 22. One who aims for similar ends, personally and politically (4) 24. Absurd Herald Sun (rip up!) pieces out to show they resist any 30 (10) 27. 3 11 campaign slogan in 1972: "I test... I'm better!" (2'1 4) 28. Like a less secret cabinet? Like every analyst knowing its every rumbling? Every lead? (7) 29,14. Reformer embraced in 1972: changing law got him hug! (5 7) 30. Alas, revered some backward type of crossword clue! (8) Down: 1. About Wales, about precedent (4 3) 2. Argues against keeping its local branch leaders, turning more like one wanting to wield a razor (9) 3. From a land with many beaches to have a swim and a run at & sail about (10) 4. Some play lame Clapton hit (5) 5. Hit track for Police? (4) 6,19ac. 29's deputy hit can... and barrel! (5 7) 7. Distance one kept in gay red outfit (7) 8. Revolutionary! 3 11 having the leadership for major set of policies! (8) 13. Thrown mud a virtue for 29 14 and 6 19 across perhaps (10) 15. Dead time ruined assisted talks (8) 17. Among other things, running his cattle all over the place (9) 19. Flagrant boy lying around (7) 21. Neat opening or slit arranged, which permits air (7) 23. Violas superbly delivering slow section of a csárdás folk dance (5) 25. Dig deep when harshly levied with start of interest taken (5) 26. Up, having gotten into hemp heads? (4)


awesome-nix
A curated list of the best resources in the Nix community
Please read the contribution guidelines before contributing.
Resources
Learning
- Nix Pills - The best way to learn by examples.
Newsletters
- NixOS Weekly - The best newsletter to stay informed about community updates.
Cloud stuff
- nixops - Deploy using Nix.
- terraform-nixos - A set of Terraform modules that are designed to deploy NixOS.
- kubenix - Kubernetes resource builder using nix.
- nixos-generators - one config, multiple formats.
Command-line tools
- nix-index - Quickly locate nix packages with specific files.
- nix-prefetch - Universal tool to update source checksums
Development
- lorri - A much better
nix-shell
for development. - nix-review - The best tool to verify that a pull-request in nixpkgs is building properly.
- niv - Easy dependency management for Nix projects.
Programming languages
Elm
- Nix Elm Tools - Elm language community tooling for Nix and NixOS users.
Haskell
- cabal2nix - Converts a Cabal file into a Nix build expression.
- snack - Nix-based incremental build tool for Haskell projects.
- stack2nix - Generate nix expressions for Haskell projects.
NodeJS
- napalm - Support for building npm packages in Nix and lightweight npm registry.
- yarn2nix - Generate nix expressions from a yarn.lock file.
- node2nix
Python
- pypi2nix - Generate Nix expressions for Python packages
Ruby
- bundix - Generates a Nix expression for your Bundler-managed application.
Rust
- carnix - Carnix is a compiler from the Cargo.lock files produced by cargo to Nix expressions.
Overlays
- NUR - Nix User Repositories. The mother of all overlays.
- home-manager - Manager user configuration just like NixOS.
- nix-darwin - Manage macOS configuration just like on NixOS.
- nixpkgs-mozilla - Mozilla’s overlay with bleeding Rust and Firefox.
- nixpkgs-wayland - Bleeding edge Wayland packages.
- nix-bitcoin - Nix packages and nixos modules for Bitcoin nodes with higher layer protocols with an emphasis on security.


This example contains both direct and indirect left recursion (consider how expr appears on the left side of term). Let's see how Takmela deals with it.
Interestingly, the algorithm doesn't know or care that there's left recursion in the grammar, as far as it is concerned it's just another parsing job.
Grammarexpr : expr '+' term | term ; term : NUM | ID | expr '.' ID '(' expr ')' ; ID : [a-zA-Z]+; NUM: [0-9]+; WS skip: ' '*;Input
x.apply(5) + y
Trace appears confusing? This might help
{{trace_is_here}}


Move
Gear
Login
Log in to MOVE
Sign in
Section 1
Contents
Section 2
Contents
Section 3
Contents
Better. Faster. Stronger. You
A wide range of sporting gear especially designed to maximize your performance.


--- title: A quote from Guido van Rossum date: 2009-02-23 22:11:04 +1100 modified: 2009-02-24 09:11:04 +1100 uid: http://paul.annesley.cc/articles/2009/02/23/guido-van-rossum-owned layout: post ---
Although I had hoped to provide something similar in Python, it quickly became clear that such an approach would be impossible because there was no way to elegantly distinguish instance variables from local variables in a language without variable declarations.
— Guido van Rossum, The History of Python: Adding Support for User-defined Classes
# The Greeter class class Greeter def initialize(name) @name = name.capitalize end def salute puts "Hello #{@name}!" end end
— Ruby example, ruby-lang.org front page
Owned.


To add an IngresDataAdapter Control Using the Forms Designer
In Design view of Visual Studio, select and drag the IngresDataAdapter from the Tool Box onto the Windows Form design surface.
An "ingresDataAdaptern" component and its icon are added to the Visual Studio .NET designer component tray.
The welcome page of the Data Adapter Configuration Wizard is displayed.
You must configure a connection string before connecting to a database using a .NET application.
To define a connection string
Enter the connection information using the Connection String Editor of the Ingres Data Adapter Configuration Wizard, and click OK:
The wizard generates the following connection string:
Host=(local);Port=II7;Database=demodb
Note: User ID and password are optional when connecting to a local Data Access Server and the current operating system logged-in user is also a valid Ingres user.
Note: Each IngresDataAdapter added to the project creates an IngresConnection object. For the purposes of this demonstration, the ingresConnection1 object (first connection object created) is used for each IngresDataAdapter added.