This document describes a protocol through which any repository containing documents encoded in TEI XML (or any other schema) may make examples of XML encoding available to any harvesting tool, or, through a form-based interface, to anyone interested in examining encoding practises. I recently presented the project at the TEI 2014 Conference in Evanston (PDF of paper), and the project itself is housed on SourceForge at https://sourceforge.net/projects/codesharing/.
This is not a formal specification, so it eschews the customary definitions of modal verbs and key adjectives.
There are currently three primary use-cases for an implementation of this protocol.
Large-scale encoding projects are increasingly common in the digital humanities. It is not unusual for five or six encoders to be working simultaneously on a document collection, with different levels of skills and experience. Good documentation and training is essential, but many people learn more effectively by looking at examples. A human-friendly front-end for a CodeSharing service, such as the HTML-form-based implementation included in the current codebase, can be a very useful tool for working encoders, enabling them to find examples of the current usage of tags and attributes on which to base their encoding.
Organizations with a strong investment in TEI encoding, including the TEI itself, will be interested in the possibility of querying multiple collections of TEI documents for information about the use of specific tags and attributes. For instance, the TEI Council, in its role as maintainer and updater of the Guidelines, often needs to know how a particular element is being used "in the wild" when considering how or whether to make a change to its definition or values.
TEI Council members working on improving and expanding the TEI Guidelines are often in search of realistic uses of elements and attributes to insert as examples into the Guidelines text and specifications. Repositories implementing a CodeSharing service would provide easily accessible sources for such examples.
CodeSharing requests are HTTP requests, submitted using the HTTP GET or POST methods. Since requests cannot by the nature of the CodeSharing protocol be very long, it is unlikely that normal length-limits for GET will be exceeded, so it is more practical to use GET than POST because GET requests can easily be bookmarked.
There is a single base URL for all requests. This base URL does not need to be included in any of the responses to requests, since it is impossible for the requester to retrieve a response without already knowing the URL; the base URL must be advertised to potential users and harvesters using other means, such as links on the project website.
In what follows, we will use the example base URL http://mapoflondon.uvic.ca/codesharing(.xml|.htm)
,
which is in fact a working prototype.
Requests made to the base URL must also include a list of keyword arguments in the form of key
=
value
pairs.
Keys and values are described below. Responses to requests on the base URL take the form of a TEI XML document, whose
parameters are described below.
In addition to the base URL for XML responses, a repository may also advertise a second URL on which requests can be made,
and which will provide responses in the form of an HTML page with output formatted for easy reading. Such an HTML page may
also include an HTML form, enabling a user to query the server more easily. An example of such an interface is available at
http://mapoflondon.uvic.ca/codesharing.htm. The key
=
value
parameters are identical when querying the XML or HTML URLs of a repository.
The following is a list of the keys and values that may be included in the request, and a brief description of the response the server should provide to each. The exact format of the response is treated in a later section.
verb
The verb
key is the primary component of the request. It can take the following values:
identify
: This causes the service to provide identification information about itself.listElements
: The service responds with a list of all the local names of elements which are in the namespace
supplied in the namespace
parameter (described below). Where the namespace
parameter is
empty, the service provides a list of elements which are in the empty namespace. Where the namespace
parameter
is not supplied, the service may choose to respond based on a default namespace (such as the TEI namespace, as our example
implementation does), or return no elements at all.listAttributes
: The service responds with a list of local attribute names. The same rules with regard to namespaces
apply as in the case of listElements
, but with one important exception. According to the XML specification, unprefixed
attributes do not inherit the namespace of their parent elements. This means that, for instance, the TEI @corresp
attribute,
even when it appears on a <name>
element in the TEI namespace, is not itself in the TEI namespace. This is
somewhat counter-intuitive for most people, and can lead to confusion. Therefore, in the CodeSharing protocol, a request with a
query-string like this:
?verb=listAttributes&namespace=namespace=http%3A%2F%2Fwww.tei-c.org%2Fns%2F1.0
(list attributes in the TEI namespace) will result in a list which is composed of the names of:
TEI attributes).
listDocumentTypes
: The service responds with a list of all the document types in the repository. How
document types are identified is entirely the responsibility of the service and the project whose documents it serves. The example
implementation is based on a project which uses the TEI <taxonomy> and <category>
elements as a mechanism
for specifying document types, along with <catRef>
elements for assigning them to documents, but any
TEI-compliant method of categorizing texts may be used. The list of document types should be in the form of human-readable
identifiers, with each identifier wrapped in a <name>
element; passing one of these identifiers back to the service
as the value of the documentType
parameter will result in the filtering of examples according to the
selected document type.
listNamespaces
: The service responds with a list of all the namespaces used in the repository.getExamples
: This causes the service to retrieve a list of examples of encoding, based on the values
of other key/value pairs in the request, and return them. If no other parameters are supplied, then no examples
are returned.Note that identify
is the default value for this key, and if the key is absent, or has no
value, identify
is assumed. This means that a request to the base URL with no parameters
at all is the same as a request with verb
=
identify
.
elementName
The value of this parameter is the local name of an XML element. Where verb
=
getExamples
, the service responds
with a set of examples of the element requested in the namespace which is specified. For example, this request:
?verb=getExamples&elementName=div&namespace=http%3A%2F%2Fwww.tei-c.org%2Fns%2F1.0
will retrieve a set of examples of the TEI

element, if it exists in documents in the repository.
attributeName
The value of this parameter is the local name of an XML attribute. Where verb
=
getExamples
, the service responds
with a set of examples of the attribute requested in the namespace which is specified. Attributes are always returned in the
context of their parent elements. For example, this request:
verb=getExamples&attributeName=ref&namespace=http%3A%2F%2Fwww.tei-c.org%2Fns%2F1.0
will retrieve a set of examples of elements which bear the TEI @ref
attribute, if it exists in documents in the repository. Note:
the same conditions regarding namespaces apply to this key as to the verb
=
listAttributes
parameter discussed above.
When this parameter is combined with the elementName
parameter, only attributes found in the context of the named
element will be returned. For instance, this request:
?verb=getExamples&elementName=hi&attributeName=rend&namespace=http%3A%2F%2Fwww.tei-c.org%2Fns%2F1.0
will retrieve only TEI <hi>
elements which bear the attribute @rend
.
attributeValue
The value of this parameter is the value of an XML attribute. Where verb
=
getExamples
, and an attributeName
parameter is provided, the service responds
with a set of examples of the attribute with the value requested in the namespace which is specified. Attributes are always returned in the
context of their parent elements. For example, this request:
verb=getExamples&attributeName=type&attributeValue=simple&namespace=http%3A%2F%2Fwww.tei-c.org%2Fns%2F1.0
will retrieve a set of examples of elements which bear the TEI @type
attribute set to the value simple
, if it exists in documents in the repository.
When the two attribute parameters are combined with the elementName
parameter, only attributes found in the context of the named
element will be returned. For instance, this request:
?verb=getExamples&elementName=list&attributeName=type&attributeValue=simple&namespace=http%3A%2F%2Fwww.tei-c.org%2Fns%2F1.0
will retrieve only TEI <list>
elements whose @type
attribute has the value simple
.
documentType
The value of this parameter is a string token. If this parameter is supplied, then the results of other requests will be filtered such that
only elements and attributes from documents which belong to the specified document type are returned. A harvester or human user may
discover what documentType
values are available in the collection by submitting a request with
verb
=
listDocumentTypes
. The
documentType
parameter is an optional feature of the API, and services working with collections which
do not have document type categories may choose not to provide it.
namespace
The value of this parameter is a namespace URL. In the case of a GET request, note that certain characters in the URL (such as colons and
slashes) will be escaped using hexadecimal representations in order to comply with RFC 2396.
The namespace
parameter provides the namespace context within which other requests operate, as described above.
wrapped
The key wrapped
may have two values:
true
false
(the default)If wrapped
=
true
, the elements found by the service in response to the rest of the request will be returned in the
context of their parent element. For example, this request:
?verb=getExamples&elementName=hi&wrapped=true&namespace=http%3A%2F%2Fwww.tei-c.org%2Fns%2F1.0
would result in a list of examples of elements which contain the TEI <hi>
element
(such as

). This is particularly useful for learning about the typical usage of an
element and the contexts in which it is found.
maxItemsPerPage
The value of this key is a positive integer. This enables a harvester to specify the maximum number of items which it is prepared to process in one operation. However, it is only a request. The service is free to impose its own maximum number of items per page on its responses, and this may override the number requested in this parameter. This is important, because it would be relatively easy to overwhelm a server providing CodeSharing services for a large repository by requesting a response containing thousands of elements.
Note: this parameter works in conjunction with the paging functionality described below.
Responses to requests on the base URL of the service (XML responses) must conform with the following guidelines:
application/tei+xml
application/xml
text/xml
<front>
element of the response must include key pieces of information in the form of
elements with the @xml:id
attributes specified below in Data points.
element of the response must include the results of the query, in the format described
below in Format of results.There are no rules or guidelines regarding the format of a response on to the HTML URL of a CodeSharing service; any human-readable page which includes the response information in some format is acceptable.
The following data points are returned in the <front>
element of the TEI response file. Each
data point is identified by an @xml:id
attribute beginning with "cs_" (for "CodeSharing"). The data
itself comprises the text content of the element. There is no constraint on what type of element should be used,
as long as it has the correct @xml:id
. Some data is required, and some is optional. Many of these data
points simply echo back input parameters.
cs_project
required
A string identifying the project or repository
whose markup can be queried through the service.cs_verb
required
The value of the verb
parameter which has been passed in as part of the query.cs_namespace
required
The value of the namespace
parameter which has been passed in as part of the query.cs_elementName
required
The value of the elementName
parameter which has been passed in as part of the query.cs_attributeName
required
The value of the attributeName
parameter which has been passed in as part of the query.cs_wrapped
required
The value of the wrapped
parameter which has been passed in as part of the query.cs_totalInstances
required
The total number of results from the query (of which a subset
appears in the response page, based on the effective maximum number per page).cs_nextUrl
required
An absolute or relative URL which leads to the next page of
results, in the case where there are more results from the query than can fit on one page (based on the maxItemsPerPage
value submitted in the query, which may be overridden by the server's own limits).cs_documentType
optional
The value of the
documentType
parameter.cs_defaultMaxItemsPerPage
optional
The default paging maximum used by the server
where no value is supplied in the maxItemsPerPage
parameter.cs_absoluteMaxItemsPerPage
optional
The server's internal absolute limit on the number
of results it is prepared to supply in a single page (this overrides the maxItemsPerPage
parameter).cs_maxItemsPerPage
optional
The value of the maxItemsPerPage
parameter.cs_totalInstances
optional
The total number of results from the query (of which a subset
appears in the response page, based on the effective maximum number per page).cs_from
optional
Where there are more results than will fit on one page,
this is the number of the first result in the current page, as part of the total number of results. For example, if there are 100 results of the
query, and a maximum number per page of 20, then the first page of results will have cs_from
=1
,
the second will have cs_from
=21
, and so on.cs_next
optional
Where there are more results than will fit on one page,
this is the number of the first result in the following page, as part of the total number of results. For example, if there are 100 results of the
query, and a maximum number per page of 20, then the first page of results will have cs_next
=21
,
the second will have cs_from
=41
, and so on.cs_currParams
optional
This is a complete copy of the query which
was submitted to get these results, in the form of the query string of a GET URL (everything following the question mark). For example:
verb=getExamples&elementName=hi&wrapped=false&attributeName=&namespace=http%3A%2F%2Fwww.tei-c.org%2Fns%2F1.0&maxItemsPerPage=30&from=1
This may be useful in cases where a harvester is collecting and storing results; it provides a simple way to run the same query again at a later date.
cs_nextParams
optional
In the case of a multi-page result set, this is a
complete copy of the query which would be submitted to get the next page of results, in the form of the query string of a GET URL
(everything following the question mark).cs_prevParams
optional
In the case of a multi-page result set, this is a
complete copy of the query which would be submitted to get the previous page of results, in the form of the query string of a GET URL
(everything following the question mark).cs_url
optional
An absolute or relative URL to the base of the codesharing
service.cs_prevUrl
optional
An absolute or relative URL to the base of the codesharing
service, combined with the parameters required to retrieve the previous page of results.Results are always returned in the
of the TEI XML result document. They are formatted as follows:
verb
=
listElements
request) is returned using the <list>
, <item>
and <gi>
elements, as in this example:
<list> <item> <gi>author</gi> </item> <item> <gi>availability</gi> </item> <item> <gi>back</gi> </item> [...] </list>
verb
=
listAttributes
request) is returned using the <list>
, <item>
and <att>
elements, as in this example:
<list> <item> <att>calendar</att> </item> <item> <att>cert</att> </item> <item> <att>code</att> </item> [...] </list>
verb
=
listDocumentTypes
request) is returned using the <list>
, <item>
and <name>
elements. Supplementary information may be supplied following the <name>
elements, as in this example:
<list> <item> <name>mdtBornDigital</name> : Born-digital documents created as part of this project, and not based on any pre-existing source text. </item> <item> <name>mdtCritical</name> : Critical apparatus, introductions and textual notes relating to digital editions of primary texts. </item> <item> <name>mdtDatabase</name> : Database-like documents containing a sequence of records, such as a personography. </item> [...] </list>
verb
=
listNamespaces
request) is returned using the <list>
, <item>
and <ptr>
elements, as in this example:
<list> <item>[empty namespace]</item> <item> <ptr target="http://purl.oclc.org/dsdl/schematron"/> </item> <item> <ptr target="http://www.tei-c.org/ns/1.0"/> </item> <item> <ptr target="http://relaxng.org/ns/structure/1.0"/> </item> [...] </list>Note the special case of the empty namespace.
verb
=
getExamples
request) is returned in a

element containing
a sequence of <egXML>
elements, as in this example:

 <egXML xmlns="http://www.tei-c.org/ns/Examples"> Bibliographies </egXML> <egXML xmlns="http://www.tei-c.org/ns/Examples"> Fun Resources </egXML> <egXML xmlns="http://www.tei-c.org/ns/Examples"> Introduction </egXML> [...]
Note that the
<egXML>
element is not in the regular TEI namespace; it is in the
TEI Examples namespace, and that namespace is inherited by the child elements. The <egXML>
element may also carry the @source
attribute, with an identifier for the document from which
the example comes; this is optional, and its functionality (how its path is designated, etc.) is left to the
implementation.
As mentioned above, where there are more results than can be fit on one page, the result document
will always contain an element with the @xml:id
cs_nextUrl
, so
that the user or harvester can retrieve a series of result pages until the entire result set has been
gathered, if required. Assuming that all the parameters for the subsequent request can be encoded in the
cs_nextUrl
value, the server need not maintain an session record and the
entire API can function in a stateless manner, as does the sample XQuery implementation running on the
Map of Early Modern London website. However, if it
suits the implementer to maintain state on the server, to avoid (for instance) having to do expensive
queries multiple times, then there is nothing to prevent this.
Nevertheless, since the protocol is intended to function in a stateless manner, it is possible that the underlying data may change between requests in a series. If, for instance, a document is deleted between the first and second requests for examples of an element, and the number of such examples is thereby reduced, the second page of results may not be what was expected; in fact in may be empty. This is not regarded as problematic; there is no requirement that a series of result pages, when amalgamated, need precisely reflect a particular coherent state of the repository.
This section provides several example requests along with constructed URLs for them,
linked to the example implementation on the
Map of Early Modern London website. Links
are provided both to the base URL http://mapoflondon.uvic.ca/codesharing
(resulting in an XML response), and the HTML front-end of the
service http://mapoflondon.uvic.ca/codesharing
, which provides a more
human-readable rendering created by transforming the XML response
to XHTML5 using XSLT.
verb=listElements namespace=http://www.tei-c.org/ns/1.0

elements in the repository:
verb=getExamples elementName=head namespace=http://www.tei-c.org/ns/1.0
@style
attributes, on any element:
verb=getExamples attributeName=style namespace=http://www.tei-c.org/ns/1.0
@style
attributes appearing on the <hi>
element, and return them in the context of their parent element:
verb=getExamples elementName=hi attributeName=style wrapped=true namespace=http://www.tei-c.org/ns/1.0
The following features are under consideration for a future version of this protocol:
The OAI-PMH protocol, which is a strong influence on this one, includes the option for the server to supply a response to the querying harvester in a compressed format. Where large quantities of XML data are being harvested, this might be a useful feature.
This protocol is designed to be as simple as possible, so that it can easily be implemented and understood both by implementers and users. However, sophisticated users who are familiar with XPath and XQuery are likely to find its limitations frustrating. One obvious way to expand the protocol is to allow querying of the data using XPath and/or XQuery. This presents potential issues of security and input-sanitization, so it would need some careful thought; an XPath query could easily construct a single response element that includes the entire collection that is being queried, bringing the responding server to its knees, and an XQuery could modify or delete data if permissions are not correctly configured.
It would be useful if information about the source document from which an example is taken could be provided
along with the example. This might be supplied as a URI in the @source
attribute on the
<egXML>
element. This would have to be optional, since many repositories do not provide
access to their XML source code as a matter of course, and may choose to implement the CodeSharing API
in a manner that excludes some components of their documents.
Other than providing the option to "wrap" a target element in its parent, the current version of the protocol provides no contextual information about any element in the response. It might be useful if there were a method of specifying a stable identifier for any result element, which could be expressed as an attribute on the containing <egXML> element. However, it is by no means clear that any such identifier could be stable in the long-term, given that collections change and data is edited, and there is no current use-case for any such identifier.
The previous text on this page is taken from Holmes, Martin: The CodeSharing Protocol for TEI Markup. Version 1.0.. The copy at hand is made use of for the project The School of Salamanca. For the privacy policy and imprint information of this webpage, please refer to the project's Privacy Policy & Imprint.


| KAFKA-496 |
high level producer send should return a response |
Blocker |
core |
Jun Rao |
Jay Kreps |
| KAFKA-328 |
Write unit test for kafka server startup and shutdown API |
Major |
. |
Neha Narkhede |
BalajiSeshadri |
| KAFKA-1057 |
Trim whitespaces from user specified configs |
Major |
config |
Neha Narkhede |
Manikumar Reddy |
| KAFKA-1668 |
TopicCommand doesn't warn if --topic argument doesn't match any topics |
Minor |
tools |
Ryan Berdeen |
Manikumar Reddy |
| KAFKA-1648 |
Round robin consumer balance throws an NPE when there are no topics |
Major |
consumer |
Todd Palino |
Mayuresh Gharat |
| KAFKA-1702 |
Messages silently Lost by producer |
Major |
producer |
Alexis Midon |
Alexis Midon |
| KAFKA-1698 |
Validator.ensureValid() only validates default config value |
Major |
core |
Jun Rao |
Ewen Cheslack-Postava |
| KAFKA-1727 |
Fix comment about message format |
Trivial |
. |
Muneyuki Noguchi |
Muneyuki Noguchi |
| KAFKA-1641 |
Log cleaner exits if last cleaned offset is lower than earliest offset |
Major |
. |
Joel Koshy |
Guozhang Wang |
| KAFKA-1700 |
examples directory - README and shell scripts are out of date |
Minor |
. |
Geoff Anderson |
Geoff Anderson |
| KAFKA-1711 |
WARN Property topic is not valid when running console producer |
Major |
core |
Jun Rao |
Joe Crobak |
| KAFKA-1583 |
Kafka API Refactoring |
Major |
. |
Guozhang Wang |
Guozhang Wang |
| KAFKA-1733 |
Producer.send will block indeterminately when broker is unavailable. |
Major |
core, producer |
Marc Chung |
Marc Chung |
| KAFKA-1747 |
TestcaseEnv improperly shares state between instances |
Major |
system tests |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-1746 |
System tests don't handle errors well |
Major |
system tests |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-1739 |
Remove testComplexCompressDecompress in MessageCompressionTest |
Major |
. |
Guozhang Wang |
Manikumar Reddy |
| KAFKA-1762 |
Update max-inflight-request doc string |
Major |
. |
Guozhang Wang |
Guozhang Wang |
| KAFKA-1481 |
Stop using dashes AND underscores as separators in MBean names |
Critical |
core |
Otis Gospodnetic |
Vladimir Tretyakov |
| KAFKA-1667 |
topic-level configuration not validated |
Major |
. |
Ryan Berdeen |
Dmytro Kostiuchenko |
| KAFKA-1798 |
ConfigDef.parseType() should throw exception on invalid boolean value |
Major |
. |
Jun Rao |
dokovan |
| KAFKA-1803 |
UncleanLeaderElectionEnableProp in LogConfig should be of boolean |
Major |
core |
Jun Rao |
Dave Parfitt |
| KAFKA-1812 |
Allow IpV6 in configuration with parseCsvMap |
Minor |
. |
Jeff Holoman |
Jeff Holoman |
| KAFKA-1815 |
ServerShutdownTest fails in trunk. |
Minor |
. |
Anatoly Fayngelerin |
Anatoly Fayngelerin |
| KAFKA-1813 |
Build fails for scala 2.9.2 |
Minor |
build |
Anatoly Fayngelerin |
Anatoly Fayngelerin |
| KAFKA-1720 |
[Renaming / Comments] Delayed Operations |
Major |
. |
Guozhang Wang |
Guozhang Wang |
| KAFKA-742 |
Existing directories under the Kafka data directory without any data cause process to not start |
Major |
config |
Chris Curtin |
Ashish K Singh |
| KAFKA-1070 |
Auto-assign node id |
Major |
. |
Jay Kreps |
Sriharsha Chintalapani |
| KAFKA-1836 |
metadata.fetch.timeout.ms set to zero blocks forever |
Minor |
clients |
Paul Pearcy |
jaikiran pai |
| KAFKA-1878 |
ProducerFailureHandlingTest.testCannotSendToInternalTopic fails with TimeoutException while trying to fetch metadata for topic |
Major |
system tests |
jaikiran pai |
jaikiran pai |
| KAFKA-1848 |
Checking shutdown during each iteration of ZookeeperConsumerConnector |
Major |
. |
Aditya Auradkar |
Aditya Auradkar |
| KAFKA-1891 |
MirrorMaker hides consumer exception - making troubleshooting challenging |
Major |
. |
Gwen Shapira |
Gwen Shapira |
| KAFKA-1890 |
Fix bug preventing Mirror Maker from successful rebalance. |
Blocker |
. |
Jiangjie Qin |
Jiangjie Qin |
| KAFKA-1896 |
Record size funcition of record in mirror maker hit NPE when the message value is null. |
Major |
. |
Jiangjie Qin |
Jiangjie Qin |
| KAFKA-1109 |
Need to fix GC log configuration code, not able to override KAFKA_GC_LOG_OPTS |
Major |
. |
Viktor Kolodrevskiy |
Manikumar Reddy |
| KAFKA-1883 |
NullPointerException in RequestSendThread |
Major |
core |
jaikiran pai |
jaikiran pai |
| KAFKA-665 |
Outgoing responses delayed on a busy Kafka broker |
Critical |
. |
Neha Narkhede |
|
| KAFKA-1697 |
remove code related to ack>1 on the broker |
Major |
. |
Jun Rao |
Gwen Shapira |
| KAFKA-1960 |
.gitignore does not exclude test generated files and folders. |
Minor |
build |
Tong Li |
Tong Li |
| KAFKA-1959 |
Class CommitThread overwrite group of Thread class causing compile errors |
Major |
core |
Tong Li |
Tong Li |
| KAFKA-1867 |
liveBroker list not updated on a cluster with no topics |
Major |
. |
Jun Rao |
Sriharsha Chintalapani |
| KAFKA-1947 |
can't explicitly set replica-assignment when add partitions |
Major |
core |
Honghai Chen |
Honghai Chen |
| KAFKA-1757 |
Can not delete Topic index on Windows |
Minor |
log |
Lukáš Vyhlídka |
Sriharsha Chintalapani |
| KAFKA-1724 |
Errors after reboot in single node setup |
Major |
. |
Ciprian Hacman |
Sriharsha Chintalapani |
| KAFKA-1881 |
transient unit test failure in testDeleteTopicWithCleaner due to OOME |
Major |
core |
Jun Rao |
Ewen Cheslack-Postava |
| KAFKA-1866 |
LogStartOffset gauge throws exceptions after log.delete() |
Major |
. |
Gian Merlino |
Sriharsha Chintalapani |
| KAFKA-1824 |
in ConsoleProducer - properties key.separator and parse.key no longer work |
Major |
tools |
Gwen Shapira |
Gwen Shapira |
| KAFKA-1865 |
Add a flush() call to the new producer API |
Major |
. |
Jay Kreps |
Jay Kreps |
| KAFKA-1852 |
OffsetCommitRequest can commit offset on unknown topic |
Major |
. |
Jun Rao |
Sriharsha Chintalapani |
| KAFKA-2001 |
OffsetCommitTest hang during setup |
Major |
core |
Jun Rao |
Joel Koshy |
| KAFKA-1999 |
Fix failing unit-test: kafka.api.ProducerFailureHandlingTest > testNotEnoughReplicasAfterBrokerShutdown |
Major |
. |
Gwen Shapira |
Gwen Shapira |
| KAFKA-1988 |
org.apache.kafka.common.utils.Utils.abs method returns wrong value for negative numbers. |
Blocker |
. |
Tong Li |
Tong Li |
| KAFKA-2009 |
Fix UncheckedOffset.removeOffset synchronization and trace logging issue in mirror maker |
Major |
. |
Jiangjie Qin |
Jiangjie Qin |
| KAFKA-1964 |
testPartitionReassignmentCallback hangs occasionally |
Major |
admin |
Jun Rao |
Guozhang Wang |
| KAFKA-1969 |
NPE in unit test for new consumer |
Major |
. |
Neha Narkhede |
Guozhang Wang |
| KAFKA-1975 |
testGroupConsumption occasionally hang |
Major |
. |
Jun Rao |
|
| KAFKA-1948 |
kafka.api.consumerTests are hanging |
Major |
. |
Gwen Shapira |
Guozhang Wang |
| KAFKA-1863 |
Exception categories / hierarchy in clients |
Major |
. |
Guozhang Wang |
Guozhang Wang |
| KAFKA-2042 |
New producer metadata update always get all topics. |
Blocker |
. |
Jiangjie Qin |
Jiangjie Qin |
| KAFKA-1634 |
Improve semantics of timestamp in OffsetCommitRequests and update documentation |
Blocker |
. |
Neha Narkhede |
Guozhang Wang |
| KAFKA-2024 |
Cleaner can generate unindexable log segments |
Major |
. |
Gian Merlino |
Rajini Sivaram |
| KAFKA-2043 |
CompressionType is passed in each RecordAccumulator append |
Minor |
clients |
Grant Henke |
Grant Henke |
| KAFKA-2099 |
BrokerEndPoint file, methods and object names should match |
Major |
. |
Gwen Shapira |
Gwen Shapira |
| KAFKA-2033 |
Small typo in documentation |
Major |
consumer |
Pierre-Yves Ritschard |
Pierre-Yves Ritschard |
| KAFKA-1992 |
Following KAFKA-1697, checkEnoughReplicasReachOffset doesn't need to get requiredAcks |
Major |
. |
Gwen Shapira |
Gwen Shapira |
| KAFKA-1973 |
Remove the accidentally created LogCleanerManager.scala.orig |
Major |
. |
Jiangjie Qin |
Grant Henke |
| KAFKA-1517 |
Messages is a required argument to Producer Performance Test |
Trivial |
. |
Daniel Compton |
Daniel Compton |
| KAFKA-2104 |
testDuplicateListeners() has a typo |
Major |
. |
Gwen Shapira |
Gwen Shapira |
| KAFKA-766 |
Isr shrink/expand check is fragile |
Major |
. |
Sriram Subramanian |
Neha Narkhede |
| KAFKA-2112 |
make overflowWheel volatile |
Major |
purgatory |
Yasuhiro Matsuda |
Yasuhiro Matsuda |
| KAFKA-2115 |
Error updating metrics in RequestChannel |
Major |
. |
Gwen Shapira |
Gwen Shapira |
| KAFKA-2117 |
OffsetManager uses incorrect field for metadata |
Major |
core |
Jun Rao |
Guozhang Wang |
| KAFKA-2113 |
TestPurgatoryPerformance does not compile using IBM JDK |
Major |
. |
Rajini Sivaram |
Rajini Sivaram |
| KAFKA-2088 |
kafka-console-consumer.sh should not create zookeeper path when no brokers found and chroot was set in zookeeper.connect |
Minor |
clients |
Zhiqiang He |
Zhiqiang He |
| KAFKA-2122 |
Remove controller.message.queue.size Config |
Major |
. |
Onur Karaman |
Sriharsha Chintalapani |
| KAFKA-2114 |
Unable to change min.insync.replicas default |
Major |
. |
Bryan Baugher |
Gwen Shapira |
| KAFKA-2118 |
Cleaner cannot clean after shutdown during replaceSegments |
Major |
. |
Gian Merlino |
Rajini Sivaram |
| KAFKA-1940 |
Initial checkout and build failing |
Major |
build |
Martin Lemanski |
Martin Lemanski |
| KAFKA-1884 |
Print metadata response errors |
Major |
producer |
Manikumar Reddy |
Manikumar Reddy |
| KAFKA-2121 |
prevent potential resource leak in KafkaProducer and KafkaConsumer |
Major |
producer |
Steven Zhen Wu |
Steven Zhen Wu |
| KAFKA-2169 |
Upgrade to zkclient-0.5 |
Critical |
. |
Neha Narkhede |
Parth Brahmbhatt |
| KAFKA-1374 |
LogCleaner (compaction) does not support compressed topics |
Major |
. |
Joel Koshy |
Manikumar Reddy |
| KAFKA-2189 |
Snappy compression of message batches less efficient in <IP_ADDRESS> |
Blocker |
build, compression, log |
Olson,Andrew |
Ismael Juma |
| KAFKA-2226 |
NullPointerException in TestPurgatoryPerformance |
Major |
. |
Onur Karaman |
Yasuhiro Matsuda |
| KAFKA-2161 |
Fix a few copyrights |
Trivial |
. |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-2253 |
Deadlock in delayed operation purgatory |
Major |
. |
Mayuresh Gharat |
Guozhang Wang |
| KAFKA-2266 |
Client Selector can drop idle connections without notifying NetworkClient |
Major |
. |
Jason Gustafson |
Jason Gustafson |
| KAFKA-2232 |
make MockProducer generic |
Major |
clients |
Jun Rao |
Alexander Pakulov |
| KAFKA-2164 |
ReplicaFetcherThread: suspicious log message on reset offset |
Major |
. |
Alexey Ozeritskiy |
|
| KAFKA-2250 |
ConcurrentModificationException in metrics reporting |
Major |
. |
Jason Rosenberg |
|
| KAFKA-2251 |
"Connection reset by peer" IOExceptions should not be logged as ERROR |
Major |
. |
Jason Rosenberg |
|
| KAFKA-2101 |
Metric metadata-age is reset on a failed update |
Major |
. |
Tim Brooks |
Tim Brooks |
| KAFKA-2270 |
incorrect package name in unit tests |
Minor |
core |
Jun Rao |
Proneet Verma |
| KAFKA-2272 |
listeners endpoint parsing fails if the hostname has capital letter |
Major |
. |
Sriharsha Chintalapani |
Sriharsha Chintalapani |
| KAFKA-2264 |
SESSION_TIMEOUT_MS_CONFIG in ConsumerConfig should be int |
Trivial |
clients |
Jun Rao |
Manikumar Reddy |
| KAFKA-2252 |
Socket connection closing is logged, but not corresponding opening of socket |
Major |
. |
Jason Rosenberg |
Gwen Shapira |
| KAFKA-2262 |
LogSegmentSize validation should be consistent |
Trivial |
core |
Jun Rao |
Manikumar Reddy |
| KAFKA-2234 |
Partition reassignment of a nonexistent topic prevents future reassignments |
Blocker |
. |
Bob Halley |
Manikumar Reddy |
| KAFKA-1758 |
corrupt recovery file prevents startup |
Major |
log |
Jason Rosenberg |
Manikumar Reddy |
| KAFKA-1465 |
kafka-reassign-partitions.sh fails when topic name contains dash/hyphen |
Major |
tools |
Adrian Muraru |
|
| KAFKA-2012 |
Broker should automatically handle corrupt index files |
Major |
. |
Todd Palino |
Manikumar Reddy |
| KAFKA-2290 |
OffsetIndex should open RandomAccessFile consistently |
Major |
core |
Jun Rao |
Chris Black |
| KAFKA-2235 |
LogCleaner offset map overflow |
Major |
core, log |
Ivan Simoneko |
Ivan Simoneko |
| KAFKA-2294 |
javadoc compile error due to illegal <p/> , build failing (jdk 8) |
Major |
. |
Jeremy Fields |
Jeff Maxwell |
| KAFKA-2281 |
org.apache.kafka.clients.producer.internals.ErrorLoggingCallback holds unnecessary byte[] value |
Major |
producer |
TAO XIAO |
TAO XIAO |
| KAFKA-2291 |
Documentation Error |
Trivial |
website |
UTKARSH BHATNAGAR |
|
| KAFKA-1735 |
MemoryRecords.Iterator needs to handle partial reads from compressed stream |
Major |
. |
Guozhang Wang |
Guozhang Wang |
| KAFKA-2248 |
Use Apache Rat to enforce copyright headers |
Major |
build |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-1367 |
Broker topic metadata not kept in sync with ZooKeeper |
Major |
. |
Ryan Berdeen |
Ashish K Singh |
| KAFKA-2304 |
Support enabling JMX in Kafka Vagrantfile |
Minor |
. |
Stevo Slavic |
Stevo Slavic |
| KAFKA-2306 |
New producer should emit metrics for buffer exhaustion |
Major |
. |
Dong Lin |
Dong Lin |
| KAFKA-2317 |
De-register isrChangeNotificationListener on controller resignation |
Major |
controller |
Ashish K Singh |
Ashish K Singh |
| KAFKA-2313 |
javadoc fix for KafkaConsumer deserialization |
Trivial |
. |
Onur Karaman |
Onur Karaman |
| KAFKA-2308 |
New producer + Snappy face un-compression errors after broker restart |
Major |
. |
Gwen Shapira |
Gwen Shapira |
| KAFKA-2316 |
Drop java 1.6 support |
Major |
. |
Sriharsha Chintalapani |
Sriharsha Chintalapani |
| KAFKA-2327 |
broker doesn't start if config defines advertised.host but not advertised.port |
Minor |
. |
Geoff Anderson |
Geoff Anderson |
| KAFKA-972 |
MetadataRequest returns stale list of brokers |
Major |
core |
Vinicius Carvalho |
Ashish K Singh |
| KAFKA-2198 |
kafka-topics.sh exits with 0 status on failures |
Major |
admin |
Bob Halley |
Manikumar Reddy |
| KAFKA-2249 |
KafkaConfig does not preserve original Properties |
Major |
. |
Gwen Shapira |
Gwen Shapira |
| KAFKA-2335 |
Javadoc for Consumer says that it's thread-safe |
Major |
consumer |
Ismael Juma |
Jason Gustafson |
| KAFKA-2032 |
ConsumerConfig doesn't validate partition.assignment.strategy values |
Major |
. |
Jason Rosenberg |
Parth Brahmbhatt |
| KAFKA-2241 |
AbstractFetcherThread.shutdown() should not block on ReadableByteChannel.read(buffer) |
Major |
. |
Dong Lin |
Dong Lin |
| KAFKA-2345 |
Attempt to delete a topic already marked for deletion throws ZkNodeExistsException |
Major |
. |
Ashish K Singh |
Ashish K Singh |
| KAFKA-2337 |
Verify that metric names will not collide when creating new topics |
Major |
. |
Gwen Shapira |
Grant Henke |
| KAFKA-2353 |
SocketServer.Processor should catch exception and close the socket properly in configureNewConnections. |
Major |
. |
Jiangjie Qin |
Jiangjie Qin |
| KAFKA-2381 |
Possible ConcurrentModificationException while unsubscribing from a topic in new consumer |
Major |
consumer |
Ashish K Singh |
Ashish K Singh |
| KAFKA-2347 |
Add setConsumerRebalanceListener method to ZookeeperConsuemrConnector java api. |
Major |
. |
Jiangjie Qin |
Ashish K Singh |
| KAFKA-2276 |
Initial patch for KIP-25 |
Major |
. |
Geoff Anderson |
Geoff Anderson |
| KAFKA-2357 |
Update zookeeper.connect description in Kafka documentation |
Major |
. |
Yuto Sasaki |
David Jacot |
| KAFKA-2026 |
Logging of unused options always shows null for the value and is misleading if the option is used by serializers |
Trivial |
clients |
Ewen Cheslack-Postava |
Manikumar Reddy |
| KAFKA-2405 |
KafkaHealthCheck kills the JVM in handleSessionEstablishmentError |
Major |
core |
jaikiran pai |
jaikiran pai |
| KAFKA-2288 |
Follow-up to KAFKA-2249 - reduce logging and testing |
Major |
. |
Gwen Shapira |
Gwen Shapira |
| KAFKA-2407 |
Only create a log directory when it will be used |
Major |
. |
Grant Henke |
Grant Henke |
| KAFKA-2393 |
Correctly Handle InvalidTopicException in KafkaApis.getTopicMetadata() |
Major |
. |
Grant Henke |
Grant Henke |
| KAFKA-2413 |
New consumer's subscribe(Topic...) api fails if called more than once |
Major |
consumer |
Ashish K Singh |
Onur Karaman |
| KAFKA-2202 |
ConsumerPerformance reports a throughput much higher than the actual one |
Minor |
tools |
Micael Capitão |
Manikumar Reddy |
| KAFKA-2336 |
Changing offsets.topic.num.partitions after the offset topic is created breaks consumer group partition assignment |
Major |
core |
Grant Henke |
Grant Henke |
| KAFKA-2408 |
(new) system tests: ConsoleConsumerService occasionally fails to register consumed message |
Major |
. |
Geoff Anderson |
Geoff Anderson |
| KAFKA-2406 |
ISR propagation should be throttled to avoid overwhelming controller. |
Blocker |
. |
Jiangjie Qin |
Jiangjie Qin |
| KAFKA-1782 |
Junit3 Misusage |
Major |
. |
Guozhang Wang |
Alexander Pakulov |
| KAFKA-2438 |
add maxParallelForks to build.gradle to speedup tests |
Major |
. |
Sriharsha Chintalapani |
Sriharsha Chintalapani |
| KAFKA-2436 |
log.retention.hours should be honored by LogManager |
Critical |
. |
Dong Lin |
Dong Lin |
| KAFKA-2330 |
Vagrantfile sets global configs instead of per-provider override configs |
Minor |
. |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-1901 |
Move Kafka version to be generated in code by build (instead of in manifest) |
Major |
. |
Jason Rosenberg |
Manikumar Reddy |
| KAFKA-1877 |
Expose version via JMX for 'new' producer |
Major |
clients, producer |
Vladimir Tretyakov |
Manikumar Reddy |
| KAFKA-2130 |
Resource leakage in AppInfo.scala during initialization |
Trivial |
. |
Sebastien Zimmer |
Manikumar Reddy |
| KAFKA-2457 |
StackOverflowError during builds |
Critical |
. |
Ismael Juma |
Ismael Juma |
| KAFKA-2467 |
ConsoleConsumer regressions |
Major |
tools |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-2466 |
ConsoleConsumer throws ConcurrentModificationException on termination |
Major |
tools |
Ashish K Singh |
Ashish K Singh |
| KAFKA-2468 |
SIGINT during Kafka server startup can leave server deadlocked |
Major |
. |
Ashish K Singh |
Ashish K Singh |
| KAFKA-2469 |
System test console consumer logs should write all messages to debug logger |
Minor |
system tests |
Ewen Cheslack-Postava |
Geoff Anderson |
| KAFKA-824 |
java.lang.NullPointerException in commitOffsets |
Major |
consumer |
Yonghui Zhao |
Parth Brahmbhatt |
| KAFKA-2437 |
Controller does not handle zk node deletion correctly. |
Major |
. |
Jiangjie Qin |
Jiangjie Qin |
| KAFKA-2461 |
request logger no longer logs extra information in debug mode |
Blocker |
. |
Gwen Shapira |
Ashish K Singh |
| KAFKA-2519 |
NetworkClient.close should remove node from inFlightRequests |
Critical |
. |
Ismael Juma |
Ismael Juma |
| KAFKA-2489 |
System tests: update benchmark tests to run with new and old consumer |
Blocker |
. |
Geoff Anderson |
Geoff Anderson |
| KAFKA-1679 |
JmxTool outputs nothing if any mbean attributes can't be retrieved |
Minor |
tools |
Ryan Berdeen |
Jonathan Rafalski |
| KAFKA-2538 |
Compilation in trunk is failing due to https://github.com/apache/kafka/commit/845514d62329be8382e6d02b8041fc858718d534 |
Blocker |
. |
Parth Brahmbhatt |
Parth Brahmbhatt |
| KAFKA-2504 |
Stop logging WARN when client disconnects |
Major |
. |
Gwen Shapira |
Jeff Holoman |
| KAFKA-2300 |
Error in controller log when broker tries to rejoin cluster |
Major |
. |
Johnny Brown |
Flavio Junqueira |
| KAFKA-2533 |
Create a member Metadata.Listener inside KafkaConsumer |
Major |
. |
Ashish K Singh |
Ashish K Singh |
| KAFKA-2557 |
Separate RebalanceInProgress from IllegalGeneration Error Code |
Major |
clients, consumer |
Jiangjie Qin |
Onur Karaman |
| KAFKA-2576 |
ConsumerPerformance hangs when SSL enabled for Multi-Partition Topic |
Blocker |
. |
Ben Stopford |
Ismael Juma |
| KAFKA-1387 |
Kafka getting stuck creating ephemeral node it has already created when two zookeeper sessions are established in a very short period of time |
Critical |
. |
Fedor Korotkiy |
Flavio Junqueira |
| KAFKA-2548 |
kafka-merge-pr tool fails to update JIRA with fix version <IP_ADDRESS> |
Major |
. |
Gwen Shapira |
Ismael Juma |
| KAFKA-2554 |
change 0.8.3 to 0.9.0 in ApiVersion |
Blocker |
core |
Jun Rao |
Manikumar Reddy |
| KAFKA-2571 |
KafkaLog4jAppender dies while specifying "acks" config |
Major |
. |
Ashish K Singh |
Ashish K Singh |
| KAFKA-2555 |
Infinite recursive function call occurs when ConsumerRebalanceCallback.onPartitionRevoked() calls commitSync() |
Major |
. |
Jiangjie Qin |
Jiangjie Qin |
| KAFKA-2585 |
ConsoleConsumer should not hang infinitely upon exception |
Major |
. |
Dong Lin |
Dong Lin |
| KAFKA-2517 |
Performance Regression post SSL implementation |
Major |
. |
Ben Stopford |
Ismael Juma |
| KAFKA-2599 |
Metadata#getClusterForCurrentTopics can throw NPE even with null checking |
Minor |
clients |
Edward Ribeiro |
Edward Ribeiro |
| KAFKA-2573 |
Mirror maker system test hangs and eventually fails |
Major |
. |
Ashish K Singh |
Ashish K Singh |
| KAFKA-2534 |
SSLTransportLayer does not handle buffer overflow correctly |
Major |
network |
Rajini Sivaram |
Rajini Sivaram |
| KAFKA-2428 |
Add sanity test in kafkaConsumer for the timeouts. This is a followup ticket for Kafka-2120 |
Major |
. |
Mayuresh Gharat |
Mayuresh Gharat |
| KAFKA-2477 |
Replicas spuriously deleting all segments in partition |
Major |
. |
Håkon Hitland |
Jiangjie Qin |
| KAFKA-2621 |
nextOffsetMetadata should be changed after rolling a new log segment |
Major |
core |
Jun Rao |
Jiangjie Qin |
| KAFKA-2596 |
Coordinator should return illegal generation for commits from unknown groups with non-negative generation |
Major |
. |
Jason Gustafson |
Jason Gustafson |
| KAFKA-2614 |
No more clients can connect after TooManyConnectionsException threshold (max.connections.per.ip) is reached |
Critical |
core |
Stephen Chu |
Ismael Juma |
| KAFKA-2567 |
throttle-time shouldn't be NaN |
Minor |
. |
Jun Rao |
Aditya Auradkar |
| KAFKA-2203 |
Get gradle build to work with Java 8 |
Minor |
build |
Gaju Bhat |
Gwen Shapira |
| KAFKA-2633 |
Default logging from tools to Stderr |
Major |
. |
Grant Henke |
Grant Henke |
| KAFKA-1804 |
Kafka network thread lacks top exception handler |
Critical |
core |
Oleg Golovin |
|
| KAFKA-2650 |
Change ConfigCommand --deleted-config option to align with TopicCommand |
Major |
. |
Grant Henke |
Grant Henke |
| KAFKA-2536 |
topics tool should allow users to alter topic configuration |
Major |
tools |
Gwen Shapira |
Grant Henke |
| KAFKA-2295 |
Dynamically loaded classes (encoders, etc.) may not be found by Kafka Producer |
Blocker |
producer |
Tathagata Das |
Manikumar Reddy |
| KAFKA-1282 |
Disconnect idle socket connection in Selector |
Major |
producer |
Jun Rao |
nicu marasoiu |
| KAFKA-2412 |
Documentation bug: Add information for key.serializer and value.serializer to New Producer Config sections |
Blocker |
. |
Jeremy Fields |
Grayson Chao |
| KAFKA-2665 |
Docs: Images that are part of the documentation are not part of the code github |
Major |
. |
Gwen Shapira |
Gwen Shapira |
| KAFKA-2656 |
Default SSL keystore and truststore config are unusable |
Critical |
. |
Rajini Sivaram |
Rajini Sivaram |
| KAFKA-2669 |
Fix LogCleanerIntegrationTest |
Major |
. |
Dong Lin |
Dong Lin |
| KAFKA-2628 |
KafkaOffsetBackingStoreTest.testGetSet transient test failure |
Major |
KafkaConnect |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-2338 |
Warn users if they change max.message.bytes that they also need to update broker and consumer settings |
Critical |
core |
Ewen Cheslack-Postava |
Ben Stopford |
| KAFKA-2459 |
Connection backoff/blackout period should start when a connection is disconnected, not when the connection attempt was initiated |
Major |
clients, consumer, producer |
Ewen Cheslack-Postava |
Eno Thereska |
| KAFKA-2454 |
Dead lock between delete log segment and shutting down. |
Major |
. |
Jiangjie Qin |
Jiangjie Qin |
| KAFKA-2618 |
Disable SSL renegotiation for <IP_ADDRESS> |
Major |
security |
Ismael Juma |
Ismael Juma |
| KAFKA-2472 |
Fix kafka ssl configs to not throw warnings |
Major |
. |
Sriharsha Chintalapani |
Ismael Juma |
| KAFKA-2678 |
partition level lag metrics can be negative |
Major |
core |
Jun Rao |
Dong Lin |
| KAFKA-2686 |
unsubscribe() call leaves KafkaConsumer in invalid state for manual topic-partition assignment |
Major |
consumer |
Andy Coates |
Guozhang Wang |
| KAFKA-2449 |
Update mirror maker (MirrorMaker) docs |
Blocker |
. |
Geoff Anderson |
Gwen Shapira |
| KAFKA-2516 |
Rename o.a.k.client.tools to o.a.k.tools |
Blocker |
. |
Gwen Shapira |
Grant Henke |
| KAFKA-2677 |
Coordinator disconnects not propagated to new consumer |
Major |
. |
Jason Gustafson |
Jason Gustafson |
| KAFKA-2683 |
Ensure wakeup exceptions are propagated to user in new consumer |
Major |
. |
Jason Gustafson |
Jason Gustafson |
| KAFKA-2648 |
Coordinator should not allow empty groupIds |
Major |
. |
Jason Gustafson |
Jason Gustafson |
| KAFKA-2663 |
Add quota-delay time to request processing time break-up |
Major |
. |
Joel Koshy |
Aditya Auradkar |
| KAFKA-2664 |
Adding a new metric with several pre-existing metrics is very expensive |
Major |
. |
Joel Koshy |
Aditya Auradkar |
| KAFKA-2660 |
Correct cleanableRatio calculation |
Major |
. |
Dong Lin |
Dong Lin |
| KAFKA-2680 |
Zookeeper SASL check prevents any SASL code being run with IBM JDK |
Blocker |
. |
Rajini Sivaram |
Rajini Sivaram |
| KAFKA-2255 |
Missing documentation for max.in.flight.requests.per.connection |
Major |
. |
Navina Ramesh |
Aditya Auradkar |
| KAFKA-2518 |
Update NOTICE file |
Blocker |
packaging |
Flavio Junqueira |
Gwen Shapira |
| KAFKA-2726 |
ntpdate causes vagrant provision to fail if ntp running |
Major |
. |
Geoff Anderson |
Geoff Anderson |
| KAFKA-2719 |
Kafka classpath has grown too large and breaks some system tests |
Major |
. |
Rajini Sivaram |
Rajini Sivaram |
| KAFKA-2716 |
Make Kafka core not depend on log4j-appender |
Major |
. |
Ashish K Singh |
Ashish K Singh |
| KAFKA-2470 |
kafka-producer-perf-test.sh can't configure all to request-num-acks |
Major |
clients, tools |
Bo Wang |
|
| KAFKA-2722 |
Improve ISR change propagation |
Blocker |
. |
Jiangjie Qin |
Jiangjie Qin |
| KAFKA-2730 |
partition-reassignment tool stops working due to error in registerMetric |
Blocker |
core |
Jun Rao |
Guozhang Wang |
| KAFKA-2744 |
WorkerSourceTask commits offsets too early when stopping |
Major |
KafkaConnect |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-2742 |
SourceTaskOffsetCommitter does not properly remove commit tasks when they are already in progress |
Major |
KafkaConnect |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-2741 |
Source/SinkTaskContext should be interfaces and implementations kept in runtime jar |
Major |
KafkaConnect |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-2743 |
Forwarding task reconfigurations in Copycat can deadlock with rebalances and has no backoff |
Major |
KafkaConnect |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-2738 |
Can't set SSL as inter-broker-protocol by rolling restart of brokers |
Blocker |
. |
Gwen Shapira |
Ben Stopford |
| KAFKA-2748 |
SinkTasks do not handle rebalances and offset commit properly |
Major |
KafkaConnect |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-2755 |
NPE thrown while handling DescribeGroup request for non-existent consumer group |
Major |
. |
Ashish K Singh |
Ashish K Singh |
| KAFKA-2735 |
BrokerEndPoint should support uppercase hostnames |
Major |
. |
Jeff Holoman |
Jeff Holoman |
| KAFKA-2756 |
Replication Broken between Kafka <IP_ADDRESS> and 0.9 - NetworkClient.java uses wrong protocol version |
Blocker |
. |
Matthew Bruce |
Matthew Bruce |
| KAFKA-2702 |
ConfigDef toHtmlTable() sorts in a way that is a bit confusing |
Major |
. |
Gwen Shapira |
Grant Henke |
| KAFKA-2764 |
Copycat APIs should use Map<String, String> instead of Properties |
Major |
KafkaConnect |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-2760 |
Clean up interface of AdminClient.describeConsumerGroup(groupId |
Major |
. |
Ashish K Singh |
Ashish K Singh |
| KAFKA-2734 |
kafka-console-consumer throws NoSuchElementException on not specifying topic |
Major |
tools |
Ashish K Singh |
Ashish K Singh |
| KAFKA-2736 |
ZkClient doesn't handle SaslAuthenticated |
Blocker |
zkclient |
Flavio Junqueira |
Flavio Junqueira |
| KAFKA-2766 |
Make the Java Producer as the default producer in tooling. |
Blocker |
. |
Guozhang Wang |
Guozhang Wang |
| KAFKA-2666 |
Docs: Automatically generate documentation from config classes |
Blocker |
. |
Gwen Shapira |
Gwen Shapira |
| KAFKA-2779 |
Kafka SSL transport layer leaks file descriptors |
Critical |
network |
Rajini Sivaram |
Rajini Sivaram |
| KAFKA-2781 |
Signing jars shouldn't be required for install task |
Major |
. |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-2776 |
JsonConverter uses wrong key to look up schema conversion cache size configuration |
Major |
KafkaConnect |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-2775 |
Copycat exceptions should be in api package so they can be caught by user code without any dependencies other than api |
Major |
KafkaConnect |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-2778 |
Use zero loss settings for producer in Kafka Connect |
Major |
KafkaConnect |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-2782 |
Incorrect assertion in KafkaBasedLogTest.testSendAndReadToEnd |
Major |
KafkaConnect |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-2674 |
ConsumerRebalanceListener.onPartitionsRevoked() is not called on consumer close |
Major |
consumer |
Michal Turek |
Jason Gustafson |
| KAFKA-2785 |
Copycat jars not included in release tar gz |
Major |
KafkaConnect |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-2773 |
Vagrant provision fails if num_brokers or num_zookeepers is nonzero |
Trivial |
. |
Geoff Anderson |
Geoff Anderson |
| KAFKA-2786 |
Only invoke SinkTask onPartitionsRevoked and commitOffsets after task has fully started |
Minor |
KafkaConnect |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-2797 |
Release artifact expects a git repository for the release audit tool (RAT) |
Blocker |
build |
Flavio Junqueira |
Ewen Cheslack-Postava |
| KAFKA-2792 |
KafkaConsumer.close() can block unnecessarily due to leave group waiting for a reply |
Blocker |
consumer |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-2798 |
Kafka Connect distributed configs can conflict with producer/consumer configs, making it impossible to control them independently |
Major |
KafkaConnect |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-2795 |
potential NPE in GroupMetadataManager |
Major |
. |
Onur Karaman |
Jason Gustafson |
| KAFKA-2788 |
allow comma when specifying principals in AclCommand |
Blocker |
core |
Jun Rao |
Parth Brahmbhatt |
| KAFKA-2793 |
ConsoleConsumer crashes with new consumer when using keys because of incorrect deserializer |
Major |
tools |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-2801 |
Data read from network not processed by SSL transport layer |
Blocker |
network |
Rajini Sivaram |
Rajini Sivaram |
| KAFKA-2770 |
Race condition causes Mirror Maker to hang during shutdown (new consumer) |
Blocker |
. |
Geoff Anderson |
Guozhang Wang |
| KAFKA-2805 |
RecordAccumulator request timeout not enforced when all brokers are gone |
Blocker |
. |
Jason Gustafson |
Mayuresh Gharat |
| KAFKA-2813 |
selector doesn't close socket connection on non-IOExceptions |
Blocker |
core |
Jun Rao |
Jun Rao |
| KAFKA-2807 |
Movement of throughput throttler to common broke upgrade tests |
Blocker |
. |
Geoff Anderson |
Ewen Cheslack-Postava |
| KAFKA-2822 |
DescribeConsumerGroup now returns empty list for non-existent group, it used to throw IllegalArgumentException |
Major |
. |
Ashish K Singh |
Ashish K Singh |
| KAFKA-2814 |
Kafka Connect system tests using REST interface fail on AWS |
Major |
KafkaConnect, system tests |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-2747 |
Message loss if mirror maker is killed with hard kill and then restarted |
Major |
. |
Geoff Anderson |
|
| KAFKA-2819 |
ConsumerConsume throw unexpected exception during clean shutdown |
Major |
. |
Jun Rao |
Guozhang Wang |
| KAFKA-2817 |
Closing an unconnected SslTransport get an invalid close state exception |
Major |
core |
Jun Rao |
Ismael Juma |
| KAFKA-2821 |
Deadlock in group metadata persistence callback |
Blocker |
. |
Jason Gustafson |
Jason Gustafson |
| KAFKA-2768 |
New-consumer sends invalid describeGroupResponse while restabilizing |
Major |
consumer |
Ashish K Singh |
Ashish K Singh |
| KAFKA-2833 |
OffsetsMessageFormatter hits unexpected exception |
Major |
. |
Jun Rao |
Guozhang Wang |
| KAFKA-2838 |
allow comma when specifying superusers |
Major |
. |
Jun Rao |
|
| KAFKA-2624 |
Truncate warn message logged after truncating partitions |
Trivial |
replication |
Francois Visconte |
Francois Visconte |
| KAFKA-2688 |
Avoid forcing reload of Configuration |
Critical |
security |
Ismael Juma |
Ismael Juma |
| KAFKA-2721 |
Avoid handling duplicate LeaderAndISR requests |
Major |
. |
Guozhang Wang |
Dong Lin |
| KAFKA-2848 |
Use withClientSslSupport/withClientSaslSupport in Kafka Connect |
Major |
KafkaConnect |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-2847 |
remove principal.builder.class from client configs |
Major |
clients |
Jun Rao |
Ismael Juma |
| KAFKA-2852 |
Kafka Authroizer CLI should use consistent way to specify multiple values for all config options. |
Major |
. |
Parth Brahmbhatt |
|
| KAFKA-2841 |
Group metadata cache loading is not safe when reloading a partition |
Blocker |
. |
Jason Gustafson |
Jason Gustafson |
| KAFKA-2859 |
Deadlock in WorkerSourceTask |
Blocker |
KafkaConnect |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-2869 |
host used by Authorizer should be IP address not hostname/IP |
Critical |
security |
Ismael Juma |
Ismael Juma |
| KAFKA-2867 |
Missing synchronization and improperly handled InterruptException in WorkerSourceTask |
Blocker |
KafkaConnect |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-2892 |
Consumer Docs Use Wrong Method |
Major |
clients |
Jesse Anderson |
|
| KAFKA-2906 |
Kafka Connect javadocs not built properly |
Major |
KafkaConnect |
Ewen Cheslack-Postava |
Ewen Cheslack-Postava |
| KAFKA-1755 |
Improve error handling in log cleaner |
Major |
. |
Joel Koshy |
Joel Koshy |
| KAFKA-3215 |
controller may not be started when there are multiple ZK session expirations |
Major |
core |
Jun Rao |
Flavio Junqueira |
| KAFKA-3050 |
Space in the value for "host.name" causes "Unresolved address" |
Major |
. |
Navin Markandeya |
|
| KAFKA-570 |
Kafka should not need snappy jar at runtime |
Major |
. |
Swapnil Ghike |
|


How We Built It
Methods Used
First, we created specialized Google Sheets and Excel workbooks to enable volunteers to collect data for a single given county. Some states aggregated their data across counties, making our job easier. Each of these Google Sheets/Excel spreadsheets was set up in a way to be structurally similar to our database, making input from the spreadsheets to the database easier. At a minimum, volunteers were responsible for collecting information on the type of safe voting location (e.g. ballot drop box versus early voting), the location's physical address, and the URL of the authoritative city/county/state source of the information. Additional elements, such as dates/times of availability, location notes, etc. were also captured, where available.
Once each spreadsheet had the basic information, we ran the physical addresses through a geocoding process from a major technology company to turn physical addresses into latitude. Geocoding is an amazing, yet imperfect technology. Not only are typos possible (e.g. 123 Main Streeet), but some addresses that are customarily written in words (e.g. One Courthouse Square) are much more easily geocoded when re-written as 1 Courthouse Square. Latitude and longitude are necessary for providing to you your nearest locations, but how could we know if the thousands of pieces of lat/long data that came back from the geocoding processes were correct?
Luckily, the geocoding process also returns the city, county, and state of the geocoded address. Since we knew which county and state we were collecting for, anything that did not match was reviewed and corrected, often by hand. Next, we checked to make sure that the city matched. This was a little more difficult as LaGrange, IL and La Grange, IL needed to be reviewed (and sometimes corrected) manually as well.
Once we were confident that we had a clean dataset for a given city, county, or state, we imported it into our database so it could be served up to users as the output of their proximity searches.
Data Sources Used
Full details on which city/county/state data sources we used for each county are here


First Steps with PyGreSQL¶
In this small tutorial we show you the basic operations you can perform with both flavors of the PyGreSQL interface. Please choose your flavor:
First Steps with the classic PyGreSQL Interface¶
The first thing you need to do anything with your PostgreSQL database is to create a database connection.
To do this, simply import the DB
wrapper class and create an
instance of it, passing the necessary connection parameters, like this:
>>> from pg import DB
>>> db = DB(dbname='testdb', host='pgserver', port=5432,
... user='scott', passwd='tiger')
You can omit one or even all parameters if you want to use their default values. PostgreSQL will use the name of the current operating system user as the login and the database name, and will try to connect to the local host on port 5432 if nothing else is specified.
The db object has all methods of the lower-level Connection
class
plus some more convenience methods provided by the DB
wrapper.
You can now execute database queries using the DB.query()
method:
>>> db.query("create table fruits(id serial primary key, name varchar)")
You can list all database tables with the DB.get_tables()
method:
>>> db.get_tables()
['public.fruits']
To get the attributes of the fruits table, use DB.get_attnames()
:
>>> db.get_attnames('fruits')
{'id': 'int', 'name': 'text'}
Verify that you can insert into the newly created fruits table:
>>> db.has_table_privilege('fruits', 'insert')
True
You can insert a new row into the table using the DB.insert()
method,
for example:
>>> db.insert('fruits', name='apple')
{'name': 'apple', 'id': 1}
Note how this method returns the full row as a dictionary including its id
column that has been generated automatically by a database sequence. You can
also pass a dictionary to the DB.insert()
method instead of or in
addition to using keyword arguments.
Let’s add another row to the table:
>>> banana = db.insert('fruits', name='banana')
Or, you can add a whole bunch of fruits at the same time using the
Connection.inserttable()
method. Note that this method uses the COPY
command of PostgreSQL to insert all data in one batch operation, which is much
faster than sending many individual INSERT commands:
>>> more_fruits = 'cherimaya durian eggfruit fig grapefruit'.split()
>>> data = list(enumerate(more_fruits, start=3))
>>> db.inserttable('fruits', data)
We can now query the database for all rows that have been inserted into the fruits table:
>>> print(db.query('select * from fruits'))
id| name
--+----------
1|apple
2|banana
3|cherimaya
4|durian
5|eggfruit
6|fig
7|grapefruit
(7 rows)
Instead of simply printing the Query
instance that has been returned
by this query, we can also request the data as list of tuples:
>>> q = db.query('select * from fruits')
>>> q.getresult()
... [(1, 'apple'), ..., (7, 'grapefruit')]
Instead of a list of tuples, we can also request a list of dicts:
>>> q.dictresult()
[{'id': 1, 'name': 'apple'}, ..., {'id': 7, 'name': 'grapefruit'}]
You can also return the rows as named tuples:
>>> rows = q.namedresult()
>>> rows[3].name
'durian'
Using the method DB.get_as_dict()
, you can easily import the whole table
into a Python dictionary mapping the primary key id to the name:
>>> db.get_as_dict('fruits', scalar=True)
OrderedDict([(1, 'apple'),
(2, 'banana'),
(3, 'cherimaya'),
(4, 'durian'),
(5, 'eggfruit'),
(6, 'fig'),
(7, 'grapefruit')])
To change a single row in the database, you can use the DB.update()
method. For instance, if you want to capitalize the name ‘banana’:
>>> db.update('fruits', banana, name=banana['name'].capitalize())
{'id': 2, 'name': 'Banana'}
>>> print(db.query('select * from fruits where id between 1 and 3'))
id| name
--+---------
1|apple
2|Banana
3|cherimaya
(3 rows)
Let’s also capitalize the other names in the database:
>>> db.query('update fruits set name=initcap(name)')
'7'
The returned string ‘7’ tells us the number of updated rows. It is returned as a string to discern it from an OID which will be returned as an integer, if a new row has been inserted into a table with an OID column.
To delete a single row from the database, use the DB.delete()
method:
>>> db.delete('fruits', banana)
1
The returned integer value 1 tells us that one row has been deleted. If we try it again, the method returns the integer value 0. Naturally, this method can only return 0 or 1:
>>> db.delete('fruits', banana)
0
Of course, we can insert the row back again:
>>> db.insert('fruits', banana)
{'id': 2, 'name': 'Banana'}
If we want to change a different row, we can get its current state with:
>>> apple = db.get('fruits', 1)
>>> apple
{'name': 'Apple', 'id': 1}
We can duplicate the row like this:
>>> db.insert('fruits', apple, id=8)
{'id': 8, 'name': 'Apple'}
To remove the duplicated row, we can do::
>>> db.delete('fruits', id=8)
1
Finally, to remove the table from the database and close the connection:
>>> db.query("drop table fruits")
>>> db.close()
For more advanced features and details, see the reference: pg — The Classic PyGreSQL Interface
First Steps with the DB-API 2.0 Interface¶
As with the classic interface, the first thing you need to do is to create
a database connection. To do this, use the function pgdb.connect()
in the pgdb
module, passing the connection parameters:
>>> from pgdb import connect
>>> con = connect(database='testdb', host='pgserver:5432',
... user='scott', password='tiger')
Note that like in the classic interface, you can omit parameters if they are the default values used by PostgreSQL.
To do anything with the connection, you need to request a cursor object from it, which is thought of as the Python representation of a database cursor. The connection has a method that lets you get a cursor:
>>> cursor = con.cursor()
The cursor now has a method that lets you execute database queries:
>>> cursor.execute("create table fruits("
... "id serial primary key, name varchar)")
To insert data into the table, also can also use this method:
>>> cursor.execute("insert into fruits (name) values ('apple')")
You can pass parameters in a safe way:
>>> cursor.execute("insert into fruits (name) values (%s)", ('banana',))
For inserting multiple rows at once, you can use the following method:
>>> more_fruits = 'cherimaya durian eggfruit fig grapefruit'.split()
>>> parameters = [(name,) for name in more_fruits]
>>> cursor.executemany("insert into fruits (name) values (%s)", parameters)
The cursor also has a Cursor.copy_from()
method to quickly insert
large amounts of data into the database, and a Cursor.copy_to()
method to quickly dump large amounts of data from the database, using the
PostgreSQL COPY command. Note however, that these methods are an extension
provided by PyGreSQL, they are not part of the DB-API 2 standard.
Also note that the DB API 2.0 interface does not have an autocommit as you may be used from PostgreSQL. So in order to make these inserts permanent, you need to commit them to the database first:
>>> con.commit()
If you end the program without calling the commit method of the connection, or if you call the rollback method of the connection, then all the changes will be discarded.
In a similar way, you can also update or delete rows in the database, executing UPDATE or DELETE statements instead of INSERT statements.
To fetch rows from the database, execute a SELECT statement first. Then you can use one of several fetch methods to retrieve the results. For instance, to request a single row:
>>> cursor.execute('select * from fruits where id=1')
>>> cursor.fetchone()
Row(id=1, name='apple')
The result is a named tuple. This means you can access its elements either using an index number like in an ordinary tuple, or using the column name like you access object attributes.
To fetch all rows of the query, use this method instead:
>>> cursor.execute('select * from fruits')
>>> cursor.fetchall()
[Row(id=1, name='apple'), ..., Row(id=7, name='grapefruit')]
The output is a list of named tuples.
If you want to fetch only a limited number of rows from the query:
>>> cursor.execute('select * from fruits')
>>> cursor.fetchmany(2)
[Row(id=1, name='apple'), Row(id=2, name='banana')]
Finally, to remove the table from the database and close the connection:
>>> db.execute("drop table fruits")
>>> cur.close()
>>> db.close()
For more advanced features and details, see the reference: pgdb — The DB-API Compliant Interface


Simple state that allows for generic transition rules.
This tries each transition in order, and takes the first one that
evaluates to true and that succesfully changes state.
More complex state behavior can probably be derived from this class.
public var enterEvent:String = "null"
If we want an event to be fired on the container when this state is
entered, it is specified here.
public var transitions:OrderedArray
List of subclasses of ITransition that are evaluated to transition to
new states.
public function addTransition(t:ITransition):void
Parameters
public function enter(fsm:IMachine):void
Parameters
public function exit(fsm:IMachine):void
Parameters
public function tick(fsm:IMachine):void
Parameters
http://pushbuttonengine.com/


Duration
10 minutes
Lab Goals
In this exercise, we will be adding the business logic to our Tip Calculator by handling the tap event on the button and calculating the tip amount. This logic is the Model for our application (we created the View in the prior exercise). We could locate this logic in a physically separate class, but given the simplicity, it makes more sense to just place it right in the View Controller source file.
Required assets
The provided Part 04 Resources folder contains a subfolder named Completed with a solution you can use to check your work.
High-level steps
Use the following high-level steps to complete the exercise, step-by-step instructions are provided below that if you need any guidance.
- Add a TipCalculator class with a static method that accepts the bill amount and tip percentage and returns the tip amount.
-
Handle the
TouchUpInside
event on the calcButton. -
In the event handler, get the entered amount from the totalAmount
UITextField
and use the TipCalculator class to calculate a 20% tip. - Display the resulting value as a currency amount in the resultLabel.
Steps
Implement the Tip Calculator
In this section, we will add the logic for the Tip Calculator. You can use either Visual Studio - the instructions are identical for both operating systems.
- Create and open a new class named TipCalculator.
-
Ensure the TipCalculator class is
public
and make the classstatic
. -
Add a
public
static
method named GetTip that accepts the bill amount and tip percentage asdouble
s and returns the tip amount.
Handle the TouchUpInside
event
- Open MyViewController.cs.
-
At the bottom of your
ViewDidLoad
method, add an event handler for theTouchUpInside
method on your calcButton field. -
In your method handler, retrieve the current value of the totalAmount field using the
Text
property. -
Convert the
string
value (it's text) into adouble
usingDouble.TryParse
which is a standard .NET Framework feature. '
- Use the static
GetTip
method on theTipCalculator
class to calculate a tip of 20%. -
Finally, display the resulting tip value into resultLabel by setting its
Text
property. Go ahead and format it usingstring.Format
so it matches the default text we set earlier. - Build and run the application - try entering a total amount and tapping the "Calculate" button. It should display a 20% tip amount:
- Notice that the on-screen keyboard is always present (as before). See if you can add a line of code to dismiss the keyboard when the "Calculate" button is tapped.
ViewDidLoad
, you will need to add an inline delegate handler using either an anoymous delegate, or a lambda expression. If you would prefer to use a traditional delegate method handler, move the field definitions for your three controls to the class so you can access them from the separate method. The lab solution shown below will use a lambda.
Summary
In this exercise, you have added behavior into the Tip Calculator and built a working iOS application from scratch. You are now officially an iOS developer - congratulations!


I am a front end web developer. I am passionate about all design related subjects and programming! I love the challenges that come with this industry and am looking to further develop my skills!
My skills include the following:
Got a great idea for your next website? Drop me a line on myLinkedin Profile
Linkedin Profile


The CFO’s Reading List: November 16, 2019
Missed all the important financial news this week because you were jet-setting? It’s been a busy week. Here’s a curated reading list of the Hindu BusinessLine’s top stories on the economy over the week.
Salary’s safe
The CBIC has thankfully scotched reports that it plans to slap GST on CXO pay
Also read: No GST on salary, says CBIC
AGR pain
Even as the telecom majors pleaded for relief from the massive AGR levy brought on by the Supreme Court ruling last week, the Department of Telecom has asked them to pay up their dues after self-assessment.
Read more: No relief on AGR, Airtel, Vodafone Idea asked to pay dues after self-assessment
RIL argument
In its appeal against SEBI’s disgorgement order against it for unfair trading in RPL shares, Reliance Industries has argued that there’s nothing wrong in a company pocketing gains by shorting a stock on F&O.
Also read: Business decision to sell Reliance Petroleum shares, RIL tells Securities and Appellate Tribunal
Clearing the air
A Supreme Court ruling striking out earlier NCLAT interventions in the Essar Steel case, has upheld the superior rights of financial creditors, and paved the way for ArcelorMittal to take over the distressed steel maker.
Read more: Why the Supreme Court ruling in the Essar Steel case is important
Don’t change it
MSMEs have opposed the Centre’s move to re-define small enterprises on the basis of turnover criteria, rather than the conventional criteria of investment in plant and machinery.
Also read: MSMEs oppose government move to redefine classification based on turnover
More cover
After much lobbying, the insurance cover on bank deposits may be finally set to go up from the current Rs 1 lakh, set in 1993.
Also read: Government mulls over raising insurance cover on bank deposits to above Rs 1 lakh: Finance Minister
Picking up
Steel prices are edging up as inventories began to moderate from November
Also read: Steel companies hike prices by Rs 500-750 a tonne for the first time this fiscal


Software Engineer
What's he workin' on?Ensures the reliability of +10 applications and systems across the Global Merchant and Network Services Portfolio by leveraging ITIL-4 practices to continually improve products. Automates time-consuming processes through Python, Bash, and Excel scripts and CRON scheduling.
Designs and improves a proprietary internal website that leverages custom algorithms devised by the team in order to serve as a sort of internal LinkedIn. Technologies include NodeJS, Express, PostgreSQL, JS/HTML/CSS. 2 week sprints adhere to the Agile framework through Rally and Bitbucket.
SME for a real-time merchant payment processing application. Tools used include Linux/Unix, Citrix, TIMS, ServiceNow, GridGain, Dynatrace, Spark, Moogsoft, Sahara, Apache, Informatica, Control-M, Kafka, ElasticSearch, LogStash, Kibana, Splunk, Microsoft Office Suite, IBM zOS Mainframe, Axiom.
Guides a diverse, global team in application support, development, and automation initiatives via consistent trainings around Incident, Problem, and Change Management activities; outages; bridges; circumvention; disaster recovery scenarios; design exercises; code walkthroughs.
John S. Abrams © 2019. All rights reserved. Powered by Bootstrap.
Source on GitHub. Theme based on the Creative Bootstrap Theme by Start Bootstrap


It looks like you have tried to access a page without authorization, and you have been redirected here.
If you think this happened by mistake, please try to visit again the requirements page following the link provided to you in description of the task on the Amazon Mechanical Turk web site.
If the problem persists please contact an administrator.


An item in Futility Closet yesterday includes some amusing tombstone inscriptions. One in particular filled me with glee, and I hereby declare that the words in bold type must appear on my own grave, when the time comes …
Sacred to the memory of inestimable worth of unrivalled excellence and virtue, N.R., whose ethereal parts became seraphic, May 25th, 1767.


Book Idea: Python Optimization
Every so often it seems like some Python figure thinks about writing
a book, but they aren't sure what to write about. So, for anyone
like that, here's an idea for the taking: Python optimization. It
seems like it has a fairly narrow scope, but I think there's
actually a lot of material there. Here's some things I can think of:
- Profiling, where all optimization should start.
-
In-python optimizations:
-
Caching (this is where I always start). Also pooling.
-
Factoring applications into long-running processes, when
startup times are a problem. Also tips like lazy loading
of code.
-
Other tricks to speed startup time. I understand things
like the search path can significantly effect some of
this.
-
Streaming... I feel like there's a term I am missing
here. Like the difference between SAX XML parsing and
DOM, where SAX encourages the programmer to do all the
work possible as the document is being parsed, while DOM
typically does all the parsing up front. That's one
example of a larger concept, and one that dramatically
effects performance.
-
Note important modules that may be forgotten. E.g.,
StringIO
-
Lots of little tips, e.g.,
lst.sort(); lst.reverse() instead of
lst.sort(lambda a, b: cmp(b, a)).
-
Numeric and related modules. There's a lot of novel ways of
using these tools outside of their core domain.
- Pyrex.
-
Extensions in C, thinking particularly about those inner loops.
I think this subject could remain fairly tight as long as you
are focused on optimization, rather than the entire subject of
programming C Python extensions.
-
Psyco. It's kind of magic, so it might be hard to talk about,
but there is some important information about how it works.
-
Microthreads. There's a lot of flavors and ideas out there, some
built on generators, some not. Perhaps some talk of Stackless,
or Greenlets (the mysterious new kid on the block).
-
Asynchronous programming. This is a big topic, but at least
there should be a discussion of the performance characteristics,
and enough information to get a feel.
-
XML parsing. It seems very specific, but there's a bunch of
alternatives, and performance can be a significant issue.
-
GUI programming, particularly techniques to make a GUI
responsive. This might be difficult to address without covering
GUI programming as a whole, so maybe this wouldn't work.
I'm sure there's things I'm not thinking of, and there's a lot of
research that would go into it. I think the result could be a really
good book, though, with something for every level. Like a Python
Cookbook, only more specific. There's a fair amount of competition among
generic Python books, so specific topics seem to have more potential. It
could also be quite popular; it's something that would catch the eye of
even non-Python programmers, as there's many people who want to use
Python, but are concerned about the performance. I think that concern is
often misplaced, but it's there nonetheless. Performance is also
exciting to people, in the way that gets people to buy books.
Anyway, there's my idea, maybe it'll be helpful to someone.
Created 17 Sep '04
Modified 14 Dec '04
Here's another idea: "Design and Interpretation of Runtime Systems".
Every computer science department on the planet offers a course on
compilers, but how many offer a course on the theory and practice of
what you have to do at runtime? Linking and loading, byte-code
interpreters, just-in-time compilation---there's a lot there, but
no-one has ever written it all down in one place.
I think Python would be an running example for such a book, if one
included Psyco, IronPython, etc.
An optimization book would be great. Many people who use Python have
rich programming backgrounds and can transfer universal optimization
concepts like caching and pooling to Python. However I believe for a
significant number of Python users that Python is a first or at most
second language. This group doesn't have the benefit of lessons
learned after years of programming in C, Java, or Perl to apply to
optimizing Python programs.
Rather than a dead trees book, how about a wikipedia-like public
repository, with many contributors?


Run the program and see!
Writing a recursive Java program can be viewed as translating a math-like definition into Java code. The symbols of the definition are rearranged and some extra syntax is added to create Java code.
| Definition | Translation into Java |
|---|---|
Triangle( 1 ) = 1 Triangle( N ) = N + Triangle( N-1 ) |
int Triangle( int N ) { if ( N == 1 ) return 1; else return N + Triangle( N-1 ); } |
In this static view, if the math-like definition is correct, and you correctly translate it into Java, then the program is correct. You don't have to think about how Java does the calculation. Just check that you have correctly translated the definition.


---
layout: post
title: Congrats to Ryan Bingham
---
Tonight was the 82nd Oscars. I've never really paid much attention to events like this before but tonight I was glued to the TV watching to see who would win. One of my clients, Ryan Bingham, was nominated for Best Original Song for “The Weary Kind”, the theme from the film “Crazy Heart”.
If you also watched tonight you will already know that Ryan won! I would like to congratulate Ryan Bingham for his excellent work over the past year and and congrats also to his crew and team that helped make this possible.
Visit Ryan Bingham's website at www.binghammusic.com.
If you didn't catch the awards ceremony, you can watch Ryan's acceptance speech.


| Function name | Function info |
|---|---|
exp(1) : exp(x), where x is a real or complex number, returns x powers of e. |
|
lg(1) : Function lg(x) returns e based log value of x. |
|
ln(1) : Function ln(x) returns e based log value of x. |
|
log(1) : log(x), where x can be a complex number, returns e based logarithm value of x. |
|
log10(1) : Function log10(x) returns 10 based log value of x. |
|
log2(1) : Function log2(x) returns 2 based log value of x. |
|
loge(1) : Function loge(x) returns e based log value of x. |
|
pow(2) : pow(x,y) returns y powers of x. Note that both x and y can be either a real or a complex number. If there are more than one results of pow(x,y), return the first result. pow(3) : pow(x,y,z) returns a list including first z values of y powers of x. If y powers of x has less than z values, returns all the values. Note that y must be a real number while x can be either a real or a complex number. Z must be a positive integer. |
|
sqrt(1) : Function sqrt(x) returns square root of real number x. |