Email Class
CodeIgniter’s robust Email Class supports the following features:
Multiple Protocols: Mail, Sendmail, and SMTP
TLS and SSL Encryption for SMTP
Multiple recipients
CC and BCCs
HTML or Plaintext email
Attachments
Word wrapping
Priorities
BCC Batch Mode, enabling large email lists to be broken into small BCC batches.
Email Debugging tools
Using the Email Library
Sending Email
Sending email is not only simple, but you can configure it on the fly or set your preferences in the app/Config/Email.php file.
Here is a basic example demonstrating how you might send email:
<?php
$email = \Config\Services::email();
<EMAIL_ADDRESS>'Your Name');
$email->setTo('someone@example.com');
$email->setCC('another@another-example.com');
$email->setBCC('them@their-example.com');
$email->setSubject('Email Test');
$email->setMessage('Testing the email class.');
$email->send();
Setting Email Preferences
There are 21 different preferences available to tailor how your email messages are sent. You can either set them manually as described here, or automatically via preferences stored in your config file, described below:
Setting Email Preferences by Passing an Array
Preferences are set by passing an array of preference values to the email initialize method. Here is an example of how you might set some preferences:
<?php
$config['protocol'] = 'sendmail';
$config['mailPath'] = '/usr/sbin/sendmail';
$config['charset'] = 'iso-8859-1';
$config['wordWrap'] = true;
$email->initialize($config);
Note
Most of the preferences have default values that will be used if you do not set them.
Setting Email Preferences in a Config File
If you prefer not to set preferences using the above method, you can
instead put them into the config file. Simply open the
app/Config/Email.php file, and set your configs in the
Email properties. Then save the file and it will be used automatically.
You will NOT need to use the $email->initialize()
method if
you set your preferences in the config file.
SSL versus TLS for SMTP Protocol
To protect the username, password and email content while communicating with the SMTP server, encryption on the channel should be used. Two different standards are widely deployed and it is important to understand the differences when trying to troubleshoot email sending issues.
Most SMTP servers allow connections on ports 465 or 587 when submitting emails. (The original port 25 is seldom used because of many ISPs have blocking rules in place and since the communication is entirely in clear-text).
The key difference is that port 465 expects the communication channel to be secured using TLS
from the start as per RFC 8314.
A connection to port 587 allows clear-text connection and later
will upgrade the channel to use encryption using the STARTTLS
SMTP command.
Upgrading a connection on port 465 may or may not be supported by the server, so the
STARTTLS
SMTP command may fail if the server does not allow it. If you set the port to 465,
you should try to leave the SMTPCrypto
setting blank since the communication is
secured using TLS from the start and the STARTTLS
is not needed.
If your configuration requires you to connect to port 587, you should most likely set
SMTPCrypto
to tls
as this will implement the STARTTLS
command while communicating
with the SMTP server to switch from clear-text to an encrypted channel. The initial communication
will be made in clear-text and the channel will be upgraded to TLS with the STARTTLS
command.
Reviewing Preferences
The settings used for the last successful send are available from the
instance property $archive
. This is helpful for testing and debugging
to determine that actual values at the time of the send()
call.
Email Preferences
The following is a list of all the preferences that can be set when sending email.
Preference |
Default Value |
Options |
Description |
|---|---|---|---|
userAgent |
CodeIgniter |
None |
The “user agent”. |
protocol |
mail, sendmail, or smtp |
The mail sending protocol. |
|
mailPath |
/usr/sbin/sendmail |
None |
The server path to Sendmail. |
SMTPHost |
No Default |
None |
SMTP Server Address. |
SMTPUser |
No Default |
None |
SMTP Username. |
SMTPPass |
No Default |
None |
SMTP Password. |
SMTPPort |
25 |
None |
SMTP Port. (If set to 465, TLS will be used for the connection regardless of SMTPCrypto setting.) |
SMTPTimeout |
5 |
None |
SMTP Timeout (in seconds). |
SMTPKeepAlive |
false |
true or false (boolean) |
Enable persistent SMTP connections. |
SMTPCrypto |
No Default |
tls or ssl |
SMTP Encryption. Setting this to “ssl” will create a secure
channel to the server using SSL and “tls” will issue a
|
wordWrap |
true |
true or false (boolean) |
Enable word-wrap. |
wrapChars |
76 |
Character count to wrap at. |
|
mailType |
text |
text or html |
Type of mail. If you send HTML email you must send it as a complete web page. Make sure you don’t have any relative links or relative image paths otherwise they will not work. |
charset |
utf-8 |
Character set (utf-8, iso-8859-1, etc.). |
|
validate |
true |
true or false (boolean) |
Whether to validate the email address. |
priority |
3 |
1, 2, 3, 4, 5 |
Email Priority. 1 = highest. 5 = lowest. 3 = normal. |
CRLF |
\n |
“\r\n” or “\n” or “\r” |
Newline character. (Use “\r\n” to comply with RFC 822). |
newline |
\n |
“\r\n” or “\n” or “\r” |
Newline character. (Use “\r\n” to comply with RFC 822). |
BCCBatchMode |
false |
true or false (boolean) |
Enable BCC Batch Mode. |
BCCBatchSize |
200 |
None |
Number of emails in each BCC batch. |
DSN |
false |
true or false (boolean) |
Enable notify message from server |
Overriding Word Wrapping
If you have word wrapping enabled (recommended to comply with RFC 822) and you have a very long link in your email it can get wrapped too, causing it to become un-clickable by the person receiving it. CodeIgniter lets you manually override word wrapping within part of your message like this:
The text of your email that
gets wrapped normally.
{unwrap}http://example.com/a_long_link_that_should_not_be_wrapped.html{/unwrap}
More text that will be
wrapped normally.
Place the item you do not want word-wrapped between: {unwrap} {/unwrap}
Class Reference
- class CodeIgniter\Email\Email
- setFrom($from[, $name = ''[, $returnPath = null]])
- Parameters
$from (
string
) – “From” e-mail address$name (
string
) – “From” display name$returnPath (
string
) – Optional email address to redirect undelivered e-mail to
- Returns
CodeIgniter\Email\Email instance (method chaining)
- Return type
Sets the email address and name of the person sending the email:
<?php<EMAIL_ADDRESS>'Your Name');
You can also set a Return-Path, to help redirect undelivered mail:
<?php<EMAIL_ADDRESS>'Your Name', 'returned_emails@example.com');
Note
Return-Path can’t be used if you’ve configured ‘smtp’ as your protocol.
- setReplyTo($replyto[, $name = ''])
- Parameters
$replyto (
string
) – E-mail address for replies$name (
string
) – Display name for the reply-to e-mail address
- Returns
CodeIgniter\Email\Email instance (method chaining)
- Return type
Sets the reply-to address. If the information is not provided the information in the setFrom method is used. Example:
<?php<EMAIL_ADDRESS>'Your Name');
- setTo($to)
- Parameters
$to (
mixed
) – Comma-delimited string or an array of e-mail addresses
- Returns
CodeIgniter\Email\Email instance (method chaining)
- Return type
Sets the email address(s) of the recipient(s). Can be a single e-mail, a comma-delimited list or an array:
<?php $email->setTo('someone@example.com');
<?php<EMAIL_ADDRESS><EMAIL_ADDRESS>three@example.com');
<?php<EMAIL_ADDRESS><EMAIL_ADDRESS>'three@example.com']);
- setCC($cc)
- Parameters
$cc (
mixed
) – Comma-delimited string or an array of e-mail addresses
- Returns
CodeIgniter\Email\Email instance (method chaining)
- Return type
Sets the CC email address(s). Just like the “to”, can be a single e-mail, a comma-delimited list or an array.
- setBCC($bcc[, $limit = ''])
- Parameters
$bcc (
mixed
) – Comma-delimited string or an array of e-mail addresses$limit (
int
) – Maximum number of e-mails to send per batch
- Returns
CodeIgniter\Email\Email instance (method chaining)
- Return type
Sets the BCC email address(s). Just like the
setTo()
method, can be a single e-mail, a comma-delimited list or an array.If
$limit
is set, “batch mode” will be enabled, which will send the emails to batches, with each batch not exceeding the specified$limit
.
- setSubject($subject)
- Parameters
$subject (
string
) – E-mail subject line
- Returns
CodeIgniter\Email\Email instance (method chaining)
- Return type
Sets the email subject:
<?php $email->setSubject('This is my subject');
- setMessage($body)
- Parameters
$body (
string
) – E-mail message body
- Returns
CodeIgniter\Email\Email instance (method chaining)
- Return type
Sets the e-mail message body:
<?php $email->setMessage('This is my message');
- setAltMessage($str)
- Parameters
$str (
string
) – Alternative e-mail message body
- Returns
CodeIgniter\Email\Email instance (method chaining)
- Return type
Sets the alternative e-mail message body:
<?php $email->setAltMessage('This is the alternative message');
This is an optional message string which can be used if you send HTML formatted email. It lets you specify an alternative message with no HTML formatting which is added to the header string for people who do not accept HTML email. If you do not set your own message CodeIgniter will extract the message from your HTML email and strip the tags.
- setHeader($header, $value)
- Parameters
$header (
string
) – Header name$value (
string
) – Header value
- Returns
CodeIgniter\Email\Email instance (method chaining)
- Return type
Appends additional headers to the e-mail:
<?php $email->setHeader('Header1', 'Value1'); $email->setHeader('Header2', 'Value2');
- clear($clearAttachments = false)
- Parameters
$clearAttachments (
bool
) – Whether or not to clear attachments
- Returns
CodeIgniter\Email\Email instance (method chaining)
- Return type
Initializes all the email variables to an empty state. This method is intended for use if you run the email sending method in a loop, permitting the data to be reset between cycles.
<?php foreach ($list as $name => $address) { $email->clear(); $email->setTo($address); $email->setFrom('your@example.com'); $email->setSubject('Here is your info ' . $name); $email->setMessage('Hi ' . $name . ' Here is the info you requested.'); $email->send(); }
If you set the parameter to true any attachments will be cleared as well:
<?php $email->clear(true);
- send($autoClear = true)
- Parameters
$autoClear (
bool
) – Whether to clear message data automatically
- Returns
true on success, false on failure
- Return type
bool
The e-mail sending method. Returns boolean true or false based on success or failure, enabling it to be used conditionally:
<?php if (! $email->send()) { // Generate error }
This method will automatically clear all parameters if the request was successful. To stop this behaviour pass false:
<?php if ($email->send(false)) { // Parameters won't be cleared }
Note
In order to use the
printDebugger()
method, you need to avoid clearing the email parameters.Note
If
BCCBatchMode
is enabled, and there are more thanBCCBatchSize
recipients, this method will always return booleantrue
.
- attach($filename[, $disposition = ''[, $newname = null[, $mime = '']]])
- Parameters
$filename (
string
) – File name$disposition (
string
) – ‘disposition’ of the attachment. Most email clients make their own decision regardless of the MIME specification used here. https://www.iana.org/assignments/cont-disp/cont-disp.xhtml$newname (
string
) – Custom file name to use in the e-mail$mime (
string
) – MIME type to use (useful for buffered data)
- Returns
CodeIgniter\Email\Email instance (method chaining)
- Return type
Enables you to send an attachment. Put the file path/name in the first parameter. For multiple attachments use the method multiple times. For example:
<?php $email->attach('/path/to/photo1.jpg'); $email->attach('/path/to/photo2.jpg'); $email->attach('/path/to/photo3.jpg');
To use the default disposition (attachment), leave the second parameter blank, otherwise use a custom disposition:
<?php $email->attach('image.jpg', 'inline');
You can also use a URL:
<?php $email->attach('http://example.com/filename.pdf');
If you’d like to use a custom file name, you can use the third parameter:
<?php $email->attach('filename.pdf', 'attachment', 'report.pdf');
If you need to use a buffer string instead of a real - physical - file you can use the first parameter as buffer, the third parameter as file name and the fourth parameter as mime-type:
<?php $email->attach($buffer, 'attachment', 'report.pdf', 'application/pdf');
- setAttachmentCID($filename)
- Parameters
$filename (
string
) – Existing attachment filename
- Returns
Attachment Content-ID or false if not found
- Return type
string
Sets and returns an attachment’s Content-ID, which enables your to embed an inline (picture) attachment into HTML. First parameter must be the already attached file name.
<?php $filename = '/img/photo1.jpg'; $email->attach($filename); foreach ($list as $address) { $email->setTo($address); $cid = $email->setAttachmentCID($filename); $email->setMessage('<img src="cid:' . $cid . '" alt="photo1">'); $email->send(); }
Note
Content-ID for each e-mail must be re-created for it to be unique.
- printDebugger($include = ['headers', 'subject', 'body'])
- Parameters
$include (
array
) – Which parts of the message to print out
- Returns
Formatted debug data
- Return type
string
Returns a string containing any server messages, the email headers, and the email message. Useful for debugging.
You can optionally specify which parts of the message should be printed. Valid options are: headers, subject, body.
Example:
<?php // You need to pass false while sending in order for the email data // to not be cleared - if that happens, printDebugger() would have // nothing to output. $email->send(false); // Will only print the email headers, excluding the message subject and body $email->printDebugger(['headers']);
Note
By default, all of the raw data will be printed.


--- layout: post title: How to create a customized Google+ Share button date: 2011-11-14 00:37:54.000000000 +01:00 type: post published: true status: publish categories: - Coding tags: - google - widget meta: _thumbnail_id: '1387' _edit_last: '1' _syntaxhighlighter_encoded: '1' dsq_thread_id: '496927408' author: login: bbWebdesign email<EMAIL_ADDRESS>display_name: Bob first_name: Bob last_name: Belderbos ---
A quick post about something I was looking for some time, a way to share links to Google+ from outside their service. There are two interesting options available now.
 I went with different share buttons solutions in the past but I found them too cluttered. Hence the small black buttons for Twitter and Facebook at the top and bottom. I also wanted Google+ to join the game, but the +1 button did not present you with options for sharing (message box, your circles). Most important was that the +1 button did not fit my web design. It seemed that there was not an easy way to share URLs from outside Google+.
I did a new search today and I was pleasantly surprised that solutions are available now:
So big thanks to Alex Moss and AJ Batac for developing this!
I choose the 2nd solution for now and as you see I have my own small Plus button above and below this article :)
JS will dynamically grab the active URL and title, and Google+ finds the metainfo (similar to Facebook Like which does this somewhat better to my taste)
I added spaces for clarity :

  Share to Google+

By the way, this is an interesting article about bookmarklets
The above code doesn't seem to work anymore so I tweaked it based on this entry on Stackoverflow, see code below. There is a share link now that works well, plus a bit of JS to have it in a popup. If you want to test it, you can click the black plus button (after the Facebook one) at the top and bottom of this article.
# HTML    .. $postmeta .= ''; .. # JS


{% extends "report_base.html" %} {% block reportContent %}
| Team # | MechD | Prog | S & I | BotP | Res | IS | Pres | Insp | Team | GP | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ team.number }} | {% if team.technical != None %}{{ "%0.2f" % team.technical.mechanical_score }} | {{ "%0.2f" % team.technical.programming_score }} | {{ "%0.2f" % team.technical.strategy_innovation_score }} | {% else %}{% endif %} {% if team.best != None %} | {{ "%0.2f" % team.best.total }} | {% else %}{% endif %} {% if team.presentation != None %} | {{ "%0.2f" % team.presentation.research_score }} | {{ "%0.2f" % team.presentation.innovative_solution_score }} | {{ "%0.2f" % team.presentation.presentation_score }} | {% else %}{% endif %} {% if team.core_values != None %} | {{ "%0.2f" % team.core_values.inspiration_score }} | {{ "%0.2f" % team.core_values.teamwork_score }} | {{ "%0.2f" % team.core_values.gp_score }} | {% else %}{% endif %} |


The usage of the DNS root servers is tracked by measuring the number of requests to the root for non-existing TLD (M3.1) and the number of requests to the root that would not have been necessary if the DNS resolvers cached the previous replies (M3.2). The number of requests that would be necessary in any case is given by the difference: 100% - M3.1 - M3.2. The causes for "name leaks" is further explained by metrics M3.3. The patterns of 2nd level names in queries are tracked by metric M3.7. The relative importance of Chromioids is tracked by metric M3.9. The number of name parts in queries is tracked by metric M3.10. In addition, the characteristics such as usage of EDNS, DNSSEC or QNAME minimizations are tracked by metrics M3.4, M3.5 and M3.6.
The following table provides the value observed for the metrics in the current month, as well as the average value over the 3 previous months, and the "historical" minimum and maximum observed since the beginning of the measurements.
| Metric | Current Value | Past 3 months | Historic Low | Historic High | ||
|---|---|---|---|---|---|---|
| M3.1 (% No Such Domain queries) (?) | - | - | - | - | ||
| M3.2 (% cacheable queries) (?) | - | - | - | - | ||
| Core (100% - M3.1 - M3.2) (?) | - | - | - | - |
The following graph shows the evolution of M3.1 and M3.2 over time:
The number of requests to non-existing TLD, or “leaks”, is further explained by a set of sub-metrics measuring various forms of name leakage, including requests for special-used TLD registered per RFC 6761 (M3.3.1), requests for frequently used name strings (M3.3.2), requests for various forms of automatically generated names (M3.3.3), and all other forms of names, including malformed names (M3.3.4).
The following table provides the value observed for the metrics in the current month, as well as the average value over the 3 previous months, and the "historical" minimum and maximum observed since the beginning of the measurements.
| Metric | Current Value | Past 3 months | Historic Low | Historic High | ||
|---|---|---|---|---|---|---|
| M3.3.1 (% Queries to RFC 6761 reserved names) (?) | - | - | - | - | ||
| M3.3.2 (% Queries to frequently leaked strings) (?) | - | - | - | - | ||
| M3.3.3 (% Queries to frequently found name patterns) (?) | - | - | - | - | ||
| M3.3.4(% Queries to other types of names) | - | - | - | - |
The following tables provide the list of strings or patterns most frequently encountered as part of M3.3.1, M3.3.2, and M3.3.3.
In the following table, the current value is the fraction of queries to the root directed at RFC 6761 names in the current month. The table also provides the average value over the 3 previous months, and the "historical" minimum and maximum observed since the beginning of the measurements.
In the following table, the current value is the fraction of queries to the root directed at frequently used strings in the current month. The table also provides the average value over the 3 previous months, and the "historical" minimum and maximum observed since the beginning of the measurements.
In the following table, the current value is the fraction of queries to the root following a specific name pattern in the current month. The table also provides the average value over the 3 previous months, and the "historical" minimum and maximum observed since the beginning of the measurements.
The metric M3.9 tracks the fraction of queries that are sent to names dynamically generated using the algorithm implemented in Chromium browser:
| Metric | Current Value | Past 3 months | Historic Low | Historic High |
|---|---|---|---|---|
| M3.9 (% Queries to Chromiods) (?) | - | - | - | - |
The following graph shows the evolution of the fraction of Chromioids in root queries over time.
The metric M3.10 tracks classifies the queries seen at the root by the number of name parts in the target name of the query. For each number of name parts, the metric tracks the fraction of of queries with target names having that number of parts.
In the following table, the current value is the fraction of NX Domain queries to the root in which specific 2nd level name parts were found in the current month. The table also provides the average value over the 3 previous months, and the "historical" minimum and maximum observed since the beginning of the measurements.
Additional metrics characterize the options found in queries sent to the root, such as whether resolvers use extended DNS (M3.4.1), what EDNS options they use (M3.4.2), whether they set the DNSSEC OK bit in queries (M3.5), and whether they appear to enforce QName Minimization (M3.6)


At Whitecliffe, I faced many challenges to completing my projects. I had to possess good time management skills, a lot of money, hard work and produce high standards of work. The projects can be described as tedious and the briefs were written in advanced language which you would have to decypher.For a beginner like myself, the standards expected of me were out of my league and I often felt lost with some of my projects at Whitecliffe. Out of the three years that I studied there, I will admit that it taught me to work hard and I thrived on that challenge.I picked up many skills and grew to love the projects. Although it was difficult at times with my work, I don't regret gaining an education in graphic design which will be helpful with my learning journey at Dev academy.


Someone has successfully run a static web site as a Tor Hidden Service, with a little help from PyPy, Twisted, txtorcon, and Docker.
You can do it too!


These lectures are named in honour of Dr. William Feindel (1918–2014), Former Director of the Neuro (1972–1984) and Founding Director of the BIC (1984–1988). Dr. Feindel’s presence and contribution will be greatly missed at our weekly Brain Imaging Lectures, where he almost always asked the final, most-germane question of the day: one that usually bridged the clinical and research realms, and that brought together the past, the present, and the future of brain science.
Unless specified otherwise, lectures are held on Mondays at 1:00 pm In the de Grandpré Communications Centre of the Montreal Neurological Institute.
Mon-Jan-29Ahmad Seif Kanaan, PhD, Max-Planck Institute For Human Cognitive and Brain Sciences, Leipzig, Germany "Deconstructing Tourette Syndrome Pathophysiology via multimodal approaches at multiple scales" |
Mon-Feb-5Greg Kiar, PhD, MCIN, Montreal Neurological Institute "Harmonized Connectome Estimation at Scale, an Exercise in Optimizing Pipeline Reliability" |
Mon-Feb-12Elizabeth Du Pre, PhD Student, Montreal Neurological Institute "Lifespan approaches to network neuroscience: support from a study of structural covariance" |
Mon-Feb-19No Lecture, CONP |
Mon-Feb-26Andrew Doyle, M.Eng, Research Software Developer, McGill Centre for Integrative Neuroscience "Introduction to Deep Learning for NeuroImaging" |
Mon-Mar-12
|
Mon-Mar-19Natasha Rajah, PhD , Douglas Hospital "Title TBD" |
Mon-Mar-26Kevin Whittingstall , PhD , University of Sherbrooke "Title TBD" |
Mon-Apr-09Yashar Zeighami , PhD , Montreal Neurological Institute "Title TBD" |
Mon-Apr-16Nikhil Bhagwat, "Prognostic applications for Alzheimer's disease using MR imaging and machine-learning" |
Mon-Apr-23Amanpreet Badhwar, PhD , Centre de recherche de l'Institut universitaire de gériatrie de Montréal "Title TBD |
Mon-Apr-30TBD |
Mon-May-07Lorenzo Caciagli, MD PhD Cand, University College London "Functional neuroimaging in idiopathic generalized epilepsy" |
Mon-May-14Jorge Armony, PhD, Douglas Hospital "Title TBD" |
Mon-May-21BIC Data Blitz |
Mon-May-28TBD |
Mon-Jun-04TBD |
Mon-Jun-11TBD |
Follow us on twitter Meet us on facebook Connect with our institute


Sorry! Page not found.
Unfortunately, the page you are looking for does not exist.
LET'S GO BACK HOME


{% block content %} User "{{ author.full_name }}" last accessed time is {{ author.last_accessed }}. {% endblock %}


| Class | Shout |
| In: |
ext/shout.c
|
| Parent: | Object |
| HTTP | = | INT2FIX(SHOUT_PROTOCOL_HTTP) |
| XAUDIOCAST | = | INT2FIX(SHOUT_PROTOCOL_XAUDIOCAST) |
| ICY | = | INT2FIX(SHOUT_PROTOCOL_ICY) |
| MP3 | = | INT2FIX(SHOUT_FORMAT_MP3) |
| OGG | = | INT2FIX(SHOUT_FORMAT_OGG) |
| VORBIS | = | INT2FIX(SHOUT_FORMAT_VORBIS) |
Return the proper amount of time, in milliseconds, before more data needs to be sent. This is for use when you would like to do something else in the intervening time period besides sleep.
Set a filename where the server should dump the data from this stream. Only do this if you know what you are doing.
Set MP3 metadata. Create a ShoutMetadata object, add some stuff to it and pass it to this method. If the format of the stream isn’t MP3, and you try to set its metadata, an exception will most likely be raised.
Set the protocol to use when connecting. Default is Shout::HTTP. Possible values are:
Set whether or not this stream should be "public", i.e. advertised to a yp server such as yp.icecast.org. True or false. Nil counts as false.
Sleep the necessary amount of time to play back the audio data sent since the last call to sync. After calling this, it’s time to send more data.


WITNESS LIST
Veteran Affairs & Military Installations
November 20, 2013 1:30 PM
Interim Charge 1: Impact of federal actions (shutdown, BRAC)
ON:
Cantu, Al Chair (also providing written testimony) (Texas Veterans Commission), Austin,
TX
Cunningham, James R. Major (also providing written testimony) (Texas Coalition of
Veteran Organizations - Military Officers Association of America), San Antonio, TX
Ginn, Timothy Program Manager (also providing written testimony) (Governor's Office),
Austin, TX
Jacquez, Elvira Military Liaison (also providing written testimony) (University of Texas
San Antonio), San Antonio, TX
Nichols, John Major General (also providing written testimony) (Texas Military Forces),
Austin, TX
Paine, Paul Chairman (also providing written testimony) (Texas Military Preparedness
Commission), Fort Worth, TX
Palladino, Col. Thomas Executive Director (Texas Veteran Commission), Austin, TX
Pelaez-Prada, Manuel Chairman (Brooks Development Authority), San Antonio, TX
Perez, Richard President and CEO (Greater San Antonio Chamber of Commerce), San
Antonio, TX
Rodriguez, Dr. Charles Vice President for Strategic Initiatives and Military Affairs (also
providing written testimony) (Texas A&M University - San Antonio), San Antonio, TX
Siller, Dr. Gail Superintendent (also providing written testimony) (Fort Sam Houston
Independent School District), San Antonio, TX
Providing written testimony:
ON:
Gay, Clifford (Self), Rosenberg, TX


|
|||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
Defines a set of callback methods for a QueryEngine to notify interested object about different stages of queries execution. Superinterface, OperationHints, defines information methods that are needed to define query execution strategy. This Interface adds callback methods.
Implementing objects are passed to a QueryEngine that will execute one or more queries. QueryEngine will pass results of the execution of any kind of queries - selects, updates, store proc. calls, etc.. to the interested objects. This includes result counts, created objects, thrown exceptions, etc.
For more information see Cayenne User Guide.
QueryEngine
| Method Summary | |
void |
nextBatchCount(Query query,
int[] resultCount)
Invoked after the batch update is executed |
void |
nextCount(Query query,
int resultCount)
Invoked after the update (can be insert, delete or update query) is executed. |
void |
nextDataRows(Query query,
java.util.List dataRows)
Invoked after the next query results are read. |
void |
nextDataRows(Query q,
ResultIterator it)
Invoked after the next query is invoked, if a query required results to be returned as a ResultIterator. |
void |
nextGlobalException(java.lang.Exception ex)
Invoked when a "global" exception occurred, such as JDBC connection exception, etc. |
void |
nextQueryException(Query query,
java.lang.Exception ex)
Invoked when an exception occurs during query execution. |
void |
transactionCommitted()
Deprecated. since 1.1, "transactionRolledback" is no longer called, instead a TransactionDelegate is notified. |
void |
transactionRolledback()
Deprecated. since 1.1, "transactionRolledback" is no longer called, instead a TransactionDelegate is notified. |
| Methods inherited from interface org.objectstyle.cayenne.access.OperationHints |
getLoggingLevel, isIteratedResult, useAutoCommit |
| Method Detail |
public void nextCount(Query query, int resultCount)
public void nextBatchCount(Query query, int[] resultCount)
public void nextDataRows(Query query, java.util.List dataRows)
public void nextDataRows(Query q, ResultIterator it)
public void nextQueryException(Query query, java.lang.Exception ex)
public void nextGlobalException(java.lang.Exception ex)
public void transactionCommitted()
public void transactionRolledback()
|
|||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


The app:list sets a map entry for 'results' to a sequence.
The templates:each iterates over the sequence identitified by data-template-from and places the value into the map entry 'entry' from the data-template-to. The HTML element containing the templates:each is repeated for each entry in the sequence.
The HTML elements within the HTML element containing the templates:each will use the map entry 'entry' from the data-template-to as one can see in the <td data-template="app:list-entry"/>.


Tari Protocol Discussion 15
On Thursday’s architecture discussion, the Tari community analyzed the different protocols - or communication networks - that might be useful to satisfy the goals of the Tari ecosystem. This is the TL;DR on the topics that were covered (full transcript included below):
- Which communication networks are well-suited for processes like tx transmission, checkpoint validation, and node discovery?
- The importance of building different protocols - or communication networks - for the different actors in the Tari ecosystem (base nodes, wallets, miners, validator nodes, asset managers)
- Weighing the different needs (speed, discoverability, privacy, security) of different actors in the Tari ecosystem
- How end-users can maintain their privacy while making digital asset transactions
- The process by which asset issuers and wallets will discover network nodes
Join us for our next discussion on Freenode in #tari-dev.
Discussion times proposed by the Tari community:
Mondays: 6pm CAT (11am EST)
Thursdays: 11am CAT (4am EST)
To keep up with the latest Tari developments, you can follow the project on Twitter.
Transcript of Thursday’s discussion
4:06 AM <@cjs77> Hi everyone
4:09 AM <@cjs77> We've got a bunch of RFCs in the pipeline; if there's anything anyone wants to discuss related to those, feel free to engage here.
4:10 AM <@cjs77> I've also started putting up issues on the Tari Github repo, many of which are tagged as "Good first issue". If you want to get involved with Tari development and are fairly new to Rust / Blockchain development, you might want to take a stab at one of those
4:11 AM <@cjs77> The issues are also tracked on the waffle board -- https://waffle.io/tari-project/tari if you'd rather use that platform
4:43 AM <@cjs77> Something that hasn't really been discussed yet are the various comm networks that will have to be constructed; both base and digital assets layer.
4:43 AM <@cjs77> We've mentioned that zMQ is a great library for building out protocols, but we haven't had much talk about what those protocols should be.
4:45 AM <@cjs77> So for example, there are several actors in the Tari ecosystem: Base Nodes, Wallets, Miners, Validator Nodes, Asset managers (i.e. digital asset wallets)
4:45 AM <Hansie> So any thoughts on the protocols?
4:45 AM <@cjs77> There could be different needs for the different actors' interaction viz. speed, discoverability, privacy, security and so on
4:47 AM <Hansie> So how can a digital asset wallet end user be private and able to buy a ticket, for example?
4:47 AM <Blackwolfsa> For example base layer might need gossip to find peers and broadcast blocks, while also using dandelion for tx transmission
4:48 AM <neonknight> I think a kademlia DHT network between Validator Nodes and/or Asset Managers will help discovery when only something like a Public key is known.
4:50 AM <simian_za> Hansie: in that case the user's Asset manager+wallet is the one doing the discovery of which VN's manage the asset he wants to buy and then his Asset Manager+wallet will talk to the VNs directly once he has discovered them
4:50 AM <Hansie> So if I connect with my digital asset wallet to some VN to buy a ticket, will my details not be publicly available after that, open for spam?
4:52 AM <simian_za> Your asking if the discovery process will leak the details of the node doing the discovering?
4:53 AM <Hansie> Well, let's say my PK/details are now part of the DHT, am I not exposed?
4:55 AM <neonknight> Maybe you can create a shared secret using your private key and the VN's public key to encrypt your communication address so only the VN you are trying to talk to can decrypt it when he receives your messages. After discovery a direct comm channel can then be established.
4:56 AM <Hansie> Right, so something like Diffe-Hellman exchange to establish a trusted comms channel then P2P after that.
4:56 AM <simian_za> that will work, the only info thats leaked then is your public key itself and potentially that you are looking for a given PK but the actual comms will all be encrypted
4:57 AM <Hansie> So can digital asset wallet to some VN be similarly treated as VN to VN? Or do we need something different?
4:58 AM <Hansie> Or broadcasts?
4:58 AM <Blackwolfsa> I dont see any differance between the two
4:58 AM <Blackwolfsa> you dont want to broadcast, you would just send the instructions directly to a/or every vn
4:59 AM <Blackwolfsa> encrypted that is
4:59 AM <Hansie> Cool. So what are the performance implications of P2P on the 2nd layer then? Any issues?
5:01 AM <neonknight> To make the discovery slightly more efficient the Asset Manager should send the discovery request instruction only to VNs that have NodeIDs that are close to the VN he wants to talk to, but he could just send it to every VN he knows.
5:03 AM <neonknight> He could also just send it to any randomly selected VN and he will still reach the correct VN. It will just be more inefficient.
5:04 AM <Hansie> So how does the Asset Manager (Asset Issuer?) come to know any VNs?
5:05 AM <neonknight> The Asset Manager software should always have an initial list of VNs that can be expanded with usage of the network.
5:05 AM <simian_za> The VNs will register themselves on the base layer and when an asset is issued on the base layer the contract should also contain the VN's that are responsible for managing that asset
5:07 AM <Blackwolfsa> and that contract should be updated as the VN change about
5:09 AM <neonknight> When an asset is issued on the base layer, I think that it might only have the public keys of the VNs that are servicing that asset and not the comm address. The comm addresses of VNs needs to be found using discovery on the dht network.
5:09 AM <Hansie> simian_za: I do not follow you here "...when an asset is issued on the base layer..."
5:10 AM <simian_za> The contract that represents the asset will be written to the baselayer in some form
5:10 AM <simian_za> maybe a summary of the parameters as a hash but the public keys of the VNs in the committee will need to be in that base layer transaction
5:11 AM <@cjs77> There are lots of good ideas here. Is this a fair summary of what we have so far?
5:11 AM <@cjs77> https://www.irccloud.com/pastebin/CiAYinGt/
5:13 AM <simian_za> LGTM
5:13 AM <neonknight> I agree
5:14 AM <@cjs77> I think the pros/cons of a single DHT "directory" vs multiple should be examined a bit
5:14 AM <Hansie> cjs77: Please explain 'Whitelist' and why W <-> BN discovery is different to BN <-> BN discovery?
5:16 AM <@cjs77> Usually your wallet will connect to a single trusted node. In general, this is a whitelist (of one).
5:16 AM <@cjs77> A wallet doesn't usually care to maintain a full list of nodes (though maybe there might be a use case??)
5:17 AM <Hansie> So how is the 1st trusted node discovered? Or another on if the previous one is not available?
5:18 AM <@cjs77> from the whitelist
5:20 AM <Hansie> So a "permissioned" type setup?
5:23 AM <Hansie> And what about the digital asset wallets? I think they are missing from your table perhaps?
5:23 AM <@cjs77> maybe not in the sense that I think you mean, but you the wallet is pretty dumb and must talk to a base node to get txs onto the network. If you run your own full node, then you want your wallet to connect to just that node.
5:24 AM <@cjs77> digital asset wallets are the AMs in the table
5:24 AM <@cjs77> If I've missed a combination, lmk
5:25 AM <Hansie> Cool, I think the table is a good summary yes.
5:26 AM <@cjs77> Ok, so I'll add an Issue to write up an RFC to bring all this stuff together.. it looks like some digging into the capabilities of Kademlia and how it could be integrated into Tari is warranted
5:27 AM <@cjs77> Of course one of the nicest things about all this is that you kinda get Bitcoin-like address functionality on Mimblewimble
5:29 AM <Hansie> We may also summarize somewhere how Grin and Beam do all of this for the applicable parts, as a reference.
5:47 AM <@cjs77> hansie: To add to the answer to your Q, So using the same approach as BNs to use a small whitelist and build a list of peers from that; and then randomly select some nodes to communicate to would work too if you trust random nodes
5:47 AM <@cjs77> and +1 on the Grin?Beam comparison
5:52 AM <@cjs77> Added - https://github.com/tari-project/tari/issues/66
6:48 AM <Blackwolfsa> One thing we might need to look for, that a DHT might solve, is that we might have a lot of discovery request from wallets to find VNs
7:37 AM <stanimal> Found it interesting to look at how a bit torrent client bootstraps the DHT - This rust implementation configures a bootstrap node (https://github.com/Luminarys/synapse/blob/257961614024f2fdfd6999b0b4ba8895689ce8e6/example_config.toml#L31) and if the routing table isn't bootstrapped it adds it to the route table (https://github.com/Luminarys/synapse/blob/257961614024f2fdfd6999b0b4ba8895689ce8e6/src/tracker/dht/mod.rs#L53) -
7:37 AM <stanimal> seems in many/all implementations you need a bootstrap node for DHTs
7:49 AM <mikethetike> Maybe we can use DNS seeds for the bootstrap?
9:48 AM <@fluffypony> Monero's bootstrap process is DNS seeds -> fallback nodes -> start randomly scanning IP addresses


Cut Carbon, Smarter
Is your business looking for new ways to reduce carbon emissions?
Our solutions can give you unprecedented insight—and control—over your carbon footprint.
Research
- Time-resolved carbon footprint analysis
- Retrofit and new project consultation
- Novel environmental impact measures
Develop
- Automated demand response using our unique real-time data
- User-friendly dashboards and apps
- Control algorithms that optimize carbon, comfort, and cost
Deploy
- Commercial HVAC
- Electric vehicles
- Internet of Things
- Control and monitoring systems
- Measurement and verification


--- layout: splash author_profile: true header: image: /assets/images/ggeographica_banner.JPG ---
I am currently a MSc student in the Department of Biological Sciences at Auburn University, working with Dr. Matthew Wolak. My research focuses on the ecology, evolution, and morphology of freshwater turtles in the Southeastern US. Learn more about me...


Home
(current)
Profile
Food Details
About
Login
Register First
If you face problem in odering any item, you can contact here; 0333 1234567. Check food Prices from Food Details.
Fast Food
Jumbo Burger
Pizza
Chinese
Spaghetti
Mushroom n Garlic Chicken ChowMein
Grilled
Grilled Fish
Grilled Chicken
Desi
Chicken Karahi
Haleem
Rice
Chicken Biryani
Dal Rice
Breakfast
Bread n Omelette
Paratha & Omellete
DRINKS
Coffee
Fresh Lime Juice
Side Orders
Salad
Raita
Customer Care
Categories
Business Solution
About Us
Find Us
Contact Us
Our Values
Branches
Social Buzz
Info Center
Our Location
News Latter
Privacy Policy
More


Data types
15 May 2016
Javascript has various datatypes.
- Numbers
- Booleans (true / false)
- Objects
Booleans are like switches, they are either on (true) or off (false).
Objects encompass the other common datatypes, which includes arrays, that a special type of object.
There are a few more datatypes, like Map and Set, but these are fully supported by all browsers yet.
One of the most useful datatypes is the array. It is simply an ordered list of values. These values can be other datatypes: numbers, booleans, or even arrays. The big drawcard for arrays is that they can be iterated over. Your code can quickly look at each thing in the array and use it for something.
Before this week, I had never come across passing a function to another before. This is a concept that is unique to Javascript. It allows functions (that are passed a function) to be more abstract and universal. This means a function isn't locked down to a particular task, it achieve varying results based on its input.
A concept that popped up in the assignments a few times this week was recursion. A function that calls itself. I am still coming to terms with how to implement these, occasionally pulling my hair out in the process.


--- layout: newsstory title: THAT SINKING FEELING match: Fisher 0 Yeltz 0 ---
STOP PRESS: Brendan Phillips appointed manager for a further two years - further details on YeltzTalk
Wet, miserable, overcast. A good way to make sure our traditional last away game celebrations were carried out in a manner befitting this awful season.
The match itself? If it had been on Sky Sports, those match area statistics would have shown most of the play in their half but we never really threatened their keeper in what were admittedly difficult conditions. We had a good singsong in the second half but all in all it was pretty depressing. Oh well.
We're still bottom but can still climb a few places if we win against Bath next week and other results go our way. There is a rumour about league reorganisation to make the league bigger next season, but I'd have thought that meant more teams coming down from the Conference than affecting our end of the table.
A very interesting idea from the club:
The Jolly Boys are trying to sort something out between us of getting at least one entry, but I think this is a brilliant idea - let's try and get as many businesses or fans or whoever to do this and get as much money raised as possible.
Fisher Athletic: Iga; Aris, Manning, Bircham, Edwards, Taylor, Powell, Tydeman, Tyne, Mighty (Moore 67), O'Neil. Subs: Cohen, Pacey
Halesowen Town: Turbutt; Skidmore, Burnham, Lloyd (Wood 14), Owen (Sutton 23), Smith, Crawford, Ince, Spencer, Bailey, Hines. Sub: Thomas
Booked: None Referee: M. Knight (Hove) Attendance: 129
Halesowen's season-long lack of fire power came back to haunt them as they failed to turn long spells of pressure into goals at rain-soaked Fisher. However, for all Halesowen's lack of punch, Fisher fared even worse and gave emergency goalkeeper Scott Turbutt an easy afternoon's work in the Halesowen goal.
A dismal first half left the sparse crowd in no doubt why both sides are already condemned to relegation. Central defenders Wayne Lloyd and Jason Owen were early injury casualties but the only attempts on goal came when Fisher's Ross Edwards almost turned a backpass into his own net and Yeltz youngster Andy Spencer hit a cross from Les Hines over the bar on the half-hour.
Halesowen were well on top after the break but could not convert their chances to leapfrog above Fisher in the table. Hines curled a 20 yard free-kick just high in the 58th minute before Spencer had another trio of efforts in increasingly treacherous conditions. His 59th minute diving header went just past the post and he then broke clear to hit a hard cross along the face of goal after an hour before drilling wide again in the 70th minute. Andy Iga turned a shot from Michael Crawford wide and Crawford then saw his 78th minute goalbound header stick in the mud.
For all their efforts Halesowen remain bottom of the table and must be crying out for a younger version of one of their legendary goal-scoring heroes from the past.


Sr. No
PCOID
PCO Name
City
Mobile
Email Id
Others
Current Bill
Jan 2017
Dec 2016
Oct 2016
Sep 2016
Aug 2016
Jul 2016
Jun 2016
May 2016
Apr 2016
Mar 2016
Feb 2016
Jan 2016
>
{{mylist.id}}
7086834055
Anshuman singh
Bangalore
7086834055
<EMAIL_ADDRESS>{{mylist.col7}}


Dear {FName},
Still waiting to get budget approved to come to Pendomonium? Well this should help! We are proud to announce the Pendomonium session schedule is live! We are anxiously counting down the days until March 20 and are planning an event you will not want to miss! Special room rate ends February, 17th, so don't wait! Book now while there is still availability!
Check out the other awesome speakers we have lined up in our four session tracks:
And More! Full Schedule here!
Best,
The Pendo Team


This will immediately end your subscription access.
Refunds may take 5 - 10 business days for funds to return to your bank account.


from __future__ import print_function
from random import randint
import numpy as np
from scipy.spatial import ConvexHull
import pandas as pd
from salty import merge_duplicates
[docs]def expand_convex_hull(data, expansion_target=[1, 1.005], target_number=10):
"""
A method of identifying property target values based on historical
experimental data. The function returns targets outside the convex hull
formed by the experimental data.
Parameters
----------
data: pandas dataframe
the data frame to be interrogated
expansion_target: float
the relative area/volume expansion desired (compared to the initial
area/volume described by the historical data)
target_number: int
the number of targets desired
Returns
----------
target_list: list of floats
the list of property targets
"""
vals, stds, size, salts = merge_duplicates(data)
dataDf = pd.DataFrame([np.reshape(vals[1].values, (len(vals[1]))),
np.reshape(vals[0].values, (len(vals[0])))]).T
hull = ConvexHull(dataDf)
target_list = []
while True:
candidate = [randint(int(np.min(vals[1])), int(np.max(vals[1]))),
randint(int(np.min(vals[0])), int(np.max(vals[0])))]
df = pd.DataFrame(candidate, index=np.arange(2).reshape(2)).T
df = pd.concat((dataDf, df))
newhull = ConvexHull(df)
rel_size = (newhull.area / hull.area)
if expansion_target[0] < rel_size < expansion_target[1]:
target_list.append(candidate)
if len(target_list) == target_number:
break
target_list = np.array(target_list)
return target_list


Step one: open second tab:
Step two: run test:
In a successful test the test status will immediately change to "test successful". (If you switch to the child tab yourself and that makes the test claim to be successful, that's actually an invalid test because you're letting the child tab become the active tab).
Test status: {{testStatus}}
After the test has run successfully you can close the child tab.
This is the child.
Switch back to the first tab and run the test.


Calculated atom-projected (1–8 types) electronic density of states for α-plutonium. Black lines show 5f contributions and red lines show 6d contributions. Other contributions are negligible. The Fermi level is indicated with a vertical line at zero energy. Redrawn from ref. 24 .


Hammock ex plaid nulla. Nihil stumptown gastropub, dreamcatcher gochujang franzen cillum cliche keffiyeh pop-up pug small batch knausgaard. Fanny pack elit you probably haven't heard of them before they sold out. Sint elit tofu et veniam irony 3 wolf moon. VHS slow-carb trust fund chartreuse wolf. Qui sed dreamcatcher cronut, hoodie fixie normcore. Gochujang dolor consectetur post-ironic.
Hammock ex plaid nulla. Nihil stumptown gastropub, dreamcatcher gochujang franzen cillum cliche keffiyeh pop-up pug small batch knausgaard. Fanny pack elit you probably haven't heard of them before they sold out. Sint elit tofu et veniam irony 3 wolf moon. VHS slow-carb trust fund chartreuse wolf. Qui sed dreamcatcher cronut, hoodie fixie normcore. Gochujang dolor consectetur post-ironic.


{% load static %}
Please enter the following details.
ID:
Please select your gender:
Male
Female
Other
What is your Age?
Which standard you studying in?
What subjects do you study?
What is your favorite ?
What are your hobbies ?


{% if status == "CREATE_COMPLETE" %}
Dear User,
This is an automatically generated notification mail
YOU DO NOT NEED TO ANSWER THIS MESSAGE
Your Galaxy instance is up and running at URL_ADDRESS
Please login using your credentials
username: "{{ session['username'] }} "
password: "galaxy_admin_password"
Remember to change Galaxy password and the API key as soon as possible!
Kind Regards.
{% elif status == "CREATE_FAILED" %}
your reployment is failed
{% endif %}
|
|


Classes
The following classes are available globally.
-
[undocumented]
See moreDeclaration
Swift
public final class BlurredBackgroundView: UIView
-
[undocumented]
See moreDeclaration
Swift
public class CodableKit
-
[undocumented]
See moreDeclaration
Swift
open class CollapsibleTableSectionViewController: UIViewController
-
[undocumented]
See moreDeclaration
Swift
class CollectionStackViewController: UICollectionViewController
-
[undocumented]
See moreDeclaration
Swift
class CollectionViewStackCell: UICollectionViewCell
-
[undocumented]
See moreDeclaration
Swift
class CollectionViewStackFlowLayout: UICollectionViewFlowLayout
-
[undocumented]
See moreDeclaration
Swift
public class ColorHash
-
[undocumented]
See moreDeclaration
Swift
open class ContactImageView: UIImageView
-
[undocumented]
See moreDeclaration
Swift
public class Container<Host:AnyObject>: NSObject
-
[undocumented]
See moreDeclaration
Swift
public class ModalController: UINavigationController
-
[undocumented]
See moreDeclaration
Swift
public class GradientLoadingBar
-
[undocumented]
See moreDeclaration
Swift
final class GradientView: UIView
-
[undocumented]
See moreDeclaration
Swift
public class HTMLtoPDF: NSObject
-
[undocumented]
See moreDeclaration
Swift
class HTMLtoPDFPrintPageRenderer: UIPrintPageRenderer
-
[undocumented]
See moreDeclaration
Swift
class KeyPathTarget: NSObject
-
[undocumented]
Declaration
Swift
public class MiaDummy: NSObject
-
A dismissible UINavigationController subclass.
See moreDeclaration
Swift
public class ModalNavigationController: UINavigationController
-
UINavigationController with animation show lists of UIViewControllers
See moreDeclaration
Swift
open class NavigationStack: UINavigationController
-
[undocumented]
See moreDeclaration
Swift
class NotificationTarget: NSObject
-
[undocumented]
See moreDeclaration
Swift
public final class PFSceenshot<Base>
-
[undocumented]
See moreDeclaration
Swift
public class Reachability
-
[undocumented]
See moreDeclaration
Swift
public class RevealingSplashView: UIView
-
[undocumented]
See moreDeclaration
Swift
open class SANotificationView
-
[undocumented]
See moreDeclaration
Swift
class Lazy<T>
-
[undocumented]
See moreDeclaration
Swift
class CountedColor
-
[undocumented]
See moreDeclaration
Swift
public class XibView : UIView
-
[undocumented]
See moreDeclaration
Swift
class HighlightableButton: UIButton
-
[undocumented]
See moreDeclaration
Swift
public class SearchFooter: UIView
-
[undocumented]
See moreDeclaration
Swift
public class IBGradientView: UIView
-
[undocumented]
See moreDeclaration
Swift
public class ThemeKit
-
[undocumented]
See moreDeclaration
Swift
class TimerTarget: NSObject
-
[undocumented]
See moreDeclaration
Swift
class BarButtonItemTarget: NSObject
-
[undocumented]
See moreDeclaration
Swift
class ButtonTarget: NSObject
-
[undocumented]
See moreDeclaration
Swift
class ControlTarget: NSObject
-
[undocumented]
See moreDeclaration
Swift
class DatePickerTarget: NSObject
-
[undocumented]
See moreDeclaration
Swift
class GestureTarget: NSObject
-
[undocumented]
See moreDeclaration
Swift
class SearchBarTarget: NSObject, UISearchBarDelegate
-
[undocumented]
See moreDeclaration
Swift
class SliderTarget: NSObject
-
[undocumented]
See moreDeclaration
Swift
class TextFieldTarget: NSObject, UITextFieldDelegate
-
[undocumented]
See moreDeclaration
Swift
class TextViewTarget: NSObject, UITextViewDelegate
-
[undocumented]
See moreDeclaration
Swift
public class AppStore_Apps_Version: Codable
-
[undocumented]
See moreDeclaration
Swift
public class UpdateKitWBObjC: NSObject
-
[undocumented]
See moreDeclaration
Swift
public class WebView: UIViewController
-
[undocumented]
See moreDeclaration
Swift
public class WebViewModal: UINavigationController


Meghan Markle's best royal outfits
Let’s face it, Meghan Markle has always had a great sense of style.
That being said, she stepped up her game when she started dating Prince Harry – and since becoming the Duchess of Sussex, Meghan has become as much of a royal fashion icon as her husband’s late mother, Princess Diana.
It then comes as no surprise that she has nabbed the top spot in the ranking for most influential celebrity dresser in the annual Lyst ‘Year in Fashion’ report for 2019.
We hear you, Lyst and we agree.
To celebrate the Duchess’ fabulous fashion choices, here are some of her best looks since she became a part of the royal family.
The wedding reception outfit
On her special day in May 2018, Meghan wore a silk gown designed by British fashion designer Claire Waight Keller, the artistic director at Givenchy.
Advertisement Advertisement
However, while it was admittedly a beautiful wedding dress, the real stunner of the day was this bespoke high-neck gown by Stella McCartney made from silk crepe.
It screamed old school glamour, and Meghan looked fantastic in it.
The Cape Town outfit
On their tour of Cape Town, Meghan sported laid-back looks.
One of our favourites is this flowing sky blue dress by Veronica Beard, paired with the same Castañer espadrilles that she wore during her Royal Tour in Australia.
We love a recycled royal shoe.
The other Cape Town outfit
The Veronica Beard dress wasn’t the only stunning fashion choice that the Duchess made during her Cape Town visit.
For her meeting with female entrepreneurs in technology, she rocked a long black jumpsuit from Everlane.
She added some glitz by pairing it with round gold earrings from GAS Bijoux.
The big baby moment outfit
On 8 May, the British public finally got to meet Meghan and Harry’s son – Archie Harrison Mountbatten-Windsor.
He was undoubtedly captivating, but so was his mother in her sleeveless trench dress by Grace Wales Bonner.
But with that new-mum glow, she could have been wearing an old t-shirt and jeans, and she would still have looked fantastic.
The Wimbledon outfit
Meghan isn’t just an expert on how to dress up, she’s also great at dressing down.
Advertisement Advertisement
When she attended a Wimbledon tennis match, the Duchess wore jeans with a black shirt and a striped blazer.
Her Panama-style hat from Madewell x Biltmore was the big hit though – and it was super affordable, too (that is, until it sold out straight after Meg wore it).
The laid-back outfit
If you thought Meghan hasn’t adjusted to the rainy British weather, you’d be wrong.
Once again proving that she’s the queen of chic casual wear, she donned a black ankle-length pantsuit from Alexander McQueen for the Endeavour Fund Awards’ Ceremony in 2018.
And she paired it with pointed stilettos, her signature shoe style.
We don’t often see the Duchess in print, but she treated us to this gem on International Women’s Day.
The 70s style mini dress is Azzura by the high street brand, Reiss, and the black blazer if by Alexander McQueen.
As for her accessories, Meghan went with Manolo Blahnik pumps and earrings from Jessica McCormack.
The Morocco trip outfit
On the third day of the royal couple’s trip to Morocco, where they visited King Mohammed VI, the Duchess wore this incredible Carolina Herrera gown.
If you fancy picking up the blue, patterned dress for yourself, it’ll cost you £3,222.
Advertisement
Or maybe just get something similar from a high street shop, and spend the rest of the money on a holiday in Morocco.
The nod to Suits outfit
When she stepped out at the Chichester Enginering and Digital Technology Park in Bognor Regis, we got throwback feels to Meghan’s actor days.
Her moss green leather pencil skirt from Hugo Boss looked very much like something that her character on Suits, Rachel, would buy.
She paired it with a matching green shirt from & Other Stories (the chain owned by H&M) and a nude Armani coat.
The Commonwealth Youth Challenge outfit
Meghan wore this Brandon Maxwell dress for the Commonwealth Youth Challenge last year.
It was an unusual choice for the Duchess, who doesn’t usually favour strong colours but this pop of yellow suited her perfectly.
And the understated nude pumps just made the outfit that much better.
The Edinburgh visit outfit
During a visit to Edinburgh in 2018, Meghan wore a gorgeous double-faced tartan coat from Burberry – an excellent choice for a trip to Scotland.
She’s not the only royal to favour this design.
Her sister-in-law, Kate Middleton, the Duchess of Cambridge, wore a tartan dress by Alexander McQueen when she visited Dundee with Prince William.
Advertisement
The engagement announcement outfit
Last but not least, it’s the outfit that will forever be remembered as the look of a new royal being born.
For her engagement day, Meghan chose a white belted coat by the Canadian brand Line The Label.
Let’s face it though, we were all too busy looking at the ring on her finger to really notice the outfit – the sapphire diamond that once belonged to the late Princess of Wales, Diana.


Mum stops to get petrol. She does not see the bee as it flies into the jeep. Mum is back on the road when she spots the bee in the mirror. Eek! Cries Mum. "It's a bee." The bee buzzes. Mum tries to kill the bee as it flies into the windscreen but she misses. The bee gets frantic. "Buzzzzzzzzzzzzzzzzzz!" Mum stops the jeep. She sprays the jeep with insect spray. Mum sits and waits for the bee to die.
in-context


Apache Drill 1.13.0 Release Notes
Release date: March 18, 2018
Today, we’re happy to announce the availability of Drill 1.13.0. You can download it here.
New Features and Improvements
This release of Drill provides the following new features and improvements:
- JDK 8 support. (DRILL-1491)
- Upgrade to Calcite version 1.15. (DRILL-3993)
- JDBC Statement.setQueryTimeout(int) support to cancel queries if they do not complete within the specified time. (DRILL-3640)
- Batch processing improvements that enable you to limit the amount of memory that the Flatten, Merge Join, and External Sort operators allocate to outgoing batches. (DRILL-6123)
- Enhanced DESCRIBE command. (DRILL-4559)
- Support for SPNEGO to extend Kerberos to Web applications through HTTP. (DRILL-5425)
- Ability to run Drill under YARN. (DRILL-1170)
- Parquet filter pushdown support for IS [NOT] NULL, TRUE, and FALSE operators and implicit and explicit casts for timestamp, date, and time data types. (DRILL-6174)
- Performance improvements with support for project push down, filter push down, and partition pruning on dynamically expanded columns when represented as a star in the ITEM operator. (DRILL-6118)
- The Hive client for Drill is updated to version 2.3.2. With the update, Drill supports queries on transactional (ACID) and non-transactional Hive bucketed ORC tables. The updated libraries are backward compatible with earlier versions of the Hive server and metastore. (DRILL-5978)
- Ability to automatically manage memory allocations during Drill startup. (DRILL-5741)
- Ability to query an empty directory and use it for queries with any JOIN and UNION (UNION ALL) operators. (Drill-4185)
- Non-numeric support for JSON processing. (Drill-5919)
- New options to that enable you to configure the number of Jetty acceptors and selectors (DRILL-5994)
- Support SQL syntax highlighting of queries, auto-complete support in SQL editors, and snippets. (DRILL-5868)
- Improved performance of the Single Merge Exchange operator. (DRILL-6115)
- Like operator optimization. DRILL-5879
- User/Distribution-specific configuration checks during startup (DRILL-5741).
The following sections list all fixes and improvements:
Sub-task
- [DRILL-4333] - tests in Drill2489CallsAfterCloseThrowExceptionsTest fail in Java 8
- [DRILL-5068] - Create a system table for completed profiles - sys.profiles
- [DRILL-6036] - Create a sys.connections table
Bug
- [DRILL-4120] - dir0 does not work when the directory structure contains Avro files
- [DRILL-4329] - 13 Unit tests are failing with JDK 8
- [DRILL-4469] - SUM window query returns incorrect results over integer data
- [DRILL-4708] - connection closed unexpectedly
- [DRILL-4923] - Use of CASE WHEN inside a sub-query results in AssertionError
- [DRILL-4942] - incorrect result - case when (not null is null) then true else false end
- [DRILL-5170] - JMockit-based unit tests fail when run under Java 8
- [DRILL-5286] - When rel and target candidate set is the same, planner should not need to do convert for the relNode since it must have been done
- [DRILL-5377] - Five-digit year dates are displayed incorrectly via jdbc
- [DRILL-5690] - RepeatedDecimal18Vector does not pass scale, precision to data vector
- [DRILL-5730] - Fix Unit Test failures on JDK 8 And Some JDK 7 versions
- [DRILL-5768] - Drill planer should not allow select * with group by clause
- [DRILL-5833] - Parquet reader fails with assertion error for Decimal9, Decimal18 types
- [DRILL-5851] - Empty table during a join operation with a non empty table produces cast exception
- [DRILL-5880] - java.sql.SQLException: UNSUPPORTED_OPERATION ERROR: This query cannot be planned possibly due to either a cartesian join or an inequality join
- [DRILL-5902] - Queries encounter random failure due to RPC connection timed out
- [DRILL-5926] - TestValueVector tests fail sporadically
- [DRILL-5961] - For long running queries (> 10 min) Drill may raise FragmentSetupException for completed/cancelled fragments
- [DRILL-5963] - Canceling a query hung in planning state, leaves the query in ENQUEUED state for ever.
- [DRILL-5967] - Memory leak by HashPartitionSender
- [DRILL-5971] - Fix INT64, INT32 logical types in complex parquet reader
- [DRILL-5996] - Unable to re-run queries from Profiles tab with impersonation and without authentication
- [DRILL-6020] - NullPointerException with Union setting on when querying JSON untyped path
- [DRILL-6021] - Show shutdown button when authentication is not enabled
- [DRILL-6040] - Need to add usage for graceful_stop to drillbit.sh
- [DRILL-6044] - Shutdown button does not work from WebUI
- [DRILL-6054] - Issues in FindPartitionConditions
- [DRILL-6070] - Hash join with empty tables should not do casting of data types to INT<OPTIONAL>
- [DRILL-6079] - Memory leak caused by ParquetRowGroupScan
- [DRILL-6080] - Sort incorrectly limits batch size to 65535 records rather than 65536
- [DRILL-6081] - Duration of completed queries is continuously increasing
- [DRILL-6083] - RestClientFixture does not connect to the correct webserver port
- [DRILL-6085] - Travis build sometimes fails becomes vm suddenly exits.
- [DRILL-6088] - MainLoginPageModel errors out when http.auth.mechanisms is not configured
- [DRILL-6090] - While connecting to drill-bits using JDBC Driver through Zookeeper, a lot of "Curator-Framework-0" threads are created if connection to drill-bit is not successful(no drill-bits are up/reachable)
- [DRILL-6093] - Unneeded columns in Drill logical project
- [DRILL-6099] - Drill does not push limit past project (flatten) if it cannot be pushed into scan
- [DRILL-6100] - Intermittent failure while reading Parquet file footer during planning phase
- [DRILL-6111] - NullPointerException with Kafka Storage Plugin
- [DRILL-6117] - Query End time is not being set
- [DRILL-6119] - The OpenTSDB storage plugin is not included in the Drill distribution
- [DRILL-6124] - testCountDownLatch can be null in PartitionerDecorator depending on user's injection controls config
- [DRILL-6127] - NullPointerException happens when submitting physical plan to the Hive storage plugin
- [DRILL-6128] - Wrong Result with Nested Loop Join
- [DRILL-6129] - Query fails on nested data type schema change
- [DRILL-6137] - Join Failure When Some Json File Partitions Empty
- [DRILL-6140] - Operators listed in Profiles Page doesn't always correspond with operator specified in Physical Plan
- [DRILL-6143] - Make Fragment Runner's RPC Timeout a SystemOption
- [DRILL-6144] - Make directMemory amount configurable in tests
- [DRILL-6148] - TestSortSpillWithException is sometimes failing.
- [DRILL-6151] - Fragment executors may terminate without sending final batch to a downstream causing query to hang
- [DRILL-6154] - NaN, Infinity issues
- [DRILL-6164] - Heap memory leak during parquet scan and OOM
- [DRILL-6172] - setValueCount of VariableLengthVectors throws IOB exception when called with 0 value after clearing vectors
- [DRILL-6185] - Error is displaying while accessing query profiles via the Web-UI
- [DRILL-6187] - Exception in RPC communication between DataClient/ControlClient and respective servers when bit-to-bit security is on
- [DRILL-6188] - Fix C++ client build on Centos 7 and OSX
- [DRILL-6189] - Security: passwords logging and file permisions
- [DRILL-6190] - Packets can be bigger than strictly legal
- [DRILL-6191] - Need more information on TCP flags
- [DRILL-6192] - Drill is vulnerable to CVE-2017-12197
- [DRILL-6195] - Quering Hive non-partitioned transactional tables via Drill
- [DRILL-6197] - Duplicate entries in inputProfiles of minor fragments for specific operators
- [DRILL-6198] - OpenTSDB unit tests fail when Lilith client is run
- [DRILL-6204] - Pass tables columns without partition columns to empty Hive reader
- [DRILL-6205] - Reduce memory consumption of testFlattenUpperLimit test
- [DRILL-6216] - Metadata mismatch when connecting to a Drill 1.12.0 with a Drill-1.13.0-SNAPSHOT driver
- [DRILL-6217] - NaN/Inf: NestedLoopJoin processes NaN values incorrectly
- [DRILL-6226] - Projection pushdown does not occur with Calcite upgrade
New Feature
- [DRILL-1170] - YARN support for Drill
- [DRILL-5425] - Support HTTP Kerberos auth using SPNEGO
- [DRILL-5868] - Support SQL syntax highlighting of queries
- [DRILL-6068] - Drill should support user/distribution specific configuration checks during startup
Improvement
- [DRILL-3640] - Drill JDBC driver support Statement.setQueryTimeout(int)
- [DRILL-3958] - Improve error message when JDBC driver not found
- [DRILL-4185] - UNION ALL involving empty directory on any side of union all results in Failed query
- [DRILL-4559] - Re-work DESCRIBE command after moving to Calcite master branch
- [DRILL-5688] - Add repeated map support to column accessors
- [DRILL-5741] - Automatically manage memory allocations during startup
- [DRILL-5879] - Optimize "Like" operator
- [DRILL-5919] - Add non-numeric support for JSON processing
- [DRILL-5966] - Upgrade DRILL to Calcite 1.13.0
- [DRILL-5973] - Support injection of time-bound pauses in server
- [DRILL-5974] - Read JSON non-relational fields using text mode
- [DRILL-5978] - Updating of Apache and MapR Hive libraries to 2.3.2 and 2.1.1-mapr-1710 versions respectively
- [DRILL-5993] - Improve Performance of Copiers used by SV Remover, Top N etc.
- [DRILL-5994] - enable configuring number of Jetty acceptors and selectors
- [DRILL-6002] - Avoid memory copy from direct buffer to heap while spilling to local disk
- [DRILL-6025] - Execution time of a running query shown as 'NOT AVAILABLE'
- [DRILL-6028] - Allow splitting generated code in ChainedHashTable into blocks to avoid "code too large" error
- [DRILL-6049] - Rollup of hygiene changes from "batch size" project
- [DRILL-6063] - Set correct ThreadContext ClassLoader before using Hadoop Configuration class in DrillClient
- [DRILL-6071] - Limit batch size for flatten operator
- [DRILL-6089] - Validate That Planner Does Not Assume HashJoin Preserves Ordering for FS, MaprDB, or Hive
- [DRILL-6102] - CurrentModification Exception in BaseAllocator when debugging
- [DRILL-6106] - Use valueOf method instead of constructor since valueOf has a higher performance by caching frequently requested values.
- [DRILL-6114] - Complete internal metadata layer for improved batch handling
- [DRILL-6115] - SingleMergeExchange is not scaling up when many minor fragments are allocated for a query.
- [DRILL-6118] - Handle item star columns during project / filter push down and directory pruning
- [DRILL-6123] - Limit batch size for Merge Join based on memory
- [DRILL-6126] - Allocate memory for value vectors upfront in flatten operator
- [DRILL-6153] - Revised operator framework
- [DRILL-6163] - Switch Travis To Java 8
- [DRILL-6174] - Parquet pushdown planning improvements
- [DRILL-6177] - Merge Join - Allocate memory for outgoing value vectors based on sizes of incoming batches.
- [DRILL-6180] - Use System Option "output_batch_size" for External Sort
- [DRILL-6210] - Enhance the test schema builder for remaining types
Task
- [DRILL-1491] - Support for JDK 8
- [DRILL-3993] - Rebase Drill on Calcite master branch
- [DRILL-6130] - Fix NPE during physical plan submission for various storage plugins
- [DRILL-6138] - Move RecordBatchSizer to org.apache.drill.exec.record package
- [DRILL-6208] - Fix FunctionInitializerTest#testConcurrentFunctionBodyLoad to use Mockito instead of JMockit
- [DRILL-6213] - During restart drillbit should be killed forcefully if exceeds allowed timeout
- [DRILL-6218] - Update release profile to not generate MD5 checksum


Locksmith Dorothy:
Have you been to the guild of the Dark Elves yet? I cannot deal with them, you must find
Magister Xenovia
and secure her assistance in contacting the souls of my dead partners! Or maybe you have a better idea?


TestFlightSDK 1.2 Reference
Introduction
The TestFlight SDK allows you to track how beta testers are testing your application. Out of the box we track simple usage information, such as which tester is using your application, their device model/OS, how long they used the application, logs of their test session, and automatic recording of any crashes they encounter.
To get the most out of the SDK we have provided the Checkpoint API.
The Checkpoint API is used to help you track exactly how your testers are using your application. Curious about which users passed level 5 in your game, or posted their high score to Twitter, or found that obscure feature? With a single line of code you can finally gather all this information. Wondering how many times your app has crashed? Wondering who your power testers are? We’ve got you covered. See more information on the Checkpoint API in section 4.
Alongside the Checkpoint API is the Questions interface. The Questions interface is managed on a per build basis on the TestFlight website. Find out more about the Questions Interface in section 6.
For more detailed debugging we have a remote logging solution. Find out more about our logging system with TFLog in the Remote Logging section.
Considerations
Information gathered by the SDK is sent to the website in real time. When an application is put into the background (iOS 4.x) or terminated (iOS 3.x) we try to send the finalizing information for the session during the time allowed for finalizing the application. Should all of the data not get sent the remaining data will be sent the next time the application is launched. As such, to get the most out of the SDK we recommend your application support iOS 4.0 and higher.
This SDK can be run from both the iPhone Simulator and Device and has been tested using Xcode 4.0.
Integration
- Add the files to your project: File –> Add Files to “ ”
- Find and select the folder that contains the SDK
- Make sure that “Copy items into destination folder (if needed)” is checked
- Set Folders to “Create groups for any added folders”
- Select all targets that you want to add the SDK to
- Verify that libTestFlight.a has been added to the Link Binary With Libraries Build Phase for the targets you want to use the SDK with
- Select your Project in the Project Navigator
- Select the target you want to enable the SDK for
- Select the Build Phases tab
- Open the Link Binary With Libraries Phase
- If libTestFlight.a is not listed, drag and drop the library from your Project Navigator to the Link Binary With Libraries area
- Repeat Steps 2 – 5 until all targets you want to use the SDK with have the SDK linked
Add libz to your Link Binary With Libraries Build Phase
- Select your Project in the Project Navigator
- Select the target you want to enable the SDK for
- Select the Build Phases tab
- Open the Link Binary With Libraries Phase
- Click the + to add a new library
- Find libz.dylib in the list and add it
- Repeat Steps 2 – 6 until all targets you want to use the SDK with have libz.dylib
In your Application Delegate:
Import TestFlight:
#import "
TestFlight.h"
NOTE: Rather than importing
TestFlight
.h
in every file you may add the above line into you pre-compiled header (<projectname>_Prefix.pch
) file inside of the#ifdef __OBJC__
section. This will give you access to the SDK across all files.
Get your Application Token which you can find at http://testflightapp.com/dashboard/applications/ select the application you are using from the list choose the SDK option and the application token for this application will be there. To ensure that your testers do not show up as anonymous place the call to setDeviceIdentifer before calling takeOff. Remove #define TESTING 1 before building your release build for the App Store.
Launch TestFlight with your Application Token
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // start of your application:didFinishLaunchingWithOptions // ... #define TESTING 1 #ifdef TESTING [TestFlight setDeviceIdentifier:[[UIDevice currentDevice] uniqueIdentifier]]; #endif [TestFlight takeOff:@"Insert your Application Token here"]; // The rest of your application:didFinishLaunchingWithOptions method // ... }
To report crashes to you we install our own uncaught exception handler. If you are not currently using an exception handler of your own then all you need to do is go to the next step.
To enable the best crash reporting possible we recommend setting the following project build settings in Xcode to NO for all targets that you want to have live crash reporting for. You can find build settings by opening the Project Navigator (default command+1 or command+shift+j) then clicking on the project you are configuring (usually the first selection in the list). From there you can choose to either change the global project settings or settings on an individual project basis. All settings below are in the Deployment Section.
- Deployment Post Processing
- Strip Debug Symbols During Copy
- Strip Linked Product
Beta Testing and Release Differentiation
In order to provide more information about your testers while beta testing you will need to provide the device’s unique identifier. This identifier is not something that the SDK will collect from the device and we do not recommend using this in production. To send the device identifier to us put the following code before your call to takeOff.
#define TESTING 1
#ifdef TESTING
[TestFlight setDeviceIdentifier:[[UIDevice currentDevice] uniqueIdentifier]];
#endif
This will allow you to have the best possible information during testing, but disable getting and sending of the device unique identifier when you release your application. When it is time to release simply comment out #define TESTING 1. If you decide to not include the device’s unique identifier during your testing phase TestFlight will still collect all of the information that you send but it may be anonymized.
Checkpoint API
When a tester does something you care about in your app you can pass a checkpoint. For example completing a level, adding a todo item, etc. The checkpoint progress is used to provide insight into how your testers are testing your apps. The passed checkpoints are also attached to crashes, which can help when creating steps to replicate.
[TestFlight passCheckpoint:@"CHECKPOINT_NAME"];
Use passCheckpoint:
to track when a user performs certain tasks in your application. This can be useful for making sure testers are hitting all parts of your application, as well as tracking which testers are being thorough.
Feedback API
To launch unguided feedback call the openFeedbackView method. We recommend that you call this from a GUI element.
-(IBAction)launchFeedback {
[TestFlight openFeedbackView];
}
If you want to create your own feedback form you can use the submitCustomFeedback method to submit the feedback that the user has entered.
-(IBAction)submitFeedbackPressed:(id)sender {
NSString *feedback = [self getUserFeedback];
[TestFlight submitFeedback:feedback];
}
The above sample assumes that [self getUserFeedback] is implemented such that it obtains the users feedback from the GUI element you have created and that submitFeedbackPressed is the action for your submit button.
Once users have submitted feedback from inside of the application you can view it in the feedback area of your build page.
Upload your build
After you have integrated the SDK into your application you need to upload your build to TestFlight. You can upload from your dashboard or or using the Upload API, full documentation at https://testflightapp.com/api/doc/
Questions Interface
In order to ask a question, you’ll need to associate it with a checkpoint. Make sure your checkpoints are initialized by running your app and hitting them all yourself before you start adding questions.
There are three question types available: Yes/No, Multiple Choice, and Long Answer.
To create questions, visit your builds Questions page and click on ‘Add Question’. If you choose Multiple Choice, you’ll need to enter a list of possible answers for your testers to choose from — otherwise, you’ll only need to enter your question’s, well, question. If your build has no questions, you can also choose to migrate questions from another build (because seriously — who wants to do all that typing again)?
After restarting your application on an approved device, when you pass the checkpoint associated with your questions a TestFlight modal question form will appear on the screen asking the beta tester to answer your question.
After you upload a new build to TestFlight you will need to associate questions once again. However if your checkpoints and questions have remained the same you can choose “copy questions from an older build” and choose which build to copy the questions from.
View the results
As testers install your build and start to test it you will see their session data on the web on the build report page for the build you’ve uploaded.
Advanced Exception Handling
An uncaught exception means that your application is in an unknown state and there is not much that you can do but try and exit gracefully. Our SDK does its best to get the data we collect in this situation to you while it is crashing, but it is designed in such a way that the important act of saving the data occurs in as safe way a way as possible before trying to send anything. If you do use uncaught exception or signal handlers install your handlers before calling takeOff
. Our SDK will then call your handler while ours is running. For example:
/*
My Apps Custom uncaught exception catcher, we do special stuff here, and TestFlight takes care of the rest
*/
void HandleExceptions(NSException *exception) {
NSLog(@"This is where we save the application data during a exception");
// Save application data on crash
}
/*
My Apps Custom signal catcher, we do special stuff here, and TestFlight takes care of the rest
*/
void SignalHandler(int sig) {
NSLog(@"This is where we save the application data during a signal");
// Save application data on crash
}
-(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// installs HandleExceptions as the Uncaught Exception Handler
NSSetUncaughtExceptionHandler(&HandleExceptions);
// create the signal action structure
struct sigaction newSignalAction;
// initialize the signal action structure
memset(&newSignalAction, 0, sizeof(newSignalAction));
// set SignalHandler as the handler in the signal action structure
newSignalAction.sa_handler = &SignalHandler;
// set SignalHandler as the handlers for SIGABRT, SIGILL and SIGBUS
sigaction(SIGABRT, &newSignalAction, NULL);
sigaction(SIGILL, &newSignalAction, NULL);
sigaction(SIGBUS, &newSignalAction, NULL);
// Call takeOff after install your own unhandled exception and signal handlers
[TestFlight takeOff:@"Insert your Application Token here"];
// continue with your application initialization
}
You do not need to add the above code if your application does not use exception handling already.
Remote Logging
To perform remote logging you can use the TFLog method which logs in a few different methods described below. In order to make the transition from NSLog to TFLog easy we have used the same method signature for TFLog as NSLog. You can easily switch over to TFLog by adding the following macro to your header
#define NSLog TFLog
That will do a switch from NSLog to TFLog, if you want more information, such as file name and line number you can use a macro like
#define NSLog(__FORMAT__, ...) TFLog((@"%s [Line %d] " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
Which will produce output that looks like
[HTFCheckpointsController showYesNoQuestion:] [Line 45] Pressed YES/NO
We have implemented three different loggers.
1. TestFlight logger
2. Apple System Log logger
3. STDERR logger
Each of the loggers log asynchronously and all TFLog calls are non blocking. The TestFlight logger writes its data to a file which is then sent to our servers on Session End events. The Apple System Logger sends its messages to the Apple System Log and are viewable using the Organizer in Xcode when the device is attached to your computer. The ASL logger can be disabled by turning it off in your TestFlight options
[TestFlight setOptions:[NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO] forKey:@"logToConsole"]];
The default option is YES.
The STDERR logger sends log messages to STDERR so that you can see your log statements while debugging. The STDERR logger is only active when a debugger is attached to your application. If you do not wish to use the STDERR logger you can disable it by turning it off in your TestFlight options
[TestFlight setOptions:[NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO] forKey:@"logToSTDERR"]];
The default option is YES.
Advanced Remote Logging
For most users we expect using TFLog to provide all of the logging functionality that they need. For the occasion where you need to provide a wrapper around TFLog we provide
void TFLogv(NSString *format, va_list arg_list);
Using TFLogv you can have your method that accepts a variable number of arguments that then passes that format and argument list to TFLog.
iOS3
We now require that anyone who is writing an application that supports iOS3 add the System.framework as an optional link. In order to provide a better shutdown experience we send any large log files to our servers in the background. To add System.framework as an optional link:
- Select your Project in the Project Navigator
- Select the target you want to enable the SDK for
- Select the Build Phases tab
- Open the Link Binary With Libraries Phase
- Click the + to add a new library
- Find libSystem.dylib in the list and add it
- To the right of libSystem.dylib in the Link Binary With Libraries pane change “Required” to “Optional”


import
statements which cover entire packages ('* imports').
Some coding standards prohibit such import
statements.
You can configure IntelliJ IDEA to detect and fix such statements with its "Optimize Imports" command. To do this, go to Settings | Editor | Code Style | Java | Imports, make sure that the "Use single class import" option is enabled and specify values in the "Class count to use import with '*'" and "Names count to use static import with '*'" fields. Thus this inspection is mostly useful for off-line reporting on code bases that you don't intend to change.


Earlier this month saw the publication of The Significant Properties of Spreadsheets. This is the final report of a six-year research effort by the Open Preservation Foundation’s Archives Interest Group (AIG), which is composed of participants from the National Archives of the Netherlands (NANETH), the National Archives of Estonia (NAE), the Danish National Archives (DNA), and Preservica. The report caught my attention for two reasons. First, there’s the subject matter of spreadsheets, on which I’ve written a few posts in the past1. Second, it marks a surprising (at least to me!) return of “significant properties”, a concept that was omnipresent in the digital preservation world between, roughly, 2005 and 2010, but which has largely fallen into disuse since then. In this post I’m sharing some of my thoughts on the report.
Over the years, I’ve been using a variety of open-source software tools for solving all sorts of issues with PDF documents. This post is an attempt to (finally) bring together my go-to PDF analysis and processing tools and commands for a variety of common tasks in one single place. It is largely based on a multitude of scattered lists, cheat-sheets and working notes that I made earlier. Starting with a brief overview of some general-purpose PDF toolkits, I then move on to a discussion of the following specific tasks:
My previous post addressed the emulation of mobile Android apps. In this follow-up, I’ll explore some other aspects of mobile app preservation, with a focus on acquisition and ingest processes. The 2019 iPres paper on the Acquisition and Preservation of Mobile eBook Apps by Maureen Pennock, Peter May and Michael Day again was the departure point. In its concluding section, they recommend:
In terms of target formats for acquisition, we reach the undeniable conclusion that acquisition of the app in its packaged form (either an IPA file or an APK file) is optimal for ensuring organisations at least acquire a complete published object for preservation.
And:
[T]his form should at least also include sufficient metadata about inherent technical dependencies to understand what is needed to meet them.
In practical terms, this means that the workflows that are used for acquisition and (pre-)ingest must include components that are able to deal with the following aspects:
Acquisition of the app packages (either by direct deposit from the publisher, or using the app store).
Identification of the package format (APK for Android, IPA for iOS).
Identification of metadata about the app’s technical dependencies.
The main objective of this post is to get an idea of what would be needed to implement these components. Is it possible to do all of this with existing tools? If not so, what are the gaps? The underlying assumption here is an emulation-based preservation strategy1.
So far the KB hasn’t actively pursued the preservation of mobile apps. However, born-digital publications in app-only form have become increasingly common, as well as “hybrid” publications, with apps that are supplemental to traditional (paper) books. At the request of our Digital Preservation department, I’ve started some exploratory investigations into how to preserve mobile apps in the near future. The 2019 iPres paper on the Acquisition and Preservation of Mobile eBook Apps by the British Library’s Maureen Pennock, Peter May and Michael Day provides an excellent starting point on the subject, and it highlights many of the challenges involved.
Before we can start archiving mobile apps ourselves, some additional aspects need to be addressed in more detail. One of these is the question of how to ensure long-term access. Emulation is the obvious strategy here, but I couldn’t find much information on the emulation of mobile platforms within a digital preservation context. In this blog post I present the results of some simple experiments, where I tried to emulate two selected apps. The main objective here was to explore the current state of emulation of mobile devices, and to get an initial impression of the suitability of some existing emulation solutions for long-term access.
For practical reasons I’ve limited myself to the Android platform1. Attentive readers may recall I briefly touched on this subject back in 2014. As much of the information in that blog post has now become outdated, this new post presents a more up-to date investigation. I should probably mention here that I don’t own or use any Android device, or any other kind of smartphone or tablet for that matter2. This probably makes me the worst possible person to evaluate Android emulation, but who’s going to stop me trying anyway? No one, that’s who!
Earlier this year I wrote a blog post about geo-locating web domains, and the subsequent analysis of the resulting data in QGIS. At the time, this work was meant as a proof of concept, and I had only tried it out on a small set of test data. We have now applied this methodology to the whole of the Dutch (.nl) web domain, and this follow-up post presents the results of this exercise.


Buy this soundtrack from the FFC Store!
1. The Prelude MIDI (11K) SPC
2. Red Wings [Cecil's Theme] MIDI (19K) SPC
3. Kingdom of Baron MIDI (27K) SPC
4. Theme of Love [Rosa's Theme] MIDI (8K) SPC
5. Prologue... MIDI (16K) SPC
6. Welcome To Our Town! MIDI (7K) SPC
7. Main Theme MIDI (27K) SPC
8. Fight 1 MIDI (19K) SPC
9. Fanfare MIDI (6K) SPC
10. Hello! Big Chocobo! MIDI (3K) SPC
11. Chocobo-Chocobo MIDI (13K) SPC
12. Into the Darkness MIDI (22K) SPC
13. Fight 2 MIDI (23K) SPC
14. Ring of Bomb MIDI (7K) SPC
15. Rydia MIDI [Arranged] (12K) SPC
16. Castle Damcyan MIDI (13K) SPC
17. Cry in Sorrow MIDI (10K) SPC 1 SPC 2
18. Melody of Lute [Edward's Theme] MIDI (6K) SPC
19. Mt. Ordeals MIDI (22K) SPC
20. Fabul MIDI (4K) SPC
21. Run! MIDI (16K) SPC
22. Suspicion MIDI (12K) SPC
23. Golbez, Clad in the Dark MIDI (8K) SPC
24. Hey, Cid! MIDI (37K) SPC
25. Mystic Mysidia MIDI (20K) SPC
26.  Palom and Porom MIDI (7K) SPC
28. The Dreadful Fight MIDI (57K) SPC
29. The Airship MIDI (14K) SPC
30. Tororian Beauty MIDI (17K) SPC
31. Samba De Chocobo! MIDI (3K) SPC
32. Tower of Babel MIDI (21K) SPC
33. Somewhere in the World... MIDI (4K) SPC
34. Land of Dwarves MIDI (13K) SPC
35. Giott, The Great King MIDI (9K) SPC
36. Dancing Calcobrena MIDI (7K) SPC
37. Tower of Zot MIDI (10K) SPC
38. Illusionary World MIDI (22K) SPC
39. The Big Whale MIDI (14K) SPC
40. Another Moon MIDI (96K) SPC
41. The Lunarians MIDI (86K) SPC
42. Within the Giant MIDI (19K) SPC
43. The Final Battle MIDI (38K) SPC
44. Epilogue MIDI (103K) SPC 1 SPC 2
Unreleased Tracks:
Moon's Core SPC - music from the Moon's Core final dungeon.
Chocobo Theme 2 SPC
Fanfare 2 SPC
Dancer SPC
Short Sound Clip SPC
Click here for all MIDIs from FF4 (108K).
Winamp-friendly Version (109K)
Click here for the SPCs from FF4 (1.81 Meg).
Peter Moore: The Prelude, Red Wings[Cecil's Theme], Theme of Love[Rosa's Theme], Main Theme, Golbeze, Clad In The Dark
JM Stalker: Kingdom of Baron
Andrew Thompson: Prologue..., Fight 1, Fight 2, Melody Of Lute[Edward's Theme], Hey Cid!, Long Way To Go, Somewhere In The World, Land Of Dwarves, Dancing Calcobrena, Tower of Zot, Illusionary World, The Big Whale
Paul Edward Jensen: Welcome To Our Town!, Into The Darkness, Troian Beauty
Jason Zaffary: Fanfare, Hello! Big Chocobo!, Chocobo-Chocobo, Samba de Chocobo!
Electric Mew: Ring of Bomb
Tomo Takebe: Rydia
Creak: Castle Damcyan
Rumil Erutan, Doremi: Cry In Sorrow, Suspicion
Daniel Smith: Mystic Mysidia, Another Moon
Wind Alpha: Palom and Porom
Andrew Thompson, Andrew Vestal: The Dreadful Fight
Nick Tsilakis: Tower of Babel
Seth Brown, Andrew Thompson: Jiott, The Great King
Jay Payne: Within The Giant
SEN: The Final Battle


447_dao5.py
class Solution:
def getMinDistSum(self, positions: List[List[int]]) -> float:
def dist(a,b):
Ds = [ ((pos[0]-a)**2 + (pos[1]-b)**2)**.5 for pos in positions]
return sum(Ds)
def go(x,y):
d = dist(x,y)
step = 10.
done = 0
while step>eps:
done = 0
for dx,dy in [[-1,0],[1,0],[0,-1],[0,1]]:
nx = 1.0*x + step*dx
ny = 1.0*y + step*dy
t = dist(nx,ny)
if t<d:
d = t
x = nx
y = ny
done = 1
break
if not done:
step /= 2.
return d
Xs = [pos[0] for pos in positions]
Ys = [pos[1] for pos in positions]
x = 1.*sum(Xs)/len(Xs)
y = 1.*sum(Ys)/len(Ys)
print(x, y)
eps = 1e-6
return go(x,y)


--- layout: post authors: ["Greg Wilson"] title: More News from the UK date: 2013-02-14 time: "10:00:00" tags: ["Community", "Workshop"] ---
Two pieces of news from the UK:


--- layout: post title: Sizes of JS frameworks, just minified minified and gzipped, (React, Angular 2, Vue, Ember), Bundle Size date: '2019-10-16T00:34:00.001+05:30' author: Sahil Rajput tags: modified_time: '2019-10-16T00:34:28.226+05:30' blogger_id: tag:blogger.com,1999:blog-5250005448924290719.post-7679751930657193704 blogger_orig_url: https://www.jaadujinn.ml/2019/10/sizes-of-js-frameworks-just-minified.html ---


For much of class we considered the act, process, and status of migration and being migratory. Our project considers the roots that take hold after migrating - the establishment of diaspora. The project has two components. The first, a map, is an interactive piece for classmates and visitors to map their own trails. Where have you come from, and where do you call home now? The second component is a zine. The articles cover our reflections on family, ancestors, food, discrimination - aka, daily life in the diaspora. On the cover, we extend the definition of diaspora: "we who belong in multiple spaces, we who belong nowhere." We hope this zine might be a reminder that if we belong nowhere, we do not belong nowhere alone
Digital copy of zine


I’m Jacob, from Québec. Where I come from, we say Un vrai couteau suisse, which mean A true Swiss knife, to say that a person is variously skilled and surprises you with unexplained or uncommon knowledge. My girlfriend calls me couteau suisse, hence the name of the blog.
Since I was a child, I was always interested in electronics. My grandfather, being an electronics teacher, helped me a lot to learn the basics of circuitry and electricity rules. During my teenage years, I discovered web development, and have since built multiple website projects. Before the end of High School, I had built from scratch an e-commerce portfolio to sell digital photographs with a custom CMS and a custom PayPal integration. I was also built and maintained a Cydia Repository for jailbroken iOS devices, iCauseFX. After that, I studied Computer Sciences as well as Electronics & Telecommunications, where I learned the logical and academic programing, CAD Design, Networking and Wireless protocols.
Wanting a clean slate to experiment minimal UI and new web paradigms, I set sail to rebuild my portfolio website, this time using Jekyll, GitHub Pages, Stripe and Snipcart. In its fifth year, the project has gone through many iterationa. In its current form, Stripe and Snipcart has been put aside. The whole UI is very minimal and soft to the eyes, putting the emphasis on the photographs and the various contexts and thoughts added. Take a look at jacobroy.quebec, also available on GitHub.
Having a big sensitivity to climate change, sustainable developments and renewable energy, a friend and I started a to build recycled and recyclable domestic-sized wind turbines. We are currently building weather stations to gather data and help finance the project. Subscribe to stay tuned, at beyondinnovations.tech.
Following Bitcoin and Cryptocurrencies since 2013, when I help to kickstart the Bitcoin Embassy in Montréal, I am now building a revolutionary project in this field. Started from the lack of adequate tools and scatered services, we are porting Financial tools to cryptos, porting multiple projects under one banner with single login and drasticaly reducing fees. Read more on asteroidlabs.io.
A humble place where my old or unused projects can lay back and enjoy the sun. Most of them should still be working.
Multiple unfinished or proof-of-concept projects that helps me get the job done.
This blog is lazyly built from Jekyll and uses the Lanyon theme with some modifications.