Apache Flink 1.13.0 Release Announcement
May 3, 2021 - Stephan Ewen (@StephanEwen) Dawid Wysakowicz (@dwysakowicz)The Apache Flink community is excited to announce the release of Flink 1.13.0! More than 200 contributors worked on over 1,000 issues for this new version.
The release brings us a big step forward in one of our major efforts: Making Stream Processing Applications as natural and as simple to manage as any other application. The new reactive scaling mode means that scaling streaming applications in and out now works like in any other application by just changing the number of parallel processes.
The release also prominently features a series of improvements that help users better understand the performance of applications. When the streams don’t flow as fast as you’d hope, these can help you to understand why: Load and backpressure visualization to identify bottlenecks, CPU flame graphs to identify hot code paths in your application, and State Access Latencies to see how the State Backends are keeping up.
Beyond those features, the Flink community has added a ton of improvements all over the system, some of which we discuss in this article. We hope you enjoy the new release and features. Towards the end of the article, we describe changes to be aware of when upgrading from earlier versions of Apache Flink.
We encourage you to download the release and share your feedback with the community through the Flink mailing lists or JIRA.
Notable features #
Reactive scaling #
Reactive scaling is the latest piece in Flink’s initiative to make Stream Processing Applications as natural and as simple to manage as any other application.
Flink has a dual nature when it comes to resource management and deployments: You can deploy Flink applications onto resource orchestrators like Kubernetes or Yarn in such a way that Flink actively manages the resources and allocates and releases workers as needed. That is especially useful for jobs and applications that rapidly change their required resources, like batch applications and ad-hoc SQL queries. The application parallelism rules, the number of workers follows. In the context of Flink applications, we call this active scaling.
For long-running streaming applications, it is often a nicer model to just deploy them like any other long-running application: The application doesn’t really need to know that it runs on K8s, EKS, Yarn, etc. and doesn’t try to acquire a specific amount of workers; instead, it just uses the number of workers that are given to it. The number of workers rules, the application parallelism adjusts to that. In the context of Flink, we call that reactive scaling.
The Application Deployment Mode started this effort, making deployments more application-like (by avoiding two separate deployment steps to (1) start a cluster and (2) submit an application). The reactive scaling mode completes this, and you now don’t have to use extra tools (scripts, or a K8s operator) anymore to keep the number of workers, and the application parallelism settings in sync.
You can now put an auto-scaler around Flink applications like around other typical applications — as long as you are mindful about the cost of rescaling when configuring the autoscaler: Stateful streaming applications must move state around when scaling.
To try the reactive-scaling mode, add the scheduler-mode: reactive
config entry and deploy
an application cluster (standalone or Kubernetes). Check out the reactive scaling docs for more details.
Analyzing application performance #
Like for any application, analyzing and understanding the performance of a Flink application is critical. Often even more critical, because Flink applications are typically data-intensive (processing high volumes of data) and are at the same time expected to provide results within (near-) real-time latencies.
When an application doesn’t keep up with the data rate anymore, or an application takes more resources than you’d expect it would, these new tools can help you track down the causes:
Bottleneck detection, Back Pressure monitoring
The first question during performance analysis is often: Which operation is the bottleneck?
To help answer that, Flink exposes metrics about the degree to which tasks are busy (doing work) and back-pressured (have the capacity to do work but cannot because their successor operators cannot accept more results). Candidates for bottlenecks are the busy operators whose predecessors are back-pressured.
Flink 1.13 brings an improved back pressure metric system (using task mailbox timings rather than thread stack sampling), and a reworked graphical representation of the job’s dataflow with color-coding and ratios for busyness and backpressure.
CPU flame graphs in Web UI
The next question during performance analysis is typically: What part of work in the bottlenecked operator is expensive?
One visually effective means to investigate that is Flame Graphs. They help answer question like:
-
Which methods are currently consuming CPU resources?
-
How does one method’s CPU consumption compare to other methods?
-
Which series of calls on the stack led to executing a particular method?
Flame Graphs are constructed by repeatedly sampling the thread stack traces. Every method call is represented by a bar, where the length of the bar is proportional to the number of times it is present in the samples. When enabled, the graphs are shown in a new UI component for the selected operator.
The Flame Graphs documentation contains more details and instructions for enabling this feature.
Access Latency Metrics for State
Another possible performance bottleneck can be the state backend, especially when your state is larger than the main memory available to Flink and you are using the RocksDB state backend.
That’s not saying RocksDB is slow (we love RocksDB!), but it has some requirements to achieve good performance. For example, it is easy to accidentally starve RocksDB’s demand for IOPs on cloud setups with the wrong type of disk resources.
On top of the CPU flame graphs, the new state backend latency metrics can help you understand whether
your state backend is responsive. For example, if you see that RocksDB state accesses start to take
milliseconds, you probably need to look into your memory and I/O configuration.
These metrics can be activated by setting the state.backend.rocksdb.latency-track-enabled
option.
The metrics are sampled, and their collection should have a marginal impact on the RocksDB state
backend performance.
Switching State Backend with savepoints #
You can now change the state backend of a Flink application when resuming from a savepoint. That means the application’s state is no longer locked into the state backend that was used when the application was initially started.
This makes it possible, for example, to initially start with the HashMap State Backend (pure in-memory in JVM Heap) and later switch to the RocksDB State Backend, once the state grows too large.
Under the hood, Flink now has a canonical savepoint format, which all state backends use when creating a data snapshot for a savepoint.
User-specified pod templates for Kubernetes deployments #
The native Kubernetes deployment (where Flink actively talks to K8s to start and stop pods) now supports custom pod templates.
With those templates, users can set up and configure the JobManagers and TaskManagers pods in a Kubernetes-y way, with flexibility beyond the configuration options that are directly built into Flink’s Kubernetes integration.
Unaligned Checkpoints - production-ready #
Unaligned Checkpoints have matured to the point where we encourage all users to try them out, if they see issues with their application under backpressure.
In particular, these changes make Unaligned Checkpoints easier to use:
-
You can now rescale applications from unaligned checkpoints. This comes in handy if your application needs to be scaled from a retained checkpoint because you cannot (afford to) create a savepoint.
-
Enabling unaligned checkpoints is cheaper for applications that are not back-pressured. Unaligned checkpoints can now trigger adaptively with a timeout, meaning a checkpoint starts as an aligned checkpoint (not storing any in-flight events) and falls back to an unaligned checkpoint (storing some in-flight events), if the alignment phase takes longer than a certain time.
Find out more about how to enable unaligned checkpoints in the Checkpointing Documentation.
Machine Learning Library moving to a separate repository #
To accelerate the development of Flink’s Machine Learning efforts (streaming, batch, and unified machine learning), the effort has moved to the new repository flink-ml under the Flink project. We here follow a similar approach like the Stateful Functions effort, where a separate repository has helped to speed up the development by allowing for more light-weight contribution workflows and separate release cycles.
Stay tuned for more updates in the Machine Learning efforts, like the interplay with ALink (suite of many common Machine Learning Algorithms on Flink) or the Flink & TensorFlow integration.
Notable SQL & Table API improvements #
Like in previous releases, SQL and the Table API remain an area of big developments.
Windows via Table-valued functions #
Defining time windows is one of the most frequent operations in streaming SQL queries. Flink 1.13 introduces a new way to define windows: via Table-valued Functions. This approach is both more expressive (lets you define new types of windows) and fully in line with the SQL standard.
Flink 1.13 supports TUMBLE and HOP windows in the new syntax, SESSION windows will follow in a subsequent release. To demonstrate the increased expressiveness, consider the two examples below.
A new CUMULATE window function that assigns windows with an expanding step size until the maximum window size is reached:
SELECT window_time, window_start, window_end, SUM(price) AS total_price
FROM TABLE(CUMULATE(TABLE Bid, DESCRIPTOR(bidtime), INTERVAL '2' MINUTES, INTERVAL '10' MINUTES))
GROUP BY window_start, window_end, window_time;
You can reference the window start and window end time of the table-valued window functions, making new types of constructs possible. Beyond regular windowed aggregations and windowed joins, you can, for example, now express windowed Top-K aggregations:
SELECT window_time, ...
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY window_start, window_end ORDER BY total_price DESC)
as rank
FROM t
) WHERE rank <= 100;
Improved interoperability between DataStream API and Table API/SQL #
This release radically simplifies mixing DataStream API and Table API programs.
The Table API is a great way to develop applications, with its declarative nature and its many built-in functions. But sometimes, you need to escape to the DataStream API for its expressiveness, flexibility, and explicit control over the state.
The new methods StreamTableEnvironment.toDataStream()/.fromDataStream()
can model
a DataStream
from the DataStream API as a table source or sink.
Notable improvements include:
-
Automatic type conversion between the DataStream and Table API type systems.
-
Seamless integration of event time configurations; watermarks flow through boundaries for high consistency.
-
Enhancements to the
Row
class (representing row events from the Table API) has received a major overhaul (improving the behavior oftoString()
/hashCode()
/equals()
methods) and now supports accessing fields by name, with support for sparse representations.
Table table = tableEnv.fromDataStream(
dataStream,
Schema.newBuilder()
.columnByMetadata("rowtime", "TIMESTAMP(3)")
.watermark("rowtime", "SOURCE_WATERMARK()")
.build());
DataStream<Row> dataStream = tableEnv.toDataStream(table)
.keyBy(r -> r.getField("user"))
.window(...);
SQL Client: Init scripts and Statement Sets #
The SQL Client is a convenient way to run and deploy SQL streaming and batch jobs directly, without writing any code from the command line, or as part of a CI/CD workflow.
This release vastly improves the functionality of the SQL client. Almost all operations as that
are available to Java applications (when programmatically launching queries from the
TableEnvironment
) are now supported in the SQL Client and as SQL scripts.
That means SQL users need much less glue code for their SQL deployments.
Easier Configuration and Code Sharing
The support of YAML files to configure the SQL Client will be discontinued. Instead, the client accepts one or more initialization scripts to configure a session before the main SQL script gets executed.
These init scripts would typically be shared across teams/deployments and could be used for loading common catalogs, applying common configuration settings, or defining standard views.
./sql-client.sh -i init1.sql init2.sql -f sqljob.sql
More config options
A greater set of recognized config options and improved SET
/RESET
commands make it easier to
define and control the execution from within the SQL client and SQL scripts.
Multi-query Support with Statement Sets
Multi-query execution lets you execute multiple SQL queries (or statements) as a single Flink job. This is particularly useful for streaming SQL queries that run indefinitely.
Statement Sets are the mechanism to group the queries together that should be executed together.
The following is an example of a SQL script that can be run via the SQL client. It sets up and configures the environment and executes multiple queries. The script captures end-to-end the queries and all environment setup and configuration work, making it a self-contained deployment artifact.
-- set up a catalog
CREATE CATALOG hive_catalog WITH ('type' = 'hive');
USE CATALOG hive_catalog;
-- or use temporary objects
CREATE TEMPORARY TABLE clicks (
user_id BIGINT,
page_id BIGINT,
viewtime TIMESTAMP
) WITH (
'connector' = 'kafka',
'topic' = 'clicks',
'properties.bootstrap.servers' = '...',
'format' = 'avro'
);
-- set the execution mode for jobs
SET execution.runtime-mode=streaming;
-- set the sync/async mode for INSERT INTOs
SET table.dml-sync=false;
-- set the job's parallelism
SET parallism.default=10;
-- set the job name
SET pipeline.name = my_flink_job;
-- restore state from the specific savepoint path
SET execution.savepoint.path=/tmp/flink-savepoints/savepoint-bb0dab;
BEGIN STATEMENT SET;
INSERT INTO pageview_pv_sink
SELECT page_id, count(1) FROM clicks GROUP BY page_id;
INSERT INTO pageview_uv_sink
SELECT page_id, count(distinct user_id) FROM clicks GROUP BY page_id;
END;
Hive query syntax compatibility #
You can now write SQL queries against Flink using the Hive SQL syntax. In addition to Hive’s DDL dialect, Flink now also accepts the commonly-used Hive DML and DQL dialects.
To use the Hive SQL dialect, set table.sql-dialect
to hive
and load the HiveModule
.
The latter is important because Hive’s built-in functions are required for proper syntax and
semantics compatibility. The following example illustrates that:
CREATE CATALOG myhive WITH ('type' = 'hive'); -- setup HiveCatalog
USE CATALOG myhive;
LOAD MODULE hive; -- setup HiveModule
USE MODULES hive,core;
SET table.sql-dialect = hive; -- enable Hive dialect
SELECT key, value FROM src CLUSTER BY key; -- run some Hive queries
Please note that the Hive dialect no longer supports Flink’s SQL syntax for DML and DQL statements.
Switch back to the default
dialect for Flink’s syntax.
Improved behavior of SQL time functions #
Working with time is a crucial element of any data processing. But simultaneously, handling different time zones, dates, and times is an increadibly delicate task when working with data.
In Flink 1.13. we put much effort into simplifying the usage of time-related functions. We adjusted (made
more specific) the return types of functions such as: PROCTIME()
, CURRENT_TIMESTAMP
, NOW()
.
Moreover, you can now also define an event time attribute on a TIMESTAMP_LTZ column to gracefully do window processing with the support of Daylight Saving Time.
Please see the release notes for a complete list of changes.
Notable PyFlink improvements #
The general theme of this release in PyFlink is to bring the Python DataStream API and Table API closer to feature parity with the Java/Scala APIs.
Stateful operations in the Python DataStream API #
With Flink 1.13, Python programmers now also get to enjoy the full potential of Apache Flink’s stateful stream processing APIs. The rearchitected Python DataStream API, introduced in Flink 1.12, now has full stateful capabilities, allowing users to remember information from events in the state and act on it later.
That stateful processing capability is the basis of many of the more sophisticated processing operations, which need to remember information across individual events (for example, Windowing Operations).
This example shows a custom counting window implementation, using state:
class CountWindowAverage(FlatMapFunction):
def __init__(self, window_size):
self.window_size = window_size
def open(self, runtime_context: RuntimeContext):
descriptor = ValueStateDescriptor("average", Types.TUPLE([Types.LONG(), Types.LONG()]))
self.sum = runtime_context.get_state(descriptor)
def flat_map(self, value):
current_sum = self.sum.value()
if current_sum is None:
current_sum = (0, 0)
# update the count
current_sum = (current_sum[0] + 1, current_sum[1] + value[1])
# if the count reaches window_size, emit the average and clear the state
if current_sum[0] >= self.window_size:
self.sum.clear()
yield value[0], current_sum[1] // current_sum[0]
else:
self.sum.update(current_sum)
ds = ... # type: DataStream
ds.key_by(lambda row: row[0]) \
.flat_map(CountWindowAverage(5))
User-defined Windows in the PyFlink DataStream API #
Flink 1.13 adds support for user-defined windows to the PyFlink DataStream API. Programs can now use windows beyond the standard window definitions.
Because windows are at the heart of all programs that process unbounded streams (by splitting the stream into “buckets” of bounded size), this greatly increases the expressiveness of the API.
Row-based operation in the PyFlink Table API #
The Python Table API now supports row-based operations, i.e., custom transformation functions on rows. These functions are an easy way to apply data transformations on tables beyond the built-in functions.
This is an example of using a map()
operation in Python Table API:
@udf(result_type=DataTypes.ROW(
[DataTypes.FIELD("c1", DataTypes.BIGINT()),
DataTypes.FIELD("c2", DataTypes.STRING())]))
def increment_column(r: Row) -> Row:
return Row(r[0] + 1, r[1])
table = ... # type: Table
mapped_result = table.map(increment_column)
In addition to map()
, the API also supports flat_map()
, aggregate()
, flat_aggregate()
,
and other row-based operations. This brings the Python Table API a big step closer to feature
parity with the Java Table API.
Batch execution mode for PyFlink DataStream programs #
The PyFlink DataStream API now also supports the batch execution mode for bounded streams, which was introduced for the Java DataStream API in Flink 1.12.
The batch execution mode simplifies operations and improves the performance of programs on bounded streams, by exploiting the bounded stream nature to bypass state backends and checkpoints.
Other improvements #
Flink Documentation via Hugo
The Flink Documentation has been migrated from Jekyll to Hugo. If you find something missing, please let us know. We are also curious to hear if you like the new look & feel.
Exception histories in the Web UI
The Flink Web UI will present up to n last exceptions that caused a job to fail. That helps to debug scenarios where a root failure caused subsequent failures. The root failure cause can be found in the exception history.
Better exception / failure-cause reporting for unsuccessful checkpoints
Flink now provides statistics for checkpoints that failed or were aborted to make it easier to determine the failure cause without having to analyze the logs.
Prior versions of Flink were reporting metrics (e.g., size of persisted data, trigger time) only in case a checkpoint succeeded.
Exactly-once JDBC sink
From 1.13, JDBC sink can guarantee exactly-once delivery of results for XA-compliant databases by transactionally committing results on checkpoints. The target database must have (or be linked to) an XA Transaction Manager.
The connector exists currently only for the DataStream API, and can be created through the
JdbcSink.exactlyOnceSink(...)
method (or by instantiating the JdbcXaSinkFunction
directly).
PyFlink Table API supports User-Defined Aggregate Functions in Group Windows
Group Windows in PyFlink’s Table API now support both general Python User-defined Aggregate Functions (UDAFs) and Pandas UDAFs. Such functions are critical to many analysis- and ML training programs.
Flink 1.13 improves upon previous releases, where these functions were only supported in unbounded Group-by aggregations.
Improved Sort-Merge Shuffle for Batch Execution
Flink 1.13 improves the memory stability and performance of the sort-merge blocking shuffle for batch-executed programs, initially introduced in Flink 1.12 via FLIP-148.
Programs with higher parallelism (1000s) should no longer frequently trigger OutOfMemoryError: Direct Memory. The performance (especially on spinning disks) is improved through better I/O scheduling and broadcast optimizations.
HBase connector supports async lookup and lookup cache
The HBase Lookup Table Source now supports an async lookup mode and a lookup cache. This greatly benefits the performance of Table/SQL jobs with lookup joins against HBase, while reducing the I/O requests to HBase in the typical case.
In prior versions, the HBase Lookup Source only communicated synchronously, resulting in lower pipeline utilization and throughput.
Changes to consider when upgrading to Flink 1.13 #
- FLINK-21709 - The old planner of the Table &
SQL API has been deprecated in Flink 1.13 and will be dropped in Flink 1.14.
The Blink engine has been the default planner for some releases now and will be the only one going forward.
That means that both the
BatchTableEnvironment
and SQL/DataSet interoperability are reaching the end of life. Please use the unifiedTableEnvironment
for batch and stream processing going forward. - FLINK-22352 The community decided to deprecate the Apache Mesos support for Apache Flink. It is subject to removal in the future. Users are encouraged to switch to a different resource manager.
- FLINK-21935 - The
state.backend.async
option is deprecated. Snapshots are always asynchronous now (as they were by default before) and there is no option to configure a synchronous snapshot anymore. - FLINK-17012 - The tasks’
RUNNING
state was split into two states:INITIALIZING
andRUNNING
. A task isINITIALIZING
while it loads the checkpointed state, and, in the case of unaligned checkpoints, until the checkpointed in-flight data has been recovered. This lets monitoring systems better determine when the tasks are really back to doing work by making the phase for state restoring explicit. - FLINK-21698 - The CAST operation between the
NUMERIC type and the TIMESTAMP type is problematic and therefore no longer supported: Statements like
CAST(numeric AS TIMESTAMP(3))
will now fail. Please useTO_TIMESTAMP(FROM_UNIXTIME(numeric))
instead. - FLINK-22133 The unified source API for connectors
has a minor breaking change: The
SplitEnumerator.snapshotState()
method was adjusted to accept the Checkpoint ID of the checkpoint for which the snapshot is created. - FLINK-19463 - The old
StateBackend
interfaces were deprecated as they had overloaded semantics which many users found confusing. This is a pure API change and does not affect runtime characteristics of applications. For full details on how to update existing pipelines, please see the migration guide.
Resources #
The binary distribution and source artifacts are now available on the updated Downloads page of the Flink website, and the most recent distribution of PyFlink is available on PyPI.
Please review the release notes
carefully if you plan to upgrade your setup to Flink 1.13. This version is API-compatible with
previous 1.x releases for APIs annotated with the @Public
annotation.
You can also check the complete release changelog and updated documentation for a detailed list of changes and new features.
List of Contributors #
The Apache Flink community would like to thank each one of the contributors that have made this release possible:
acqua.csq, AkisAya, Alexander Fedulov, Aljoscha Krettek, Ammar Al-Batool, Andrey Zagrebin, anlen321, Anton Kalashnikov, appleyuchi, Arvid Heise, Austin Cawley-Edwards, austin ce, azagrebin, blublinsky, Brian Zhou, bytesmithing, caozhen1937, chen qin, Chesnay Schepler, Congxian Qiu, Cristian, cxiiiiiii, Danny Chan, Danny Cranmer, David Anderson, Dawid Wysakowicz, dbgp2021, Dian Fu, DinoZhang, dixingxing, Dong Lin, Dylan Forciea, est08zw, Etienne Chauchot, fanrui03, Flora Tao, FLRNKS, fornaix, fuyli, George, Giacomo Gamba, GitHub, godfrey he, GuoWei Ma, Gyula Fora, hackergin, hameizi, Haoyuan Ge, Harshvardhan Chauhan, Haseeb Asif, hehuiyuan, huangxiao, HuangXiao, huangxingbo, HuangXingBo, humengyu2012, huzekang, Hwanju Kim, Ingo Bürk, I. Raleigh, Ivan, iyupeng, Jack, Jane, Jark Wu, Jerry Wang, Jiangjie (Becket) Qin, JiangXin, Jiayi Liao, JieFang.He, Jie Wang, jinfeng, Jingsong Lee, JingsongLi, Jing Zhang, Joao Boto, JohnTeslaa, Jun Qin, kanata163, kevin.cyj, KevinyhZou, Kezhu Wang, klion26, Kostas Kloudas, kougazhang, Kurt Young, laughing, legendtkl, leiqiang, Leonard Xu, liaojiayi, Lijie Wang, liming.1018, lincoln lee, lincoln-lil, liushouwei, liuyufei, LM Kang, lometheus, luyb, Lyn Zhang, Maciej Obuchowski, Maciek Próchniak, mans2singh, Marek Sabo, Matthias Pohl, meijie, Mika Naylor, Miklos Gergely, Mohit Paliwal, Moritz Manner, morsapaes, Mulan, Nico Kruber, openopen2, paul8263, Paul Lam, Peidian li, pengkangjing, Peter Huang, Piotr Nowojski, Qinghui Xu, Qingsheng Ren, Raghav Kumar Gautam, Rainie Li, Ricky Burnett, Rion Williams, Robert Metzger, Roc Marshal, Roman, Roman Khachatryan, Ruguo, Ruguo Yu, Rui Li, Sebastian Liu, Seth Wiesman, sharkdtu, sharkdtu(涂小刚), Shengkai, shizhengchao, shouweikun, Shuo Cheng, simenliuxing, SteNicholas, Stephan Ewen, Suo Lu, sv3ndk, Svend Vanderveken, taox, Terry Wang, Thelgis Kotsos, Thesharing, Thomas Weise, Till Rohrmann, Timo Walther, Ting Sun, totoro, totorooo, TsReaper, Tzu-Li (Gordon) Tai, V1ncentzzZ, vthinkxie, wangfeifan, wangpeibin, wangyang0918, wangyemao-github, Wei Zhong, Wenlong Lyu, wineandcheeze, wjc, xiaoHoly, Xintong Song, xixingya, xmarker, Xue Wang, Yadong Xie, yangsanity, Yangze Guo, Yao Zhang, Yuan Mei, yulei0824, Yu Li, Yun Gao, Yun Tang, yuruguo, yushujun, Yuval Itzchakov, yuzhao.cyz, zck, zhangjunfan, zhangzhengqi3, zhao_wei_nan, zhaown, zhaoxing, Zhenghua Gao, Zhenqiu Huang, zhisheng, zhongqishang, zhushang, zhuxiaoshang, Zhu Zhu, zjuwangg, zoucao, zoudan, 左元, 星, 肖佳文, 龙三


I'm a Full Stack Web developer with 6+ years of experience.
I have worked in different types of industries, but I focused on web application/software development. I am passionate about creating website and worked on its design. I take my inspiration and passion from my environments & colleague. I'm eager to learn new technologies in the internet. I can bring things from nothing into something.
Laravel and Linux server is one of my current expertise right now. With a strong core skills in PHP, HTML5, Javascript, Angular JS, XML, JSON, MySQL and follow strict OOP principles.
I'm open to Job opportunities, feel free to contact me.


{% extends 'base.html' %} {% block content %}
Here is the LaTeX code for your matrix. Please take a moment to check the LaTeX for errors before you copy and paste into your favorite text editor.
File Name: {{ image_filename }}


Fire chars vacant house on Big Isle | Honolulu Star-Advertiser
Hawaii island firefighters battled a large fire at a vacant residence at Hawaiian Paradise Park
Firefighters responded to the blaze that broke out at a two-story home at 15-1791 15th Avenue at about 8:30 p.m. When they arrived, they saw flames emanating from the residence.
Firefighters brought the fire under control at about 9:40 p.m. and extinguished it at 11:15 p.m.
No injuries were reported.
The Hawaii County Fire Department said the residence, which was built in 1991, has been a haven for squatters since the homeowner died earlier this year.
The cause of the fire is under investigation. Damage is estimated at $431,400.


We want Droidcon Boston to be a safe and productive environment for everyone. To that end, this code of conduct spells out the behavior we support and don’t support at conferences. All attendees, speakers, sponsors and volunteers at our conference are required to agree to the following Code of Conduct. Organizers will enforce this code throughout the event.
Our conference is dedicated to providing a harassment-free conference experience for everyone, regardless of gender, gender identity and expression, age, sexual orientation, disability, physical appearance, body size, race, national origin, ethnicity, religion (or lack thereof), or technology choices. We invite you to help us make Droidcon Boston a place that is welcoming and respectful to all participants. So that everyone can focus on the conference itself, learning and growing in their own way, and the great networking and community richness that happens when we get together in person, we will not tolerate harassment of conference participants in any form—in person or online.
Examples of harassment include offensive comments, verbal threats or demands, intimidation, stalking, harassing photography or recording, sustained disruption of sessions or events, and unwelcome physical contact or sexual attention. Harassment also includes slights and negative messages, both unintended and intentional, based solely on appearance (sometimes called micro-aggressions). Sexual language and imagery are not appropriate for any conference setting.
We expect all participants to follow the Code of Conduct during the conference. This includes conference-related social events at off-site locations, and in related online communities and social media. Participants asked to stop any harassing behavior are expected to comply immediately. Conference participants violating this Code of Conduct may be expelled from the conference without a refund, and/or banned from future Droidcon Boston events.
Reach out to any conference organizer if you have questions or concerns about the Code of Conduct itself or the behavior of any participants before, during or after the conference. We will treat all violations of the Code of Conduct seriously. You can also email us at coc@droidcon-boston.com.


French cycling’s eternal runner-up Poulidor dies at 83
BORDEAUX, Nov 13 — French cyclist Raymond Poulidor, who gained huge affection as an eternal runner-up in the Tour de France, has died at the age of 83, his wife told AFP today.
Poulidor had been hospitalised since early October and “he left us this morning,” his wife Gisele told AFP from their home in western France.
His astonishing career spanned 25 years but he will always be remembered for the races he failed to win.
From 1964 to 1976 Poulidor finished second in the Tour de France on three occasions and was third five times in an era dominated by Eddy Merckx.
So famous was his repeated failure to clinch the Tour that the phrase “to do a Poulidor” passed into the French language, synonymous with coming an unlucky second.
Despite his Tour de France disappointments, Poulidor is forever ranked among France’s cycling greats and at the same time is seen as a humble hard worker loved by the people who earned every one of his many triumphs.
His long-time rival Merckx told AFP “a great friend has left us”.
“I am very sad. During my career we were rivals but afterwards we often spent time together. We holidayed together. It’s a big loss.”
Among current riders, Romain Bardet, second in the Tour de France in 2016 and third the following year, said: “He was an emblematic character, adored by the public.”
“He was the link between cycling and its origins among the people. I remember seeing him on the Tour de France but also at the local village races with the organisers. He represented the real face of cycling, a popular and accessible sport.”
Born on April 15, 1936 in a small village in western France, just a few miles from where he died, Poulidor clinched 189 wins during his career from 1960-1977. High points included wins in the Tour of Spain, the Dauphine Libere twice, and the Paris-Nice twice.
For the remaining four decades of his life he retained his links with cycling through public relations and as a consultant.
He remained an avid fan and in subsequent years he was frequently seen surrounded by admirers and signing autographs at the start of every Tour de France stage.
Doing promotional work at the 2019 Tour took a lot out of him, according to wife Gisele.
“He was very tired after the last Tour de France,” she told AFP. — AFP


Login
Try to submit this form using the mouse click with both buttons, next using tab put the focus to the buttons and use space bar key, next put the focus again and use enter key
Try to submit this form using the mouse click with both buttons, next using tab put the focus to the buttons and use space bar key, next put the focus again and use enter key


The human body is fascinating to most of us, presumably because we have a rather vested interest in it. It is especially interesting when we include the physiology of diseases, as diseases often represent good illustrations of the systems not functioning properly. I have tried to include information that will both sustain and stimulate your interest, as well as challenge you to extend your knowledge outside this course. There are many good programs on the Public Broadcasting System and cable TV as well as articles in magazines such as Science News, Scientific American, Discover, Scientific American Science and Medicine, and Natural History that illustrate the fascinating aspects of human physiology. One of the goals of this course is to develop your ability to understand the more complex scientific and medical advances that are occurring with increasing frequency today.
This course is designed to cover the fundamentals of human physiology for students in a variety of life science-related majors including Nursing, Kinesiology, Athletic Training, and Science.  ISBN:<PHONE_NUMBER>040
| Lesson | Topic |
|---|---|
| 1 | Introduction to Physiology: Cell Chemistry, The Living Cell, Tissues and Organ Systems |
| 2 | Cell Growth, Reproduction, Nutrition, and Intermediary Metabolism |
| 3 | Physiology of Muscles |
| 4 | Nerve Impulse Physiology |
| 5 | The Central Nervous System, The Peripheral Nervous System, The Autonomic Nervous System, and The Special Senses |
| 6 | The Endocrine System |
| 7 | The Blood, The Cardiovascular System, and Capillary Exchange |
| 8 | The Lymphatic System and The Immune System |
| 9 | The Respiratory System |
| 10 | The Digestive System |
| 11 | The Urinary System and Regulation of Fluids, Electrolytes, and pH in the Body |
| 12 | The Reproductive Systems, Pregnancy, and Human Development |
Your final grade will be based on your performance on the 12 lesson assignments, four discussion forums, and two exams as shown below:
| Activity | Breakdown | Total Points |
|---|---|---|
| Lesson Assignments | 12 (100pts/each) | 1200 |
| Discussion Forums / Class Participation | 4 (25pts/each) | 100 |
| Mid-Course Exam | 1 (200pts) | 200 |
| Final Exam | 1 (200pts) | 200 |
| Total | 1700 |
| Letter Grade | Points |
|---|---|
| A | 1580+ |
| A- | 1530-1579 |
| B+ | 1470-1529 |
| B | 1415-1469 |
| B- | 1360-1414 |
| C+ | 1275-1359 |
| C | 1190-1274 |
| D | 1020-1189 |
| F | < 1020 |


Welcome to weighted-levenshtein’s documentation!¶
weighted-levenshtein¶
Installation¶
pip install weighted-levenshtein
Usage Example¶
import numpy as np
from weighted_levenshtein import lev, osa, dam_lev
insert_costs = np.ones(128) # make an array of all 1's
insert_costs[ord('D')] = 1.5 # make inserting the character 'D' have cost 1.5 (instead of 1)
print lev('BANANAS', 'BANDANAS', insert_costs=insert_costs) # prints '1.5'
lev
, osa
, and dam_lev
are aliases for levenshtein
,
optimal_string_alignment
, and damerau_levenshtein
, respectively.
Detailed Documentation¶
Important Notes¶
- The costs parameters only accept numpy arrays, since the underlying Cython implementation relies on this for fast lookups. The numpy arrays are indexed using the
ord()
value of the characters. Thus, only the first 128 ASCII letters are accepted, anddict
andlist
are not accepted. Consequently, the strings must be strictlystr
objects, notunicode
. - This library was built with only Python 2 in mind. Python 3 compatibility is untested.
Wikipedia links¶
Levenshtein distance: https://en.wikipedia.org/wiki/Levenshtein_distance and https://en.wikipedia.org/wiki/Wagner%E2%80%93Fischer_algorithm
Optimal String Alignment: https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance#Optimal_string_alignment_distance
Damerau-Levenshtein distance: https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance#Distance_with_adjacent_transpositions
Use as Cython library¶
TODO
Distribution¶
Since not every machine has Cython installed, we distribute the C code
that was compiled from Cython. To compile to C, run setup.sh
like
above. Not only will it generate a .so file, it will also generate the
.c file that can be distributed, and compiled on any machine with a C
compiler. Consequently, the distribution on PyPI contains only the .c
file.
Functions¶
-
weighted_levenshtein.
levenshtein
(unsigned char *str1, unsigned char *str2, __Pyx_memviewslice insert_costs=None, __Pyx_memviewslice delete_costs=None, __Pyx_memviewslice substitute_costs=None)¶ Calculates the Levenshtein distance between str1 and str2, provided the costs of inserting, deleting, and substituting characters. The costs default to 1 if not provided.
For convenience, this function is aliased as clev.lev().
Parameters: - str1 (str) – first string
- str2 (str) – second string
- insert_costs (np.ndarray) – a numpy array of np.float64 (C doubles) of length 128 (0..127), where insert_costs[i] is the cost of inserting ASCII character i
- delete_costs (np.ndarray) – a numpy array of np.float64 (C doubles) of length 128 (0..127), where delete_costs[i] is the cost of deleting ASCII character i
- substitute_costs (np.ndarray) – a 2D numpy array of np.float64 (C doubles) of dimensions (128, 128), where substitute_costs[i, j] is the cost of substituting ASCII character i with ASCII character j
-
weighted_levenshtein.
optimal_string_alignment
(unsigned char *str1, unsigned char *str2, __Pyx_memviewslice insert_costs=None, __Pyx_memviewslice delete_costs=None, __Pyx_memviewslice substitute_costs=None, __Pyx_memviewslice transpose_costs=None)¶ Calculates the Optimal String Alignment distance between str1 and str2, provided the costs of inserting, deleting, and substituting characters. The costs default to 1 if not provided.
For convenience, this function is aliased as clev.osa().
Parameters: - str1 (str) – first string
- str2 (str) – second string
- insert_costs (np.ndarray) – a numpy array of np.float64 (C doubles) of length 128 (0..127), where insert_costs[i] is the cost of inserting ASCII character i
- delete_costs (np.ndarray) – a numpy array of np.float64 (C doubles) of length 128 (0..127), where delete_costs[i] is the cost of deleting ASCII character i
- substitute_costs (np.ndarray) – a 2D numpy array of np.float64 (C doubles) of dimensions (128, 128), where substitute_costs[i, j] is the cost of substituting ASCII character i with ASCII character j
- transpose_costs (np.ndarray) – a 2D numpy array of np.float64 (C doubles) of dimensions (128, 128), where transpose_costs[i, j] is the cost of transposing ASCII character i with ASCII character j, where character i is followed by character j in the string
-
weighted_levenshtein.
damerau_levenshtein
(unsigned char *str1, unsigned char *str2, __Pyx_memviewslice insert_costs=None, __Pyx_memviewslice delete_costs=None, __Pyx_memviewslice substitute_costs=None, __Pyx_memviewslice transpose_costs=None)¶ Calculates the Damerau-Levenshtein distance between str1 and str2, provided the costs of inserting, deleting, substituting, and transposing characters. The costs default to 1 if not provided.
For convenience, this function is aliased as clev.dam_lev().
Parameters: - str1 (str) – first string
- str2 (str) – second string
- insert_costs (np.ndarray) – a numpy array of np.float64 (C doubles) of length 128 (0..127), where insert_costs[i] is the cost of inserting ASCII character i
- delete_costs (np.ndarray) – a numpy array of np.float64 (C doubles) of length 128 (0..127), where delete_costs[i] is the cost of deleting ASCII character i
- substitute_costs (np.ndarray) – a 2D numpy array of np.float64 (C doubles) of dimensions (128, 128), where substitute_costs[i, j] is the cost of substituting ASCII character i with ASCII character j
- transpose_costs (np.ndarray) – a 2D numpy array of np.float64 (C doubles) of dimensions (128, 128), where transpose_costs[i, j] is the cost of transposing ASCII character i with ASCII character j, where character i is followed by character j in the string


align |
left|right|center |
left |
Drop alignment. |
mode |
hover | click |
click,hover |
Comma separated list of dropdown trigger behaviour modes. |
delay-show |
Number |
0 |
Delay time in hover mode before a Drop is shown in ms. |
delay-hide |
Number |
800 |
Delay time in hover mode before a Drop is hidden in ms. |
boundary |
CSS selector |
window |
Referenced element to keep Drop's visibility. |
boundary-align |
Boolean |
false |
Align Drop to boundary. |
cls-drop |
String |
'ui-navbar-dropdown' |
The Drop container class. |
offset |
Number |
0 |
The offset of the Drop container. |
dropbar |
Boolean | CSS selector |
false | true | Selector |
The dropbar selector. If true the dropbar will be inserted automatically. |
dropbar-mode |
slide | push |
slide |
The dropbar mode. |
duration |
Number |
200 |
The dropbar transition duration. |


ROLLBACK -- abort the current transaction
ROLLBACK [ WORK ]
ROLLBACK rolls back the current transaction and causes all the updates made by the transaction to be discarded.
WORK
Optional key word - has no effect.
Use COMMIT to successfully terminate a transaction.
Issuing ROLLBACK when not inside a transaction does no harm.
ROLLBACK is not supported within SPL programs.
To abort all changes:
ROLLBACK;
See Also


--- layout: post title: "#Entry 2" date: '2015-01-06T00:00:00-05:00' tags: [] tumblr_url: http://lqb2writes.tumblr.com/post/146156666907/entry-2 ---
#Entry 2
6 Jan 2015
==========
lesson learned from day of reflection: one day isn’t enough. i think i also need to go away to do it properly.
if i make it to 2016, i want to take a two-day weekend or block out one full day from sunup to sundown. i was also too easily distracted during the day and was too able to find things i needed to do to prepare for diving back into the stream of life.
it’d be nice to go somewhere on friday night, probably solo, sleep there, wake up, review 2015 calendar, think about life and meaning, plan for 2016, sleep, return home the following morning.


tmp_2c78d90
and
OBS data
DIAG Sets 5 & 6 - Horizontal contour/vector plots of DJF, JJA and ANN means
| IPCC/CRU climatology 1961-90 | DJF | JJA | ANN | |
|---|---|---|---|---|
| TREFHT | 2-meter air temperature (land) | plot | plot | plot |
| HadISST/OI.v2 (Climatology) 1982-2001 | DJF | JJA | ANN | |
| SST | sea surface temperature | plot | plot | plot |
| HadISST/OI.v2 (Pre-Indust) 1870-1900 | DJF | JJA | ANN | |
| SST | sea surface temperature | plot | plot | plot |
| HadISST/OI.v2 (Present Day) 1999-2008 | DJF | JJA | ANN | |
| SST | sea surface temperature | plot | plot | plot |
| Legates & Willmott 1920-80 | DJF | JJA | ANN | |
| PRECT * | Precipitation rate | plot | plot | plot |
| PRECT TROP | Tropical precipitation rate | plot | plot | plot |
| TREFHT * | 2-meter air temperature | plot | plot | plot |
| Willmott & Matsuura 1950-99 | DJF | JJA | ANN | |
| TREFHT | 2-meter air temperature (land) | plot | plot | plot |
| PRECIP | Cumulative precipitation (land) | plot | plot | plot |
| NCEP Reanalysis 1979-98 | DJF | JJA | ANN | |
| PREH2O * | Total precipitable water | plot | plot | plot |
| PREH2O TROP | Tropical precipitable water | plot | plot | plot |
| PSL * | Sea-level pressure | plot | plot | plot |
| SHFLX * | Surface sensible heat flux | plot | plot | plot |
| SURF STRESS * | Surface wind stress (ocean) | plot | plot | plot |
| SURF STRESS TROP | Tropical surface wind stress (ocean) | plot | plot | plot |
| T 850 * | 850 mb temperature | plot | plot | plot |
| T 200 | 200 mb temperature | plot | plot | plot |
| TS * | Surface temperature | plot | plot | plot |
| TTRP | Tropopause temperature | plot | plot | plot |
| U 200 * | 200 mb zonal wind | plot | plot | plot |
| Z 500 | 500 mb geopotential height | plot | plot | plot |
| Z 300 * | 300 mb geopotential height | plot | plot | plot |
| ERA40 Reanalysis 1980-2001 | DJF | JJA | ANN | |
| LHFLX * | Surface latent heat flux | plot | plot | plot |
| PREH2O * | Precipitable water | plot | plot | plot |
| PREH2O TROP | Tropical precipitable water | plot | plot | plot |
| T 850 * | 850 mb temperature | plot | plot | plot |
| T 200 | 200 mb temperature | plot | plot | plot |
| U 200 * | 200 mb zonal wind | plot | plot | plot |
| Z 500 | 500 mb geopotential height | plot | plot | plot |
| Z 300 * | 300 mb geopotential height | plot | plot | plot |
| ECMWF Reanalysis 1979-93 | DJF | JJA | ANN | |
| EP * | Evaporation - precipitation | plot | plot | plot |
| LHFLX * | Surface latent heat flux | plot | plot | plot |
| PREH2O * | Precipitable water | plot | plot | plot |
| PREH2O TROP | Tropical precipitable water | plot | plot | plot |
| QFLX | Surface water flux | plot | plot | plot |
| T 850 * | 850 mb temperature | plot | plot | plot |
| T 200 | 200 mb temperature | plot | plot | plot |
| TTRP | Tropopause temperature | plot | plot | plot |
| U 200 * | 200 mb zonal wind | plot | plot | plot |
| Z 500 | 500 mb geopotential height | plot | plot | plot |
| Z 300 * | 300 mb geopotential height | plot | plot | plot |
| JRA25 Reanalysis 1979-04 | DJF | JJA | ANN | |
| PREH2O * | Total precipitable water | plot | plot | plot |
| PREH2O TROP | Tropical precipitable water | plot | plot | plot |
| PSL * | Sea-level pressure | plot | plot | plot |
| SHFLX * | Surface sensible heat flux | plot | plot | plot |
| LHFLX * | Surface latent heat flux | plot | plot | plot |
| SURF STRESS * | Surface wind stress (ocean) | plot | plot | plot |
| SURF STRESS TROP * | Tropical surface wind stress (ocean) | plot | plot | plot |
| T 850 * | 850 mb temperature | plot | plot | plot |
| T 200 | 200 mb temperature | plot | plot | plot |
| TREFHT | 2-meter surface air temperature | plot | plot | plot |
| U 200 * | 200 mb zonal wind | plot | plot | plot |
| Z 500 | 500 mb geopotential height | plot | plot | plot |
| Z 300 * | 300 mb geopotential height | plot | plot | plot |
| AIRS IR Sounder 2002-06 | DJF | JJA | ANN | |
| T 850 * | 850 mb temperature | plot | plot | plot |
| T 200 | 200 mb temperature | plot | plot | plot |
| ERS Scatterometer 1992-2000 | DJF | JJA | ANN | |
| SURF STRESS * | Surface wind stress (ocean) | plot | plot | plot |
| SURF STRESS TROP | Tropical surface wind stress (ocean) | plot | plot | plot |
| MODIS Mar2000-Aug2004 | DJF | JJA | ANN | |
| PREH2O * | Total precipitable water | plot | plot | plot |
| PREH2O TROP | Tropical precipitable water | plot | plot | plot |
| TGCLDLWP | Cloud liquid water | plot | plot | plot |
| MEANPTOP | Mean cloud top pressure (Day) | plot | plot | plot |
| MEANTTOP | Mean cloud top temperature (Day) | plot | plot | plot |
| MEANTAU | Mean cloud optical thickness (Day) | plot | plot | plot |
| TCLDAREA | Total cloud area (Day) | plot | plot | plot |
| NVAP 1988-1999 | DJF | JJA | ANN | |
| PREH2O * | Total precipitable water | plot | plot | plot |
| PREH2O TROP | Tropical precipitable water | plot | plot | plot |
| TGCLDLWP | Cloud liquid water (ocean) | plot | plot | plot |
| TGCLDLWP TROP | Tropical cloud liquid water (ocean) | plot | plot | plot |
| Woods Hole OAFLUX 1958-2006 | DJF | JJA | ANN | |
| LHFLX | Latent Heat Flux | plot | plot | plot |
| QFLX | Surface Water Flux | plot | plot | plot |
| GPCP 1979-2009 | DJF | JJA | ANN | |
| PRECT * | Precipitation rate | plot | plot | plot |
| PRECT TROP | Tropical precipitation rate | plot | plot | plot |
| CMAP 1979-1998 | DJF | JJA | ANN | |
| PRECT * | Precipitation rate | plot | plot | plot |
| PRECT TROP | Tropical precipitation rate | plot | plot | plot |
| PREC/L (CMAP) 1948-2001 | DJF | JJA | ANN | |
| PRECT_LAND | Precipitation rate (land) | plot | plot | plot |
| SSM/I (Wentz) 1987-2000 | DJF | JJA | ANN | |
| PRECT * | Precipitation rate (ocean) | plot | plot | plot |
| PRECT TROP | Tropical precipitation rate (ocean) | plot | plot | plot |
| PREH2O * | Precipitable water (ocean) | plot | plot | plot |
| PREH2O TROP | Tropical precipitable water (ocean) | plot | plot | plot |
| TGCLDLWP | cloud liquid water (ocean) | plot | plot | plot |
| TGCLDLWP TROP | Tropical cloud liquid water (ocean) | plot | plot | plot |
| TRMM (3B43) 1998-2009 | DJF | JJA | ANN | |
| PRECT TROP | Tropical precipitation rate | plot | plot | plot |
| Large-Yeager 1984-2004 | DJF | JJA | ANN | |
| SHFLX | Surface sensible heat flux | plot | plot | plot |
| QFLX | Surface water flux | plot | plot | plot |
| FLNS | Surf Net LW flux | plot | plot | plot |
| FSNS | Surf Net SW flux | plot | plot | plot |
| SURF STRESS * | Surface wind stress (ocean) | plot | plot | plot |
| SURF STRESS TROP | Tropical surface wind stress (ocean) | plot | plot | plot |
| CERES-EBAF March 2000-Feb 2010 | DJF | JJA | ANN | |
| ALBEDO | TOA albedo | plot | plot | plot |
| ALBEDOC | TOA clearsky albedo | plot | plot | plot |
| FLUT * | TOA upward LW flux | plot | plot | plot |
| FLUTC | TOA clearsky upward LW flux | plot | plot | plot |
| FSNTOA * | TOA net SW flux | plot | plot | plot |
| FSNTOAC | TOA clearsky net SW flux | plot | plot | plot |
| LWCF * | TOA longwave cloud forcing | plot | plot | plot |
| SWCF * | TOA shortwave cloud forcing | plot | plot | plot |
| SWCF TROP | Tropical TOA SW cloud forcing | plot | plot | plot |
| CERES 2000-2003 | DJF | JJA | ANN | |
| ALBEDO | TOA albedo | plot | plot | plot |
| ALBEDOC | TOA clearsky albedo | plot | plot | plot |
| FLUT * | TOA upward LW flux | plot | plot | plot |
| FLUTC | TOA clearsky upward LW flux | plot | plot | plot |
| FSNTOA * | TOA net SW flux | plot | plot | plot |
| FSNTOAC | TOA clearsky net SW flux | plot | plot | plot |
| LWCF * | TOA longwave cloud forcing | plot | plot | plot |
| SWCF * | TOA shortwave cloud forcing | plot | plot | plot |
| SWCF TROP | Tropical TOA SW cloud forcing | plot | plot | plot |
| ERBE Feb1985-Apr1989 | DJF | JJA | ANN | |
| FLUT * | TOA upward longwave flux | plot | plot | plot |
| FLUTC | TOA clearsky upward longwave flux | plot | plot | plot |
| FSNTOA * | TOA net shortwave flux | plot | plot | plot |
| FSNTOAC | TOA clearsky net shortwave flux | plot | plot | plot |
| LWCF * | TOA longwave cloud forcing | plot | plot | plot |
| SWCF * | TOA shortwave cloud forcing | plot | plot | plot |
| SWCF TROP | Tropical TOA SW cloud forcing | plot | plot | plot |
| ISCCP FD Jul1983-Dec2000 | DJF | JJA | ANN | |
| FLDS | Surf LW downwelling flux | plot | plot | plot |
| FLDSC | Clearsky Surf LW downwelling flux | plot | plot | plot |
| FSDS | Surf SW downwelling flux | plot | plot | plot |
| FSDSC | Clearsky Surf SW downwelling flux | plot | plot | plot |
| FLNS | Surf Net LW flux | plot | plot | plot |
| FLNSC | Clearsky Surf Net LW flux | plot | plot | plot |
| FSNS | Surf Net SW flux | plot | plot | plot |
| FSNSC | Clearsky Surf Net SW flux | plot | plot | plot |
| LWCFSRF | Surf LW cloud forcing | plot | plot | plot |
| SWCFSRF | Surf SW cloud forcing | plot | plot | plot |
| ISCCP D2 1983-2001 | DJF | JJA | ANN | |
| CLDHGH (IR clouds) | High cloud amount | plot | plot | plot |
| CLDHGH (VIS/IR/NIR clouds) | High cloud amount | plot | plot | plot |
| CLDLOW (IR clouds) | Low cloud amount | plot | plot | plot |
| CLDLOW (VIS/IR/NIR clouds) | Low cloud amount | plot | plot | plot |
| CLDMED (IR clouds) | Mid cloud amount | plot | plot | plot |
| CLDMED (VIS/IR/NIR clouds) | Mid cloud amount | plot | plot | plot |
| CLDTOT (IR clouds) * | Total cloud amount | plot | plot | plot |
| CLDTOT (VIS/IR/NIR clouds) * | Total cloud amount | plot | plot | plot |
| ISCCP D1 Daytime Jul1983-Sep2001 | DJF | JJA | ANN | |
| MEANPTOP | Mean cloud top pressure | plot | plot | plot |
| MEANTTOP | Mean cloud top temperature | plot | plot | plot |
| MEANTAU | Mean cloud optical thickness | plot | plot | plot |
| TCLDAREA | Total cloud area | plot | plot | plot |
| Warren Cloud Surface OBS | DJF | JJA | ANN | |
| CLDLOW | Low cloud amount | plot | plot | plot |
| CLDTOT * | Total cloud amount | plot | plot | plot |
| CLOUDSAT (Radar+Lidar) Sep2006-Dec2010 | DJF | JJA | ANN | |
| CLDTOT * | Total cloud amount | plot | plot | plot |
| CLDLOW | Low cloud amount | plot | plot | plot |
| CLDMED | Medium cloud amount | plot | plot | plot |
| CLDHGH | High cloud amount | plot | plot | plot |
| CFMIP Observation Simulator Package (COSP) Primary Diagnostics | ||||
| CALIPSO GOCCP 2007-2010 | DJF | JJA | ANN | |
| CLDTOT_CAL | Total cloud amount | plot | plot | plot |
| CLDLOW_CAL | Low-level cloud amount | plot | plot | plot |
| CLDMED_CAL | Mid-level cloud amount | plot | plot | plot |
| CLDHGH_CAL | High-level cloud amount | plot | plot | plot |
| ISCCP-COSP From D1 Daytime Jul1983-Sep2008 | DJF | JJA | ANN | |
| CLDTOT_ISCCPCOSP | Total cloud amount (tau > 0.3) | plot | plot | plot |
| CLDTHICK_ISCCPCOSP | Optically thick cloud amount (tau > 23.0) | plot | plot | plot |
| MISR L3 CTH-OD V5 Mar2000-Nov2009 | DJF | JJA | ANN | |
| CLDTOT_MISR | Total cloud amount (tau > 0.3) | plot | plot | plot |
| CLDTHICK_MISR | Optically thick cloud amount (tau > 23.0) | plot | plot | plot |
| MODIS-COSP 2003-2010 | DJF | JJA | ANN | |
| CLDTOT_MODIS | Total cloud amount (tau > 0.3) | plot | plot | plot |
| CLDTHICK_MODIS | Optically thick cloud amount (tau > 23.0) | plot | plot | plot |
| Additional COSP Diagnostics | ||||
| CALIPSO GOCCP 2007-2010 | DJF | JJA | ANN | |
| CLDTOT_CAL | Total cloud amount | plot | plot | plot |
| CLDLOW_CAL | Low-level cloud amount | plot | plot | plot |
| CLDMED_CAL | Mid-level cloud amount | plot | plot | plot |
| CLDHGH_CAL | High-level cloud amount | plot | plot | plot |
| CLOUDSAT-COSP From Level 2 GEOPROF Jun2006-Nov2010 | DJF | JJA | ANN | |
| CLDTOT_CS2 | Total cloud amount | plot | plot | plot |
| ISCCP-COSP From D1 Daytime Jul1983-Sep2008 | DJF | JJA | ANN | |
| CLDTOT_ISCCPCOSP | Total cloud amount (tau > 0.3) | plot | plot | plot |
| CLDLOW_ISCCPCOSP | Low-topped cloud amount (tau > 0.3) | plot | plot | plot |
| CLDMED_ISCCPCOSP | Mid-topped cloud amount (tau > 0.3) | plot | plot | plot |
| CLDHGH_ISCCPCOSP | High-topped cloud amount (tau > 0.3) | plot | plot | plot |
| CLDTHICK_ISCCPCOSP | Optically thick cloud amount (tau > 23.0) | plot | plot | plot |
| MEANPTOP_ISCCPCOSP | Mean cloud top pressure | plot | plot | plot |
| MEANCLDALB_ISCCPCOSP | Mean cloud albedo | plot | plot | plot |
| MISR L3 CTH-OD V5 Mar2000-Nov2009 | DJF | JJA | ANN | |
| CLDTOT_MISR | Total cloud amount (tau > 0.3) | plot | plot | plot |
| CLDLOW_MISR | Low-topped cloud amount (tau > 0.3) | plot | plot | plot |
| CLDMED_MISR | Mid-topped cloud amount (tau > 0.3) | plot | plot | plot |
| CLDHGH_MISR | High-topped cloud amount (tau > 0.3) | plot | plot | plot |
| CLDTHICK_MISR | Optically thick cloud amount (tau > 23.0) | plot | plot | plot |
| MODIS-COSP 2003-2010 | DJF | JJA | ANN | |
| CLDTOT_MODIS | Total cloud amount (tau > 0.3) | plot | plot | plot |
| CLDLOW_MODIS | Low-topped cloud amount (tau > 0.3) | plot | plot | plot |
| CLDMED_MODIS | Mid-topped cloud amount (tau > 0.3) | plot | plot | plot |
| CLDHGH_MODIS | High-topped cloud amount (tau > 0.3) | plot | plot | plot |
| CLDTHICK_MODIS | Optically thick cloud amount (tau > 23.0) | plot | plot | plot |
| CLIMODIS | Total ice cloud amount | plot | plot | plot |
| CLWMODIS | Total liquid cloud amount | plot | plot | plot |
| IWPMODIS | Mean ice water path | plot | plot | plot |
| LWPMODIS | Mean liquid water path | plot | plot | plot |
| PCTMODIS | Mean cloud top pressure | plot | plot | plot |
| REFFCLIMODIS | Mean effective radius (ice clouds) | plot | plot | plot |
| REFFCLWMODIS | Mean effective radius (liquid clouds) | plot | plot | plot |
| TAUILOGMODIS | Log-weighted mean optical thickness (ice clouds) | plot | plot | plot |
| TAUWLOGMODIS | Log-weighted mean optical thickness (liquid clouds) | plot | plot | plot |
| TAUTLOGMODIS | Log-weighted mean optical thickness (all clouds) | plot | plot | plot |
| TAUIMODIS | Mean optical thickness (ice clouds) | plot | plot | plot |
| TAUWMODIS | Mean optical thickness (liquid clouds) | plot | plot | plot |
| TAUTMODIS | Mean optical thickness (all clouds) | plot | plot | plot |


--- layout: page title: Safer Streets for East Long Island City #centered title at top of page #subtitle: Urban Planner, Freelance Cartographer, Transit and Safe Streets Advocate #use-site-title: true ---
I developed a set of recommendations that address the traffic and pedestrian safety issues in the area surrounding LaGuardia Community College. To create the graphic I imported DoITT planimetric street geometries into AutoCAD before drawing all of the missing elements and road markings, which I measured and recorded in a survey of the area.


Sign Up
Enter Code
Send
Resend Code
Sign Up Now
I have an account? -
Sign In Now
Copyright 2020
Gambolthemes
. All rights reserved


3 references to PeekNextChar
Microsoft.PowerShell.Commands.Utility (3)
commands\utility\CsvCommands.cs (3)
1462
if (
PeekNextChar
('#'))
1521
if (
PeekNextChar
('"'))
1648
if (
PeekNextChar
('\n'))


Prev
Next
Merry Christmallax
Skrollr in action
View Project
Happy 25th Birthday
Game Boy
SuperScrollorama in action
View Project
SVG Christmas
Greensock in action
View Project


Hover over me.
This text is shown by hovering on the above div
Click the button to see the counter increase.
Close the browser tab (or window), and try again, and the counter is reset.
Please select your age:
This is a p element.
DOM element
Hover over me.
This text is shown by hovering on the above div


channel.d5242a __
channel.b56ea4 __
octree __
channel.2825c6 __
channel.c49370 __
channel.569758 __
channel.2c342d __
binary __
channel.709ba9 __
channel.fdfcfc __


Elder Cronos:
No reason in particular, huh? Could it possibly be that the stupidest person in the world is in my presence? What are you thinking? Or are you thinking at all?
"You seem bitter. Could you please just give me the test?"
"Please stop babbling and give me the test."


Interpolation markup with embedded expressions is used by AngularJS to provide data-binding to text nodes and attribute values.
An example of interpolation is shown below:
Hello {{username}}!
During the compilation process the compiler uses the $interpolate service to see if text nodes and element attributes contain interpolation markup with embedded expressions.
If that is the case, the compiler adds an interpolateDirective to the node and registers watches on the computed interpolation function, which will update the corresponding text nodes or attribute values as part of the normal digest cycle.
Note that the interpolateDirective has a priority of 100 and sets up the watch in the preLink function.
If the interpolated value is not a String
, it is computed as follows:
undefined
and null
are converted to ''
Number
, Date
or Array
, $interpolate looks for
a custom toString()
function on the object, and uses that. Custom means that
myObject.toString !== Object.prototype.toString
.JSON.stringify
is used.Attributes such as disabled
are called boolean
attributes, because their presence means true
and
their absence means false
. We cannot use normal attribute bindings with them, because the HTML
specification does not require browsers to preserve the values of boolean attributes. This means that
if we put an AngularJS interpolation expression into such an attribute then the binding information
would be lost, because the browser ignores the attribute value.
In the following example, the interpolation information would be ignored and the browser would simply interpret the attribute as present, meaning that the button would always be disabled.
Disabled: <input type="checkbox" ng-model="isDisabled" />
<button disabled="{{isDisabled}}">Disabled</button>
For this reason, AngularJS provides special ng
-prefixed directives for the following boolean attributes:
disabled
, required
, selected
,
checked
, readOnly
, and open
.
These directives take an expression inside the attribute, and set the corresponding boolean attribute to true when the expression evaluates to truthy.
Disabled: <input type="checkbox" ng-model="isDisabled" />
<button ng-disabled="isDisabled">Disabled</button>
ngAttr
for binding to arbitrary attributesWeb browsers are sometimes picky about what values they consider valid for attributes.
For example, considering this template:
<svg>
<circle cx="{{cx}}"></circle>
</svg>
We would expect AngularJS to be able to bind to this, but when we check the console we see
something like Error: Invalid value for attribute cx="{{cx}}"
. Because of the SVG DOM API's
restrictions, you cannot simply write cx="{{cx}}"
.
With ng-attr-cx
you can work around this problem.
If an attribute with a binding is prefixed with the ngAttr
prefix (denormalized as ng-attr-
)
then during the binding it will be applied to the corresponding unprefixed attribute. This allows
you to bind to attributes that would otherwise be eagerly processed by browsers
(e.g. an SVG element's circle[cx]
attributes). When using ngAttr
, the allOrNothing
flag of
$interpolate is used, so if any expression in the interpolated string
results in undefined
, the attribute is removed and not added to the element.
For example, we could fix the example above by instead writing:
<svg>
<circle ng-attr-cx="{{cx}}"></circle>
</svg>
If one wants to modify a camelcased attribute (SVG elements have valid camelcased attributes),
such as viewBox
on the svg
element, one can use underscores to denote that the attribute to bind
to is naturally camelcased.
For example, to bind to viewBox
, we can write:
<svg ng-attr-view_box="{{viewBox}}">
</svg>
Other attributes may also not work as expected when they contain interpolation markup, and
can be used with ngAttr
instead. The following is a list of known problematic attributes:
<select>
elements (see issue 1619)<textarea>
in Internet Explorer 10/11 (see issue 5025)<button>
in Internet Explorer 11 (see issue 14117)<progress>
in Internet Explorer = 11 (see issue 7218)You should avoid dynamically changing the content of an interpolated string (e.g. attribute value or text node). Your changes are likely to be overwritten, when the original string gets evaluated. This restriction applies to both directly changing the content via JavaScript or indirectly using a directive.
For example, you should not use interpolation in the value of the style
attribute (e.g.
style="color: {{ 'orange' }}; font-weight: {{ 'bold' }};"
) and at the same time use a
directive that changes the content of that attribute, such as ngStyle
.

You should instead delegate the computation of complex expressions to the scope, like this:

function getForm(index) {
return $scope['form' + index];
}
You can also access the scope
with this
in your templates:


CUBRID node.js demo (1)
Employees data management
Create new employee
Name:
Salary:
List of employees
Status:
Options:
Simulate 10 sec. wait response time for queries
https://github.com/CUBRID/node-cubrid
www.cubrid.org


Almost 900kg of explosives used to demolish Bank of Lisbon building
by Iavan PijoosAlmost 900kg of explosives were used to demolish the Bank of Lisbon building in the Johannesburg CBD on Sunday, an exercise that has cost the city R90m to date.
Gauteng’s MEC for infrastructure development, Tasneem Motara, said she was pleased with the successful implosion of the building.
“I must admit, I was a bit nervous when the sirens went off, but the demolition has gone successfully. There has been no damage to property and no-one has been hurt,” Motara told reporters in Johannesburg.
A siren wailed just after 9.10am on Sunday, warning those in the area that the building, which claimed the lives of three firefighters in a blaze past year, was about to be demolished.
The building went down in seconds.
The 31-storey building previously housed the Gauteng departments of health and human settlements. It was declared unsafe after the deadly fire.
Motara said 894kg of explosions were used to implode the building.
The building, which was 108 metres high, was the second highest building to be demolished by Jet Demolitions. The highest building the company had demolished was a building in Frankfurt, Germany, in 2014 that was 140 metres high.
She said the department budgeted R140m for the demolition of the building and had spent R90m to date.
The building would be rebuilt and form part of the Kopanong precinct.
“The experts said that this was one of the most difficult demolitions they had to work on. This brings us to an end of an era.”
She said the clearing of the site and the roads was already under way.
“We have also been in contact with the families of the deceased. We will have discussions with the families to find the best way to honour them.”