This page tracks the new paper links made to my list of Computer Graphics International 2003 papers.
Page maintained by Ke-Sen Huang. If you have additions or changes, send an e-mail.


Build a continuous big data messaging system with Kafka
credits : Sunil Patil, Software Engineer, JavaWorld | APR 25, 2016
When the big data movement started it was mostly focused on batch processing. Distributed data storage and querying tools like MapReduce, Hive, and Pig were all designed to process data in batches rather than continuously. Businesses would run multiple jobs every night to extract data from a database, then analyze, transform, and eventually store the data. More recently enterprises have discovered the power of analyzing and processing data and events as they happen, not just once every few hours. Most traditional messaging systems don’t scale up to handle big data in realtime, however. So engineers at LinkedIn built and open-sourced Kafka: a distributed messaging framework that meets the demands of big data by scaling on commodity hardware.
Over the past few years, Kafka has emerged to solve a variety of use cases. In the simplest case, it could be a simple buffer for storing application logs. Combined with a technology like Spark Streaming, it can be used to track data changes and take action on that data before saving it to a final destination. Kafka’s predictive mode makes it a powerful tool for detecting fraud, such as checking the validity of a credit card transaction when it happens, and not waiting for batch processing hours later.
This two-part tutorial introduces Kafka, starting with how to install and run it in your development environment. You’ll get an overview of Kafka’s architecture, followed by an introduction to developing an out-of-the-box Kafka messaging system. Finally, you’ll build a custom producer/consumer application that sends and consumes messages via a Kafka server. In the second half of the tutorial you’ll learn how to partition and group messages, and how to control which messages a Kafka consumer will consume.
Apache Kafka is messaging system built to scale for big data. Similar to Apache ActiveMQ or RabbitMq, Kafka enables applications built on different platforms to communicate via asynchronous message passing. But Kafka differs from these more traditional messaging systems in key ways:
Before we explore Kafka’s architecture, you should know its basic terminology:
Figure 1: Kafka’s architecture Figure 1. Architecture of a Kafka message system
Kafka’s architecture is very simple, which can result in better performance and throughput in some systems. Every topic in Kafka is like a simple log file. When a producer publishes a message, the Kafka server appends it to the end of the log file for its given topic. The server also assigns an offset, which is a number used to permanently identify each message. As the number of messages grows, the value of each offset increases; for example if the producer publishes three messages the first one might get an offset of 1, the second an offset of 2, and the third an offset of 3.
When the Kafka consumer first starts, it will send a pull request to the server, asking to retrieve any messages for a particular topic with an offset value higher than 0. The server will check the log file for that topic and return the three new messages. The consumer will process the messages, then send a request for messages with an offset higher than 3, and so on.
In Kafka, the client is responsible for remembering the offset count and retrieving messages.The Kafka server doesn’t track or manage message consumption. By default, a Kafka server will keep a message for seven days. A background thread in the server checks and deletes messages that are seven days or older. A consumer can access messages as long as they are on the server. It can read a message multiple times, and even read messages in reverse order of receipt. But if the consumer fails to retrieve the message before the seven days are up, it will miss that message.
Production use by LinkedIn and other enterprises has shown that with proper configuration Kafka is capable of processing hundreds of gigabytes of data daily. In 2011, three LinkedIn engineers used benchmark testing to demonstrate that Kafka could achieve much higher throughput than ActiveMQ and RabbitMQ.
We’ll build a custom application in this tutorial, but let’s start by installing and testing a Kafka instance with an out-of-the-box producer and consumer.
Visit the Kafka download page to install the most recent version. Extract the binaries into a software/kafka folder. Change your current directory to point to the new folder.
wget http://mirrors.ircam.fr/pub/apache/kafka/<IP_ADDRESS>/kafka_2.11-<IP_ADDRESS>.tgz
tar -xzf kafka_2.11-<IP_ADDRESS>.tgz
cd kafka_2.11-<IP_ADDRESS>
start a ZooKeeper server if you don’t already have one.
bin/zookeeper-server-start.sh config/zookeeper.properties
Now start the Kafka server:
bin/kafka-server-start.sh config/server.properties
Create a test topic that you can use for testing:
bin/kafka-topics.sh --create --zookeeper localhost:2181 \
--replication-factor 1 --partitions 1 --topic javaworld.
Start a simple console consumer that can consume messages published to a given topic, such as javaworld:
bin/kafka-console-consumer.sh --zookeeper localhost:2181 \
--topic javaworld --from-beginning.
Start up a simple producer console that can publish messages to the test topic:
bin/kafka-console-producer.sh --broker-list localhost:9092 \
--topic javaworld.
Try typing one or two messages into the producer console. Your messages should show in the consumer console.
You’ve seen how Kafka works out of the box. Next, let’s develop a custom producer/consumer application. The producer will retrieve user input from the console and send each new line as a message to a Kafka server. The consumer will retrieve messages for a given topic and print them to the console. The producer and consumer components in this case are your own implementations of kafka-console-producer.sh and kafka-console-consumer.sh.
Let’s start by creating a Producer.java class. This client class contains logic to read user input from the console and send that input as a message to the Kafka server.
We configure the producer by creating an object from the java.util.Properties class and setting its properties. The ProducerConfig class defines all the different properties available, but Kafka’s default values are sufficient for most uses. For the default config we only need to set three mandatory properties:
BOOTSTRAP_SERVERS_CONFIG (bootstrap.servers) sets a list of host:port pairs used for establishing the initial connections to the Kakfa cluster in the host1:port1,host2:port2,... format. Even if we have more than one broker in our Kafka cluster, we only need to specify the value of the first broker’s host:port. The Kafka client will use this value to make a discover call on the broker, which will return a list of all the brokers in the cluster. It’s a good idea to specify more than one broker in the BOOTSTRAP_SERVERS_CONFIG, so that if that first broker is down the client will be able to try other brokers.
The Kafka server expects messages in byte[] key, byte[] value format. Rather than converting every key and value, Kafka’s client-side library permits us to use friendlier types like String and int for sending messages. The library will convert these to the appropriate type. For example, the sample app doesn’t have a message-specific key, so we’ll use null for the key. For the value we’ll use a String, which is the data entered by the user on the console.
To configure the message key, we set a value of KEY_SERIALIZER_CLASS_CONFIG on the org.apache.kafka.common.serialization.ByteArraySerializer. This works because null doesn’t need to be converted into byte[]. For the message value, we set VALUE_SERIALIZER_CLASS_CONFIG on the org.apache.kafka.common.serialization.StringSerializer, because that class knows how to convert a String into a byte[].
Custom key/value objects Similar to StringSerializer, Kafka provides serializers for other primitives such as int and long. In order to use a custom object for our key or value, we would need to create a class implementing org.apache.kafka.common.serialization.Serializer. We could then add logic to serialize the class into byte[]. We would also have to use a corresponding deserializer in our consumer code.
After filling the Properties class with the necessary configuration properties, we can use it to create an object of KafkaProducer. Whenever we want to send a message to the Kafka server after that, we’ll create an object of ProducerRecord and call the KafkaProducer’s send() method with that record to send the message. The ProducerRecord takes two parameters: the name of the topic to which message should be published, and the actual message. Don’t forget to call the Producer.close() method when you’re done using the producer:
Listing 1. KafkaProducer
public class Producer {
private static Scanner in;
public static void main(String[] argv)throws Exception {
if (argv.length != 1) {
System.err.println("Please specify 1 parameters ");
System.exit(-1);
}
String topicName = argv[0];
in = new Scanner(System.in);
System.out.println("Enter message(type exit to quit)");
//Configure the Producer
Properties configProperties = new Properties();
configProperties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"localhost:9092");
configProperties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.ByteArraySerializer");
configProperties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.StringSerializer");
org.apache.kafka.clients.producer.Producer producer = new KafkaProducer<String, String>(configProperties);
String line = in.nextLine();
while(!line.equals("exit")) {
ProducerRecord<String, String> rec = new ProducerRecord<String, String>(topicName, line);
producer.send(rec);
line = in.nextLine();
}
in.close();
producer.close();
}
}
Next we’ll create a simple consumer that subscribes to a topic. Whenever a new message is published to the topic, it will read that message and print it to the console. The consumer code is quite similar to the producer code. We start by creating an object of java.util.Properties, setting its consumer-specific properties, and then using it to create a new object of KafkaConsumer. The ConsumerConfig class defines all the properties that we can set. There are just four mandatory properties:
Just as we did for the producer class, we’ll use BOOTSTRAP_SERVERS_CONFIG to configure the host/port pairs for the consumer class. This config lets us establish the initial connections to the Kakfa cluster in the host1:port1,host2:port2,... format.
As I previously noted, the Kafka server expects messages in byte[] key and byte[] value formats, and has its own implementation for serializing different types into byte[]. Just as we did with the producer, on the consumer side we’ll have to use a custom deserializer to convert byte[] back into the appropriate type.
In the case of the example application, we know the producer is using ByteArraySerializer for the key and StringSerializer for the value. On the client side we therefore need to use org.apache.kafka.common.serialization.ByteArrayDeserializer for the key and org.apache.kafka.common.serialization.StringDeserializer for the value. Setting those classes as values for KEY_DESERIALIZER_CLASS_CONFIG and VALUE_DESERIALIZER_CLASS_CONFIG will enable the consumer to deserialize byte[] encoded types sent by the producer.
Finally, we need to set the value of the GROUP_ID_CONFIG. This should be a group name in string format. I’ll explain more about this config in a minute. For now, just look at the Kafka consumer with the four mandatory properties set:
Listing 2. KafkaConsumer
public class Consumer {
private static Scanner in;
private static boolean stop = false;
public static void main(String[] argv)throws Exception{
if (argv.length != 2) {
System.err.printf("Usage: %s <topicName> <groupId>\n",
Consumer.class.getSimpleName());
System.exit(-1);
}
in = new Scanner(System.in);
String topicName = argv[0];
String groupId = argv[1];
ConsumerThread consumerRunnable = new ConsumerThread(topicName,groupId);
consumerRunnable.start();
String line = "";
while (!line.equals("exit")) {
line = in.next();
}
consumerRunnable.getKafkaConsumer().wakeup();
System.out.println("Stopping consumer .....");
consumerRunnable.join();
}
private static class ConsumerThread extends Thread{
private String topicName;
private String groupId;
private KafkaConsumer<String,String> kafkaConsumer;
public ConsumerThread(String topicName, String groupId){
this.topicName = topicName;
this.groupId = groupId;
}
public void run() {
Properties configProperties = new Properties();
configProperties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
configProperties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");
configProperties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");
configProperties.put(ConsumerConfig.GROUP_ID_CONFIG, groupId);
configProperties.put(ConsumerConfig.CLIENT_ID_CONFIG, "simple");
//Figure out where to start processing messages from
kafkaConsumer = new KafkaConsumer<String, String>(configProperties);
kafkaConsumer.subscribe(Arrays.asList(topicName));
//Start processing messages
try {
while (true) {
ConsumerRecords<String, String> records = kafkaConsumer.poll(100);
for (ConsumerRecord<String, String> record : records)
System.out.println(record.value());
}
}catch(WakeupException ex){
System.out.println("Exception caught " + ex.getMessage());
}finally{
kafkaConsumer.close();
System.out.println("After closing KafkaConsumer");
}
}
public KafkaConsumer<String,String> getKafkaConsumer(){
return this.kafkaConsumer;
}
}
}
Writing the consumer code in Listing 2 in two parts ensures that we close the Consumer object before exiting. I’ll describe each class in turn. First, ConsumerThread is an inner class that takes a topic name and group name as its arguments. In the run() method it creates a KafkaConsumer object, with appropriate properties. It subscribes to the topic that was passed as an argument in the constructor, by calling the kafkaConsumer.subscribe() method, then polls the Kafka server every 100 milliseconds to check if there are any new messages in the topic. It will iterate through the list of any new messages and print them to the console.
In the Consumer class we create a new object of ConsumerThread and start it in a different thread. The ConsumerThead starts an infinite loop and keeps polling the topic for new messages. Meanwhile in the Consumer class, the main thread waits for a user to enter exit on the console. Once a user enters exit, it calls the KafkaConsumer.wakeup() method, causing the KafkaConsumer to stop polling for new messages and throw a WakeupException. We can then close the KafkaConsumer gracefully, by calling kafkaConsumer’s close() method.
To test this application you can run the code in Listings 1 and 2 from your IDE, or you can follow these steps:
git clone https://github.com/Hurence/logisland-flow-analytics-ml-jobs.git
Compile the code and create a fat JAR with the command:
mvn clean compile assembly:single
Start the consumer:
java -cp target/logisland-flow-analytics-ml-jobs-0.10.1-jar-with-dependencies.jar \
com.hurence.logisland.kafka.simple.Consumer plik group1
Start the producer:
java -cp target/logisland-flow-analytics-ml-jobs-0.10.1-jar-with-dependencies.jar \
com.hurence.logisland.kafka.simple.Producer plik
Enter a message in the producer console and check to see whether that message appears in the consumer. Try a few messages. Type exit in the consumer and producer consoles to close them.
In the first half of this tutorial you’ve learned the basics of big data messaging with Kafka, including a conceptual overview of Kafka, setup instructions, and how to configure a producer/consumer messaging system with Kafka.
As you’ve seen, Kafka’s architecture is both simple and efficient, designed for performance and throughput.
you’ll learn how to use partitions to distribute load and scale your application horizontally, handling up to millions of messages per day. You’ll also learn how Kafka uses message offsets to track and manage complex message processing, and how to protect your Kafka messaging system against failure should a consumer go down. We’ll develop the example application from Part 1 for both publish-subscribe and point-to-point use cases.
Topics in Kafka can be subdivided into partitions. For example, while creating a topic named Demo, you might configure it to have three partitions. The server would create three log files, one for each of the demo partitions. When a producer published a message to the topic, it would assign a partition ID for that message. The server would then append the message to the log file for that partition only.
If you then started two consumers, the server might assign partitions 1 and 2 to the first consumer, and partition 3 to the second consumer. Each consumer would read only from its assigned partitions. You can see the Demo topic configured for three partitions in Figure 1.
A partitioned topic in Apache Kafka Figure 1. A partitioned topic in Apache Kafka To expand the scenario, imagine a Kafka cluster with two brokers, housed in two machines. When you partitioned the demo topic, you would configure it to have two partitions and two replicas. For this type of configuration, the Kafka server would assign the two partitions to the two brokers in your cluster. Each broker would be the leader for one of the partitions.
When a producer published a message, it would go to the partition leader. The leader would take the message and append it to the log file on the local machine. The second broker would passively replicate that commit log to its own machine. If the partition leader went down, the second broker would become the new leader and start serving client requests. In the same way, when a consumer sent a request to a partition, that request would go first to the partition leader, which would return the requested messages.
Consider the benefits of partitioning a Kafka-based messaging system:
The producer is responsible for deciding what partition a message will go to. The producer has two options for controlling this assignment:
For the simple producer/consumer example in Part 1, we used a DefaultPartitioner. Now we’ll try creating a custom partitioner instead. For this example, let’s assume that we have a retail site that consumers can use to order products anywhere in the world. Based on usage, we know that most consumers are in either the United States or India. We want to partition our application to send orders from the US or India to their own respective consumers, while orders from anywhere else will go to a third consumer.
To start, we’ll create a CountryPartitioner that implements the org.apache.kafka.clients.producer.Partitioner interface. We must implement the following methods:
Kafka will call configure() when we initialize the Partitioner class, with a Map of configuration properties. This method initializes functions specific to the application’s business logic, such as connecting to a database. In this case we want a fairly generic partitioner that takes countryName as a property. We can then use configProperties.put("partitions.0","USA") to map the flow of messages to partitions. In the future we can use this format to change which countries get their own partition. The Producer API calls partition() once for every message. In this case we’ll use it to read the message and parse the name of the country from the message. If the name of the country is in the countryToPartitionMap, it will return partitionId stored in the Map. If not, it will hash the value of the country and use it to calculate which partition it should go to. We call close() to shut down the partitioner. Using this method ensures that any resources acquired during initialization are cleaned up during shutdown. Note that when Kafka calls configure(), the Kafka producer will pass all the properties that we’ve configured for the producer to the Partitioner class. It is essential that we read only those properties that start with partitions., parse them to get the partitionId, and store the ID in countryToPartitionMap.
Below is our custom implementation of the Partitioner interface.
Listing 1. CountryPartitioner
public class CountryPartitioner implements Partitioner {
private static Map<String,Integer> countryToPartitionMap;
public void configure(Map<String, ?> configs) {
System.out.println("Inside CountryPartitioner.configure " + configs);
countryToPartitionMap = new HashMap<String, Integer>();
for(Map.Entry<String,?> entry: configs.entrySet()){
if(entry.getKey().startsWith("partitions.")){
String keyName = entry.getKey();
String value = (String)entry.getValue();
System.out.println( keyName.substring(11));
int paritionId = Integer.parseInt(keyName.substring(11));
countryToPartitionMap.put(value,paritionId);
}
}
}
public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes,
Cluster cluster) {
List partitions = cluster.availablePartitionsForTopic(topic);
String valueStr = (String)value;
String countryName = ((String) value).split(":")[0];
if(countryToPartitionMap.containsKey(countryName)){
//If the country is mapped to particular partition return it
return countryToPartitionMap.get(countryName);
}else {
//If no country is mapped to particular partition distribute between remaining partitions
int noOfPartitions = cluster.topics().size();
return value.hashCode()%noOfPartitions + countryToPartitionMap.size() ;
}
}
public void close() {}
}
The Producer class in Listing 2 (below) is very similar to our simple producer from Part 1, with two changes marked in bold:
We set a config property with a key equal to the value of ProducerConfig.PARTITIONER_CLASS_CONFIG, which matches the fully qualified name of our CountryPartitioner class. We also set countryName to partitionId, thus mapping the properties that we want to pass to CountryPartitioner. We pass an instance of a class implementing the org.apache.kafka.clients.producer.Callback interface as a second argument to the producer.send() method. The Kafka client will call its onCompletion() method once a message is successfully published, attaching a RecordMetadata object. We’ll be able to use this object to find out which partition a message was sent to, as well as the offset assigned to the published message.
Listing 2. A partitioned producer
public class Producer {
private static Scanner in;
public static void main(String[] argv)throws Exception {
if (argv.length != 1) {
System.err.println("Please specify 1 parameters ");
System.exit(-1);
}
String topicName = argv[0];
in = new Scanner(System.in);
System.out.println("Enter message(type exit to quit)");
//Configure the Producer
Properties configProperties = new Properties();
configProperties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"localhost:9092");
configProperties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.ByteArraySerializer");
configProperties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.StringSerializer");
configProperties.put(ProducerConfig.PARTITIONER_CLASS_CONFIG,CountryPartitioner.class.getCanonicalName());
configProperties.put("partition.1","USA");
configProperties.put("partition.2","India");
org.apache.kafka.clients.producer.Producer producer = new KafkaProducer(configProperties);
String line = in.nextLine();
while(!line.equals("exit")) {
ProducerRecord<String, String> rec = new ProducerRecord<String, String>(topicName, null, line);
producer.send(rec, new Callback() {
public void onCompletion(RecordMetadata metadata, Exception exception) {
System.out.println("Message sent to topic ->" + metadata.topic()+ " ,parition->" + metadata.partition() +" stored at offset->" + metadata.offset());
;
}
});
line = in.nextLine();
}
in.close();
producer.close();
}
}
The Kafka server guarantees that a partition is assigned to only one consumer, thereby guaranteeing the order of message consumption. You can manually assign a partition or have it assigned automatically.
If your business logic demands more control, then you’ll need to manually assign partitions. In this case you would use KafkaConsumer.assign(<listOfPartitions>) to pass a list of partitions that each consumer was interested in to the Kafka server.
Having partitions assigned automatically is the default and most common choice. In this case, the Kafka server will assign a partition to each consumer, and will reassign partitions to scale for new consumers.
Say you’re creating a new topic with three partitions. When you start the first consumer for the new topic, Kafka will assign all three partitions to the same consumer. If you then start a second consumer, Kafka will reassign all the partitions, assigning one partition to the first consumer and the remaining two partitions to the second consumer. If you add a third consumer, Kafka will reassign the partitions again, so that each consumer is assigned a single partition. Finally, if you start fourth and fifth consumers, then three of the consumers will have an assigned partition, but the others won’t receive any messages. If one of the initial three partitions goes down, Kafka will use the same partitioning logic to reassign that consumer’s partition to one of the additional consumers.
We’ll use automatic assignment for the example application. Most of our consumer code will be the same as it was for the simple consumer seen in Part 1. The only difference is that we’ll pass an instance of ConsumerRebalanceListener as a second argument to our KafkaConsumer.subscribe() method. Kafka will call methods of this class every time it either assigns or revokes a partition to this consumer. We’ll override ConsumerRebalanceListener’s onPartitionsRevoked() and onPartitionsAssigned() methods and print the list of partitions that were assigned or revoked from this subscriber.
Listing 3. A partitioned consumer
private static class ConsumerThread extends Thread {
private String topicName;
private String groupId;
private KafkaConsumer<String, String> kafkaConsumer;
public ConsumerThread(String topicName, String groupId) {
this.topicName = topicName;
this.groupId = groupId;
}
public void run() {
Properties configProperties = new Properties();
configProperties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
configProperties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");
configProperties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");
configProperties.put(ConsumerConfig.GROUP_ID_CONFIG, groupId);
//Figure out where to start processing messages from
kafkaConsumer = new KafkaConsumer<String, String>(configProperties);
kafkaConsumer.subscribe(Arrays.asList(topicName), new ConsumerRebalanceListener() {
public void onPartitionsRevoked(Collection<TopicPartition> partitions) {
System.out.printf("%s topic-partitions are revoked from this consumer\n", Arrays.toString(partitions.toArray()));
}
public void onPartitionsAssigned(Collection<TopicPartition> partitions) {
System.out.printf("%s topic-partitions are assigned to this consumer\n", Arrays.toString(partitions.toArray()));
}
});
//Start processing messages
try {
while (true) {
ConsumerRecords<String, String> records = kafkaConsumer.poll(100);
for (ConsumerRecord<String, String> record : records)
System.out.println(record.value());
}
} catch (WakeupException ex) {
System.out.println("Exception caught " + ex.getMessage());
} finally {
kafkaConsumer.close();
System.out.println("After closing KafkaConsumer");
}
}
public KafkaConsumer<String, String> getKafkaConsumer() {
return this.kafkaConsumer;
}
}
We’re ready to run and test the current iteration of our producer/consumer application. As you’ve done previously, you can use the code in Listings 1 through 3, or download the complete source code on GitHub.
Compile and create a fat JAR by invoking:
mvn compile assembly:single
Create a topic named part-demo with three partitions and one replication factor:
$KAFKA_HOME/bin/kafka-topics.sh --create --zookeeper localhost:2181 \
--replication-factor 1 --partitions 3 --topic part-demo
Start a producer:
java -cp target/logisland-flow-analytics-ml-jobs-0.10.1-jar-with-dependencies.jar \
com.hurence.logisland.kafka.partition.Producer part-demo
Start three consumers, then watch the console to see how your partitions are assigned and revoked every time you start a new instance of the consumer:
java -cp target/logisland-flow-analytics-ml-jobs-0.10.1-jar-with-dependencies.jar \
com.hurence.logisland.kafka.partition.Consumer part-demo group1
Type some messages into your producer console and verify whether the messages are routed to the correct consumer:
USA: First order
India: First order
USA: Second order
France: First order
Being able to partition a single topic into multiple parts is one essential to Kafka’s scalability. Partitioning lets you scale your messaging infrastructure horizontally while also maintaining order within each partition.


The Garden
The rear garden is mostly lawned and surrounded by oak trees. The terrace is elevated and looks out over the garden.
The lounge opens via French doors onto a sun terrace, which is in the sun for the majority of the day.
There is also a second patio area at the end of the garden which is sunny until late evening.


And that iconic baby, Ann Turner Cook, just turned 93 on Wednesday.
"Happy birthday to the OG -- that's Original Gerber -- baby, Ann Turner Cook!" the company captioned a picture of her next to a jar with the classic logo.
The charcoal sketch of Cook's angelic face as a four-month-old has adorned jars of baby food for decades. In 1928, Gerber held an advertising campaign looking for the company's new face. Cook's neighbour submitted a drawing of her face for the contest and three years later, it became Gerber's official trademark.
The company had invited artists to submit different versions of Gerber babies as part of the campaign.
The neighbor, Dorothy Hope Smith, offered to add more details to the sketch if it was accepted. But when the executives at Gerber saw it, they wanted it as-is.
Gerber has expanded its business beyond food to include skin care, clothing and other children's products, but the face of the original Gerber baby remains plastered on most items.
Before the name behind the angelic face was revealed in 1978, popular guesses of the baby's identity included Humphrey Bogart, Elizabeth Taylor, Sen. Bob Dole and Jane Seymour.
Cook taught English in Florida and wrote mystery novels after her retirement.


Even if the controls might look a little daunting, they should be
fairly intuitive to use. Just play around and see what happens.
When you've made a nice design, you can either share it as a link,
or download it as an svg. If you want to use it as a desktop background, save
the svg-file and open the file with Inkscape
or One of these to convert
it to a png.
The Detail slider regulates how many times the pattern is
recursively repeated, where as the colors slider sets the number of colors used
to color the image. The generative function is explained a bit in the About
section. You can play around with it, using a and b as variables.
If you are curious about Penrose Tilings, wikipedia has a pretty
good Article about it. Outside of being pretty that have some curious
properties.
The pattern is generate by starting with two dart triangles combined to form a rhombe (the fat one of the Penrose rhombes). They are then recursively split
into smaller congruent triangles, as demonstrated here.
The 'Generator' function in the controls is a way to assign a color
to each triangle in the pattern. The position of each triangle can be described
as a series of numbers. For example a triangle with the position [1, 2, 3],
would mean that it is the third child of the second child of the root triangle.
The generator takes this position and either sums, multiplies or
concatenates the numbers modulus the amount of colors.
If you are enjoing this site I'd love to hear about it. You can
reach me on<EMAIL_ADDRESS>You are also
welcome to check out my photographies on www.ifany.org.
To construct this site I've used JQuery, as well as plugins for the color picker, svg creation and JQuery UI for the sliders.
Jonas Arnfred


Spring Boot Microservices Example
Addition Service
First number:
Second number
First number:
Second number


LAZY Isolate works!


JavaScript Promises
So what's a promise? The answer is pretty simple: A promise is an object which represents a value that's not available yet, but will be resolved in the future. Sounds weird? Trust me, this is good stuff. Give me 5, maybe 10 minutes (not more, I promise ) of your time and I'll tell you why! :)
What is a promise?
Yeah I know, I already told you what it is: an object and it represents a value. But what does that mean exactly?
Typically it represents an outcome of an async task like AJAX calls. A promise can be resolved or rejected. Resolved means, the task is done without any errors. Rejected means, that the task failed. By the time a promise is resolved or rejected, it will remain in this state forever.
Can you show me an example?
Sure i can! jQuery itself returns promises from it's AJAX methods:
var promise = $.get('/fancy/url');
So now we have a promise. But what can we do with it? Let me show you a bit more lines of code:
var promise = $.get('/fancy/url');
promise.done(function() {
// once the promise is resolved, this function will be called
});
promise.fail(function() {
// and this function will be called if the promise is rejected
});
promise.always(function() {
// regardless which state the promise has, this one will be called too!
});
So once you have your promise, you can attach as many callbacks as you like. There's also a shorthand for attaching all of these types of callbacks at once:
var promise = $.get('/fancy/url');
promise.then(
function() { }, // done
function() { }, // failed
function() { } // always
);
And how can I create my own promise?
That's simple too! In jQuery, promises begin with a Deferred. To create a Deferred do following:
var deferred = new $.Deferred();
With this deferred, you can do stuff like:
var deferred = new $.Deferred();
console.log(deferred.state()); // "pending"
deferred.resolve();
console.log(deferred.state()); // "resolved"
or:
var deferred = new $.Deferred();
var promise = deferred.promise();
console.log(promise.state()); // "pending"
This promise object is read-only. This means you can't change the state of it like 'promise.reject()' because most of the time the caller should not be able to change the state, this should do the deferred. The only thing the caller should do is attaching callbacks.
var deferred = new $.Deferred();
var promise = deferred.promise();
console.log(promise.state()); // "pending"
deferred.reject();
console.log(promise.state()); // "resolved"


|
|
IFXUVMapParameters Class ReferenceContains parameters to an IFXUVGenerator implementation. More...
Detailed DescriptionContains parameters to an IFXUVGenerator implementation.These are used to control various forms of texture coordinate generation.
Constructor & Destructor Documentation
Member Function Documentation
Member Data Documentation
|


Created by Andy Huggins
"These people had to start learning similar to what I learned starting out...how is it they seem to know so much more?"
What separates experienced devs from beginners?
Books
Tutorials
Screencasts
"Design what you want to build, then implement it later."
"Maintainability"
"Everything looks like a nail, when all you have is a hammer"
Confidence
Staying Power
Tenacious
Automates
Increase Efficiency
Simplifies Process


Messages
Tinderpreneurship takes the anxiety out of making great teams with strangers. Try it out for a hackathon or group project today!
Here is the contact information for the users that liked you back!
You are using a prototype of this app. Here are some features we are considering adding:
Shoot me an email at<EMAIL_ADDRESS>with your feedback!


| effectiveSize {coda} | R Documentation |
Sample size adjusted for autocorrelation.
effectiveSize(x)
x |
An mcmc or mcmc.list object. |
For a time series x
of length N
, the standard error of the
mean is the square root of var(x)/n
where n
is the
effective sample size. n = N
only when there is no
autocorrelation.
Estimation of the effective sample size requires estimating the
spectral density at frequency zero. This is done by the function
spectrum0.ar
For a mcmc.list
object, the effective sizes are summed across
chains. To get the size for each chain individually use
lapply(x,effectiveSize)
.
A vector giving the effective sample size for each column of x
.


Redford Handles the Reigns as the "Horse Whisperer"
Hope, tragedy, and renewal are the tender elements that make up "The Horse Whisperer", a thoughtful story that explores family, mature love, and adult emotions. Robert and Annie MacLean (Sam Neill and Kristin Scott Thomas), though married, seem like a distant couple. The father lives on a sprawling ranch with daughter Grace. Meanwhile, Annie lives in the big city, is a frenzied editor of a major magazine, and has an obsession with being in control. A harrowing riding accident almost kills young Grace (Scarlett Johansson) and her beloved horse Pilgrim. Although they both survive, their emotional wounds are far worse than the physical damage that they have suffered. The horse becomes fearful and jilted. Meanwhile, Grace experiences profound indifference and withdraws to the point where she believes that not only Pilgrim should be put down to save him from the anguish that he is suffering but that also she should be put down as well.
Robert believes the doctors when they say that time heals all, but Annie is not one to sit still. She feels that every moment they waste, the further Grace will regress. Having researched many equestrian-related journals, she reads about a man named Tom Booker (Robert Redford), a Horse Whisperer who is a gifted sage that can help horses who have suffered the same problems as Pilgrim. Annie decides to seek him out and makes the long journey to Montana with her now-contentious daughter and Pilgrim in tow. She hopes that if Mr. Booker can cure Pilgrim, Annie will regain her spirit as well. She also hopes that this experience will bring the two of them closer together.
Redford agrees to help, but not unless Grace also gets involved. Using what seems like nothing more than patience and love, both Pilgrim and Grace begin to respond. Grace slowly comes out of her cocoon. She begins to accept her situation, allows herself to mourn her loss and develops a closer tie to her estranged mom. Meanwhile, another plot begins to unfold as Tom and Annie slowly fall in love with one another. His tenderness, good-looks, and the allure of the open skies and picturesque landscape of the Montana frontier begins to break down Annie's need for control and she finds herself feeling a renewed sense of love. Like Grace, Annie will have to ask herself to make some tough choices about what she wants.
Considering the fact that Redford is in his 60s and Thomas is in her 40s, this is nothing short of a grown-up love story. It is honest and sincere in it's exploration of dysfunctional relationships and the responsibilities and duties that come with family. Spanning 160-minutes in length, the film develops slowly as it pays respect to the kind of relationships that can not develop in a short period of time. Johannson gives a worthy performance as the troubled youth trying to regain her spirit and Thomas is cast well as the woman who tries to balance passion with responsibility. To sit through this without fidgeting, you'll need the patience of a Horse Whisperer. But Redford understands the charm of the west, the importance of life, and the nuances of adult relationships.
Grade: B
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


{% extends 'base.html' %} {% block content %}
A tool for finding similar documents.
A tool for generating automatic summaries.


Mapbox Annotation Framework Extension for iOS
The Mapbox Annotation Framework Extension is lightweight library you can use with the Mapbox Maps SDK to quickly add basic shapes to a map.
⚠ This product is currently in active alpha development, and is not suitable for production usage. ⚠
Installation
Download and unzip the latest release
Reach out to us to get a copy of the binaries through our contact page.
Embed the framework in your project
Drag MapboxAnnotationExtension.framework into your project’s Embedded Binaries section in the project editor. In the sheet that appears, make sure Copy items if needed
is checked, then select Finish.
Usage
The Mapbox Annotation Framework Extension supports the addition of circles, lines, polygons, and symbols. Each shape type has its own corresponding controller which manages the addition of multiple shape objects of the same type.
Since the map needs to be finished loading before adding shapes to it, all shapes should be added within the MGLMapView:didFinishLoadingStyle:
delegate method.
Circles (MGLCircleStyleAnnotation
)
Circles represent a coordinate point on a map with an associated radius, measured in pixels.
func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {
let circleAnnotationController = MGLCircleAnnotationController(mapView: self.mapView)
let circle = MGLCircleStyleAnnotation(center: CLLocationCoordinate2D(latitude: 59.31, longitude: 18.06), radius: 3.0, color: .blue)
circle.opacity = 0.5
circleAnnotationController.add(circle)
}
Lines (MGLLineStyleAnnotation
)
Lines represent a connected series of coordinates.
func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {
let lineAnnotationController = MGLLineAnnotationController(mapView: self.mapView)
let lineCoordinates = [
CLLocationCoordinate2D(latitude: 59, longitude: 18),
CLLocationCoordinate2D(latitude: 60, longitude: 20)
]
let line = MGLLineStyleAnnotation(coordinates: lineCoordinates, count: UInt(lineCoordinates.count))
line.color = .purple
lineAnnotationController.add(line)
}
Polygons (MGLPolygonStyleAnnotation
)
Polygons represent a connected series of coordinates, where the first and last coordinates are equal.
func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {
let polygonAnnotationController = MGLPolygonAnnotationController(mapView: self.mapView)
let polygonCoordinates = [
CLLocationCoordinate2DMake(59, 18),
CLLocationCoordinate2DMake(62, 19),
CLLocationCoordinate2DMake(54, 20),
CLLocationCoordinate2DMake(59, 18)
]
let polygon = MGLPolygonStyleAnnotation(coordinates: polygonCoordinates, count: UInt(polygonCoordinates.count))
polygon.fillOutlineColor = .red
polygonAnnotationController.add(line)
}
Symbols (MGLSymbolStyleAnnotation
)
Symbols represent a coordinate point on a map with a label and an associated optional icon image. An image must be supplied to the map style’s sprite before being able to assign it to be the icon image of a symbol.
func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {
let attraction = UIImage(named: "attraction")
if let styleImage = attraction {
self.mapView.style?.setImage(styleImage, forName: "attraction")
}
let symbolAnnotationController = MGLSymbolAnnotationController(mapView: self.mapView)
let symbol = MGLSymbolStyleAnnotation(coordinate: CLLocationCoordinate2DMake(59, 18));
symbol.iconImageName = "attraction"
symbol.text = "This is a cool place!"
symbol.textFontSize = 16
symbolAnnotationController.add(symbol)
}
Displaying callouts for style annotations
Style annotations support callouts that appear when the annotation is selected. Each callout can display additional information about its annotation.
- To enable callouts for a style annotation, create a class property with the controller type you are enabling interaction for:
class ViewController: UIViewController {
var mapView: MGLMapView!
var circleAnnotationController: MGLCircleAnnotationController!
}
- The style annotation must contain a title and must implement two delegate methods using the Maps SDK for iOS. The first method,
annotationCanShowCallout
should returntrue
. The second method,viewFor annotation:
should return an emptyMGLAnnotationView
matching the size of the style annotation’s shape, as shown below.
extension ViewController : MGLMapViewDelegate {
func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {
circleAnnotationController = MGLCircleAnnotationController(mapView: self.mapView)
let circle = MGLCircleStyleAnnotation(center: CLLocationCoordinate2D(latitude: 59.31, longitude: 18.06), radius: 3.0, color: .blue)
circle.opacity = 0.5
circle.title = "Title"
circleAnnotationController.add(circle)
}
func mapView(_ mapView: MGLMapView, annotationCanShowCallout annotation: MGLAnnotation) -> Bool {
return true;
}
func mapView(_ mapView: MGLMapView, viewFor annotation: MGLAnnotation) -> MGLAnnotationView? {
return MGLAnnotationView(frame: CGRect(x: 0, y: 0, width: 10, height: 10))
}
}
Supported properties
Each MGLStyleAnnotation
class can be assigned a specific set of properties to configure its layout and style. Additionally, MGLAnnotationController
s also have properties that can assign a specific layout property to all of its child MGLStyleAnnotation
s.
All of these properties mirror the same values specified in the Mapbox Style Specification. Below is a list of supported properties on each class along with its corresponding property within the Mapbox Style Specification.
MGLCircleStyleAnnotation
MGLCircleAnnotationController
MGLLineStyleAnnotation
MGLLineAnnotationController
MGLPolygonStyleAnnotation
MGLPolygonAnnotationController
MGLSymbolStyleAnnotation
Icon images
iconScale
iconImageName
iconRotation
iconOffset
iconAnchor
iconOpacity
iconColor
iconHaloColor
iconHaloWidth
iconHaloBlur
Symbol text
text
fontNames
textFontSize
maximumTextWidth
textLetterSpacing
textJustification
textRadialOffset
textAnchor
textRotation
textTransform
textOffset
textOpacity
textColor
textHaloColor
textHaloWidth
textHaloBlur
Icon image & symbol text
MGLSymbolAnnotationController
Icon images
iconAllowsOverlap
iconIgnoresPlacement
iconOptional
iconPadding
iconPitchAlignment
iconRotationAlignment
iconTextFit
iconTranslation
iconTranslationAnchor
keepsIconUpright
Symbol text
textAllowsOverlap
textLineHeight
textOptional
textPadding
textPitchAlignment
textRotationAlignment
textVariableAnchor
textTranslation
textTranslationAnchor
keepsTextUpRight
maximumTextAngle
Icon image & symbol text
Support
Mapbox Framework Extensions are still in active development, and as such APIs are subject to rapid change. If you have questions or feedback, please open a new issue in this repository.
If you’d like to report a bug, please include as much information as possible so that we can quickly reproduce the issue.
For help with using the Mapbox Maps SDK for iOS, check out our documentation.


I like eating pizza, buggers and chips
when i grow up i want to be a pilot
my best friend is clalled Kalufa
we are lokted in westlands


Treff
Tittel
HovedArtist
Ant. Avspillinger
Sum spilletid
Is That What You Call Love?
Hawksley Workman
234
3:27:51
Is That What You Call Love?
Hawksley Workman
234
3:27:51
Is That What You Call Love?
Hawksley Workman
234
3:27:51


Use this page to add or remove your personal agents. You need at least one personal agent in order to make use of the applications made available through the A2P3 technology research system.
Personal Agents
You have the following personal agents.
You have no agents enrolled, please enroll one below.
Agent
Name
Created
CLI & Development Agents
If you are a developer, a command line agent will allow you to register your own applications into the A2P3 technology research system and against the various resource servers. See the A2P3.NET for more information.


--- layout: default title: Chapter 1 Structure ---
This is an HTML page created in a text editor
creating a web page


Summary
- After 25 successful years in the entertainment industry as a Broadway Local One stagehand specializing in electrics, the sudden coronavirus pandemic has steered me down a different path. While my career is on indefinite hold, I am taking the opportunity to expand my horizons and concentrate on learning the skills needed to jump start a second life in the world of web development.
- Having a strong work ethic and being in charge of large crews in conjunction with delegating responsibilities have honed my leadership skills and ingrained in me the importance of teamwork and appreciation of the vast skills needed to form a functioning team unit.
Experience
The Shubert Organization New York, NY
House Electrician, Booth Theatre - September, 2018 - PRESENT
House Electrician, Belasco Theatre - August, 2013 - September, 2018
- Responsible for all areas of lighting and electrical power for the entire theater, as well as the power needs for the lighting design, sound design and automation elements of the scenic design of each production.
- In charge of hiring the Electrics Department crew that loads in each attraction (numbers range from 12-30 crew members depending on the production) and the permanent crew that runs and maintains the show during its run.
- Implement initiatives for upgrading the facility's electrical systems to ensure up to date technology and safely replace outdated systems.
- Submit monthly maintenance reports explaining work completed and recommendations for future projects.
Broadway Electrician / Production Electrician New York, NY
1998 - 2013
- Electrician for over 30 Broadway productions including Thoroughly Modern Millie, The Lion King, Aladdin, Farinelli & The King, Hedwig & The Angry Inch, Mary Poppins, The Glass Menagerie, Who's Afraid of Virginia Woolf?, The River and Freestyle Love Supreme.
- Member of Theatrical Protective Union, Local No. One I.A.T.S.E since 2004.
Education
Rutgers University New Brunswick, NJ
Web Coding Bootcamp - Full Stack Flex - June, 2020 - PRESENT
- Curriculum covering a vast array of computer programming such as HTML5, CSS3, JavaScript, Java, jQuery, Node.js, Responsive Design, Heroku, Git, User Authentication, React.js, MySQL, and MongoDB.
- Planned completion of course: December, 2020.
CUNY Queens College, Aaron Copland School of Music Flushing, NY
Music Perfomance Major - Clarinet - September, 1984 - June, 1988


(You will see this dialog when using a CIX Forums script that requires user input.)
The Input dialog box is for entering data that is required to run a CIX Forums script.
(Note that the title of the dialog box and the information requested will vary depending on the script that you are adding to the Out Basket).


Lithium Chloride (LiCl) toxicity, mode of action and cellular responses have been the subject of active investigations over the past decades. In yeast, LiCl treatment is reported to reduce the activity and alters the expression of PGM2, a gene that …
Antifungal drug discovery and design is very challenging because of the considerable similarities in genetic features and metabolic pathways between fungi and humans. However, cell wall composition represents a notable point of divergence. Therefore, …
Connectivity webs mediate the unique biology of the mammalian brain. Yet, while cell circuit maps are increasingly available, knowledge of their underlying molecular networks remains limited. Here, we applied multi-dimensional biochemical …
The human ether-à-go-go related gene (HERG) encodes the alpha subunit of Kv11.1, which is a voltage-gated K+ channel protein mainly expressed in heart and brain tissue. HERG plays critical role in cardiac repolarization, and mutations in HERG can …
A digenic genetic interaction (GI) is observed when mutations in two genes within the same organism yield a phenotype that is different from the expected, given each mutation's individual effects. While multiplicative scoring is widely applied to …
Introduction: Mitochondria (mt) are protein-protein interaction (PPI) hubs in the cell where mt-localized and associated proteins interact in a fashion critical for cell fitness. Altered mtPPIs are linked to neurodegenerative disorders (NDs) and …
Mutations in PARK2 gene are the most frequent cause of familial forms of Parkinson's disease (PD). This gene encodes Parkin, an E3 ubiquitin ligase involved in several cellular mechanisms, including mitophagy. Parkin loss-of-function is responsible …
Antimicrobial peptides (AMPs) are key effectors of the innate immune system and promising therapeutic agents. Yet, knowledge on how to design AMPs with minimal cross-resistance to human host-defense peptides remains limited. Here, we systematically …
Mitochondrial protein (MP) assemblies undergo alterations during neurogenesis, a complex process vital in brain homeostasis and disease. Yet which MP assemblies remodel during differentiation remains unclear. Here, using mass spectrometry-based …
Protein-correlation-profiling (PCP), in combination with quantitative proteomics, has emerged as a high-throughput method for the rapid identification of dynamic protein complexes in native conditions. While PCP has been successfully applied to …


Schedule Pro is a web app that takes a user’s weekly non-negotiable scheduled tasks (e.g. class, work) as well as tasks that can be completed any time (e.g. going to the store) and optimizes their route based on distance. Distance is calculated using data from Google Maps Distance Matrix API. The web app was created using the Flask microframework (incorporates Python, HTML/CSS, Jinja, and SQL).
 As an intern, I helped them develop their first website in early 2020. The website was built using ReactJS.


Chapter 11: Defocus Blur Now our final feature: defocus blur . Note, all photographers will call it “depth of field” so be aware of only using “defocus blur” among friends. The reason we defocus blur in real cameras is because they need a big hole (rather than just a pinhole) to gather light. This would defocus everything, but if we stick a lens in the hole, there will be a certain distance where everything is in focus. The distance to that plane where things are in focus is controlled by the distance between the lens and the film/sensor. That is why you see the lens move relative to the camera when you change what is in focus (that may happen in your phone camera too, but the sensor moves). The “aperture” is a hole to control how big the lens is effectively. For a real camera, if you need more light you make the aperture bigger, and will get more defocus blur. For our virtual camera, we can have a perfect sensor and never need more light, so we only have an aperture when we want defocus blur. A real camera has a compound lens that is complicated. For our code we could simulate the order: sensor, then lens, then aperture, and figure out where to send the rays and flip the image once computed (the image is projected upside down on the film). Graphics people usually use a thin lens approximation. We also don’t need to simulate any of the inside of the camera. For the purposes of rendering an image outside the camera, that would be unnecessary complexity. Instead I usually start rays from the surface of the lens, and send them toward a virtual film plane, by finding the projection of the film on the plane that is in focus (at the distance focus_dist). For that we just need to have the ray origins be on a disk around lookfrom rather than from a point: Using a big aperture: We get:


LAKE PLACID A film review by David N. Butterworth Copyright 1999 David N. Butterworth
*** (out of ****)
The first preview for "Lake Placid," cleverly edited so that you weren't exactly sure what kind of large creature was terrorizing a wonderful cast of Bill Pullman, Bridget Fonda, Oliver Platt, and Brendan Gleeson, gave me reasonably high hopes that this might be one of the summer's better creature features. But soon the print ads were ablaze with words like "funny" and "witty," words that made me nervous.
As it turns out, "Lake Placid" works much better as a comedy than it does a horror flick, and that's the biggest surprise here. In fact, it's often extremely funny, and credit has to go to writer David E. Kelley (creator of "Ally McBeal"), director Steve Miner (who's come a long way since cutting his teeth on a couple of early--and very unfunny--"Friday the 13th" movies), and that afore-mentioned foursome of terrifically able performers. I've said it twice now but I'll say it again: this is a *very* nicely cast movie.
Although all four play stereotypical characters, the acting is at such a level that each of the archetypes work.
Gleeson, the least familiar of the four (he was in the little-seen indie hit "I Went Down" and, more recently, in John Boorman's "The General"), is first on the scene, chaperoning a beaver-tagging diver in a Maine lake. His Sheriff Keough is sensitive to sarcasm and a little bit slow on the uptake. Anyway, something attacks the lone swimmer and Gleeson's character winds up pulling him into the boat and finding him half the man he used to be. Gross-out scene #1.
They call in Jack Wells from Fish and Game (Pullman) and he's soon joined by big city paleontologist Kelly Scott (Fonda), who doesn't want to be there. Kelly is an Emily Post-type who sprays Raid about her person and is shocked to hear that there aren't any toilets. Jack doesn't want her there either so you know they'll wind up sharing a tent and, perhaps, a toothy encounter or two.
Finally, expert tracker/millionaire Hector Cyr (Platt) shows up--and *nobody* wants him there--but he suspects they're dealing with a 30-foot migratory crocodile and he knows a thing or two about catching them. Not soon after, something tips over their boat and it's gross-out scene #2. That's pretty much it for the gross-out scenes, unless you count a severed head and an amputated toe, each crawling with worms. The latter elicits a dialogue that best exemplifies the kind of humor found in this movie. "Is this your deputy?" asks Hector, offering the detached appendage to Sheriff Keough. "He was taller..." gulps Keough with a delightful deadpan. Platt is hysterical, with Gleeson ever his match.
Turns out it *is* a croc ('odile, that is), and it's pretty convincing looking in the water. However, Stan Winston ("Jurassic Park") must have worked on this film during his lunch break, because the larger-than-life reptile is not very realistic once it gets up on land, and two shock scenes of the beast attacking on terra firma are quite obviously computer generated.
Fortunately, there's humor to spare in a film that doesn't even pretend to be another "Jaws" (that dishonor goes to Renny Harlin's "Deep Blue Sea," due out at the end of the month). No, "Lake Placid" is a different fish altogether. It's got it's scary moments, that's for sure. And it's got a few gory scenes. But best of all it's got Pullman, Fonda, Platt, and Gleeson and it's very, very funny.
-- David N. Butterworth<EMAIL_ADDRESS>The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


SORT BY:
KEYWORDS
PRICE
SHIP TO:
- Top Sales
- Brand Focus
- Hi-Tech
- Home
- Sale
AVAILABLE
-
In Storage
45 -
In Online-Shop
12
BRANDSALL
-
Apple
32 -
JBL
14 -
Bose
3 -
Nest
5
CONDITIONSEE ALL
-
New
-
Manufacturer Refurbished
-
Seller Refurbished
-
Used
-
For Part or not Working
DELIVERY OPTION
FREE
$4,99
-
Apple TV 32GB
BLACK
$49,99
-
Pebble Time
RED
$29,99
-
Zendure 4-Port USB
WHITE
$49,99
-
Withings Smart Body
Analyzer ws-50BLACK
$39,99
-
JBL Charge 2+
BLACK
$39,99
-
Ollo Clip New
SILVER
$19,99
-
Fitbit Charge HR Heart Rate
and Activity TrackerBLACK
$19,99
-
Apple Watch Sport 38mm
Silver Aluminum CaseWHITE
$49,99
-
Bose SoundLink On-Ear Headphones
WHITE
$119,99
-
Sonos Play-1 Wireless
HiFi SystemBLACK
$99,99
-
Nest Learning Thermostat
3rd Generation$49,99


NodeGirls
Where and when:
24th of February 2018 at General Assembly - Level 2, 1 Market St, Sydney NSW 2000 (entrance from Kent str., 5 min walk from Town Hall train station)
What it's all about:
We believe that any woman should try programming at least once in their life. There for we created a community where in friendly atmosphere with great vibe you can try programming first time or if you already code - learn something new about JavaScript and/or Node.js.
Our full day coding bootcamps are also a great opportunity to grow your network and meet new people with similar interests. Come and join our FREE event for women with lunch provided.
What to bring with you:
- - laptop (if you do not have laptop write us directly - we will figure something out for you)
- - charger
- - desire to learn
- - good mood
Agenda:
- 9:45 - 10:00 Registration
- 10:00 - 10:30 Intro + Group formation
- 10:30 - 12:00 Coding workshop with help of mentors
- 12:00 - 12:45 Lunch
- 12:45 - 3:30 Coding workshop with help of mentors
- 3:30 - 3:45 Tea, sweets and wine!
- 3:45 - 4:00 Wrap up, next steps
On the day attendees will work on workshop of their choice: Node.js + Express.js Introduction or Introduction to JavaScript - complete beginners level - workshop that will introduce you to coding and JavaScript (popular programming language) syntax. The format of the event will be code-alone with the explanations in the tasks and help of our mentors.
How much does it cost:
This event is FREE of charge. With food and drinks provided. It is possible because of our generous sponsors - General Assembly, amazing mentors and energetic organisers :)
How to get a ticket:
Simply fill in the REGISTRATION FORM, with few questions so we can better organize day for you.
Can I bring my kid:
Absolutely! If you have no one to leave a kid with - bring him/her with you. When you filling in the form put +1 next to your name, so we know how many kids we might have on the day :)
Can I be a mentor on the day:
Of course! Even if you are a beginner in Javascript you can still try yourself as a mentor with Introduction to JavaScript workshop! Sign in here: MENTORS FORM
If you have any further questions don't hesitate to email us.


I destroy butts. What else can I say?
David is my name, destroying butts is my game
Here's where to find me: Butts being destroyed here


Our Crew
Meet the people who make awesome stuffs
Charan Sai
Web-Developer
+918985616407
John Doe
John Doe
John Doe
John Doe
John Doe
John Doe
John Doe
John Doe
John Doe
John Doe
John Doe


Graphical User Interface
Quickstart
Quickstart is the best way to try out NERVE in its most simplest form. Think of it as running a basic scan, without the ability to define how it will execute.
By using this option, you are required to specify Network CIDR notations, Quickstart doesn't support DNS.
For example, if you want to scan your home network, you could simply type <IP_ADDRESS>/24. Of course, the IP will depend on your router's IP scope.
The settings of the scan if you choose to use Quickstart is as follows:
- Exclusions: None
- Aggressive level: Maximum
- Denial of Service: Disabled
- Brute Force: Disabled
- Outbound Internet Connections: Enabled
- Interface: Default
- Max Ports: 100
- Parallel Scan: 50
- Parallel Attack: 30
- Post Event: None
- Frequency: Once
Assessment
Assessment is where you configure your first advanced scan.
General
You start by defining some metadata about your scan.
Assessment Title
This is the name of the assessment. This name appears in the reports you generate in the GUI, such as the HTML. It will also show up in the API output when you call /api/scan/status
Assessment Description
This is the description of the assessment. It's a free text description of what this assessment is about. similiarly to the Assessment Title, it will show up in the API output when you call /api/scan/status
Name of Engineer
This is a field to describe who is running the assessment. Similiarly to the Assessment Title, it will show up in the reports, and also in the API output when you call /api/scan/status
Targets
Targets are the endpoints that will be scanned and assessed. These can be IP addresses, Domains and Subdomains.
NERVE doesn't do DNS discovery for a given parent domain. There are tools you could potentially use in conjuction with NERVE that will do this work for you. Such as Passive DNS, RiskIQ, Fierce, OWASP Amass, etc.
Networks
This field takes a list of CIDR Networks (Comma separated). Example: <IP_ADDRESS>/24, <IP_ADDRESS>/24
Excluded Networks
This field takes a list of CIDR Networks (Comma separated). Example: <IP_ADDRESS>/32, <IP_ADDRESS>/32. Note: Any networks defined here will be excluded from the assessment.
Domains
This field takes a list of DNS records (Comma separated). Example: example.com, sub.example.com
Configuration
This is where the advanced configuration of the scan is defined.
Aggressiveness Level
This is going to ultimately decide which rules (checking if SSH is open is an example of a rule) run against your target scope. The more aggressive it is, the more rules are going to run.
For example, a rule that makes a lot of HTTP GET requests will be run only if you choose the use the aggressive mode. A rule that checks if a port is open, would run under all conditions.
Allow Outbound Connections
Some rules require making outbound internet connections, such as checking against CVE lists, etc.
If you run NERVE internally in a dark network without internet, you could simply toggle this off.
Attempt Brute Force Attacks
Some rules can run brute force attacks against a given server. For example, if a server is determined to have an SSH port open and it also accepts passwords as a mean of authentication, NERVE can attempt to run through a list of passwords and try to authenticate.
Note that if you provide a list of usernames and passwords via the Dictionary option, it may take a long time for a full assessment to complete. Use with caution.
Attempt Denial of Service Attacks
Some rules can run test for Denial of Service vulnerabilities against a given server. Disable if you want to ensure your services are not bombarded.
Ethernet
Defining the Ethernet to use for port scanning. This is optional. if nothing is specified, it will use the default.
Maximum Ports
This is a relatively important option. NERVE starts the assessment by executing a port scan. The more ports you scan for, the less likely you will miss things.
However, scanning for many ports has a cost (time), thus, we typically recommend scanning for the top 1000-4000 ports. Find the balance that works for you. Too little ports means you may miss out on services, but the scan is going to be faster. Too many means you may sacrifice speed.
The default value for maximum ports is 100 ports (this ensures that at least http/https/ftp/ssh are covered).
Custom Ports
You could specify your own custom list of ports. NERVE starts the assessment by executing a port scan. The more ports you scan for, the less likely you will miss things.
By default, if you do not specify a Custom Port list, NERVE will use the Maximum Ports value of 100.
If you specify both Maximum Ports and Custom Ports, Custom Ports will take presedence and Maximum Ports will simply be ignored.
Parallel Scan
This value represents the number of hosts which will be scanned simultaneously, for example, 60 means the port scan will run against 60 hosts at the same time.
The default value for Parallel Scan is 50
Parallel Attack
This value represents the number of hosts which will be attacked simultaneously, for example, 60 means the attack rules will run against 60 hosts at the same time.
The default value for Parallel Attack is 30
Dictionary
Dictionary allows you to bring your own usernames and credentials list.
When the Attempt Brute Force option is enabled, we will take your list and run it against any brute-forceable services we identify.
If you do not provide a list of usernames and passwords, we will simply use our (very short) list of usernames and passwords.
Think of this more of a sanity check, than a comprehensive brute force attempt. Our goal is not to try millions of passwords, this will not be efficient.
When providing the list, make sure it is separated by a new line, e.g.
password123
admin123
Schedule
Schedule is how often you want to run an assessment. There are 2 options: Once and Continuously
Once means a scan will run 1 time, and then it's over.
Continuously means, a scan will run, and then another 1 will follow, until the end of humanity.
When running in Continuous Mode, a "Status" indicator will appear on the sidebar (Menu bar) indicating the system will run forever.
If you want to stop, just click on the new button that will appear on the side bar called Reset System.
To achieve true Continuous Security, we recommend to run it in Continuous mode.
Post Event
You can configure NERVE to send you post events.
Web Hook
A web hook is basically a post-process event that happens after some condition is met (such as, after a scan is completed.)
NERVE can send you the Assessment data as soon as a scan completes, to an endpoint of your choice. Your endpoint must be able to be accessed by NERVE, and receive JSON data.
The data NERVE is going to send, may look like the following:
{ "status":"done", "vulnerabilities":{ "vuln_0e365ca243180c516c3cbf5382017aa4eb8de62e":{ "ip":"<IP_ADDRESS>", "port":22, "domain":null, "rule_id":"SVC_6509", "rule_sev":3, "rule_desc":"Checks for Remote Management Ports", "rule_confirm":"Remote Server Exposes Administration Port(s)", "rule_details":"Open Port: 22 (SSH)", "rule_mitigation":"..snip..Bind all possible services to localhost..snip.." } }, "scan_config":{ "targets":{ "networks":[ "<IP_ADDRESS>/24" ], "excluded_networks":[ ], "domains":[ ] }, "config":{ "name":"test", "description":"", "engineer":"", "allow_aggressive":3, "allow_dos":false, "allow_bf":true, "allow_internet":true, "dictionary":{ "usernames":[ ], "passwords":[ ] }, "scan_opts":{ "interface":null, "max_ports":100, "custom_ports":[], "parallel_scan":50, "parallel_attack":30 }, "post_event":{ "webhook":"http://<IP_ADDRESS>:8000" }, "frequency":"once" }, "metadata":{ "unique_id":"be3c7849", "timestamp":"2020-09-21 14:20:58", "node":"HOSTNAME1", "issuer":{ "source_ip":"<IP_ADDRESS>" } } } }
A webhook endpoint may look like this: http://example.com/recieve, or with a specified port https://example.com:8000/receive
Reports
NERVE supports 3 types of reports. These reports are only available via the Web Interface.
- HTML
- TXT
- CSV
- XML
All the reports are saved on disk at /opt/nerve/reports if you need to go back in time and fetch historical reports.
If you want to obtain the results of your assessment via the API, use the endpoint /api/scan/status
Notifications
NERVE supports delivering notifications via 2 methods: Email or Slack.
You can find these settings under the top right menu (Username) -> Settings
For email, you can use Amazon SES or a different provider. You will receive an attachment with the findings in a JSON format, once a scan is completed.
For slack, use an incoming webhook and paste the URL Slack gives you at the end of the process. You will receive a slack notification with the results once a scan is completed.
If you want to obtain the results of your assessment via the API, use the endpoint /api/scan/statusSecurity
There are a few security mechanisms implemented into NERVE you need to be aware of.
- Content Security Policy - A response header which controls where resource scan be loaded from.
- Other Security Policies - These Response headers are enabled: Content-Type Options, X-XSS-Protection, X-Frame-Options, Referer-Policy
- Brute Force Protection - A user will get locked if more than 5 incorrect login attempts are made.
- Cookie Protection - Cookie security flags are used, such as SameSite, HttpOnly, etc.
Upgrade
If you want to upgrade your platform, the fastest way is to simply git clone and overwrite all the files while keeping key files such as configurations.
- Make a copy of config.py if you wish to save your configurations
- Remove /opt/nerve and git clone it again from: GitHub
- Move config.py file back into /opt/nerve
- Restart the service using systemctl restart nerve
You could set up a cron task auto-upgrade NERVE, there's an API endpoint to check whether you have the latest version or not that you could use for this purpose: /api/update/platform
Miscellaneous
Web Interface Logo
If you want to brand NERVE with your own Logo, simply replace static/img/nerve_logo.png with your own picture.
400px x 100px is the recommended size.


The pool.ntp.org project is a big virtual cluster of timeservers providing reliable easy to use NTP service for millions of clients.
The pool is being used by hundreds of millions of systems around the world. It's the default "time server" for most of the major Linux distributions and many networked appliances (see information for vendors).
Because of the large number of users we are in need of more servers. If you have a server with a static IP address always available on the internet, please consider adding it to the system.
The project is maintained and developed by Ask Bjørn Hansen and a great group of contributors on the mailing lists. The source code for the system is available.
Hosting and bandwidth for the "hub" servers are provided by Packet and NetActuate.


Stalk me here.
Hello, I'm Imran Mohamad. I'm a fullstack designer to be who love to create awesome things 🌈🍕🍿


What is 'this'?
I've always had a problem with identifying the JS keyword 'this'. What is it referencing? What does it represent? The best way I've come to understand it is in the simple case of an object literal. Take a look at the image below.
We have an object literal 'hotel'. Within the hotel are several properties and a checkAvailability method. 'this' within the checkAvailability method refers to the object itself. Even when we use function constructors or other JS object patterns, 'this' keyword references properties that are used within the instance of the object.


Love Pastries
Choose from wide range of pastries
Select from it !!
ALL
Cupcake
Donuts
Candy
Donut category 1
Buy
Donut category 2
Buy
Donut category 3
Buy
Donut category 4
Buy
cupcake category 1
Buy
Cupcake category 2
Buy
Cupcake category 3
Buy
Cupcake category 4
Buy
Pastries category 1
Buy
Pastries category 2
Buy
Pastries category 3
Buy
Pastries category 4
Buy


{% load staticfiles %}
This looks like our fault, not yours. One of our super-doopers has been notified and will be right on it.


file name
{{info.name}}
created
{{info.created}}
modified
{{info.modified}}
file size
{{info.size| prettyBytes}}
title
author
journal
field
institute
publish_time
funds
publisher
checked
abstract
full_text


Welcome to my corner of the internet. Stay tuned for miscellaneous posts on the discoveries I've made while persuing computing science.


|
Mobutu Sese Sekoaka Mobutu Sese Seko Kuku wa za BangaDictator of Zaire (formerly Congo). Stole billions from his national treasury. Eventually fled to Switzerland.Full name translates to "The all-powerful warrior who, because of his endurance and inflexible will to win, will go from conquest to conquest leaving fire in his wake." Made friends with both televangelist Pat Robertson and Nation of Islam leader Louis Farrakhan.
|


Plain test allows to check old browsers which may not support Bootstrap layout.
and click here to continue


JMRI SVG Variable Helper
This page is used to help identify unused or unmatched variables specified in the static JMRI tables.
The script has not been able to connect to the JMRI server.
Return to Top


Self awareness is a deep rooted value that I have
practiced over the past few years while growing into
an adult. I use self awareness to keep me grounded,
respect other people and “be interested, not interesting” -
in other words, “the world doesn't revolve around you”. I
started practicing self awareness and self reflection when
I started University in 2018.
As part of my degree, we were required to keep a blog and
continuously document our work and reflect on our progress.
From this, I began getting in the habit or self reflecting
through journaling. I found this a great habit to get into
as I began to become more self aware of my actions throughout
the day, rather than reflecting on all of my actions at the end
of the day.
 To me this means no one is perfect
and neither are you - I think it is important to remind yourself of
this everyday.
Erin was an amazing kid – pretty smart and good at sports. She got glandular fever at about 12 yrs old and since then I notice that when she is tired/busy/stressed she doesn’t always take good care of herself physically and mentally. My observation is that she is at her best when she does good/extensive physical exercise and then she sleeps better and is better prepared for life and it maintains a positive mood. I think she recognises this sometimes.

I interpret this as:
People can choose to do good or bad, and often it can be tough
to do good, and easier to do bad. Lyrics from Morrisey of the
band The Smiths reflect this same sentiment "It's so easy to laugh,
It's so easy to hateIt takes guts to be gentle and kind".
People often focus on the bad things happening around them and the
people doing it. You have to find your inner strength and choose to
do good, so that your life can be infinitely better, so that you can
lose your bitterness and resentment, and that the lives of those
around you can improve. Focusing on the bad part of life, the world,
and people, can get you down into a bad downward spiral of thoughts
that will make you feel like revenge towards humanity and being.
Obviously, people have every reason to be bitter about these things,
but it does not contribute to a healthy state of mind. This is why
people need to focus on the small things they ARE able to change.
Living well and being successful in your personal life WILL have a
positive impact and influence on those around you.
I was first introduced to gratitude, empathy and mindfulness when I started my job at Mecca in 2018. Mecca dedicated paid training hours to introduce new staff to practicing gratitude, empathy and mindfulness (gem) in both our working lives and personal lives. I found this felt like a therapy session, it really opened my eyes to appreciating what I have, listening to and respecting the people around me, and being mindful of my actions and words. This also ties into my value of family and friends and being grateful for the amazing people I have.
I see in Erin a calmness when she is doing something mindful like painting, where she has to concentrate and that is a good thing for her. Passively watching videos, etc is not always ideal and she could explore a balance there. At times, I see that Erin is very grateful for all the opportunities she has had and everything good that has happened to her but sometimes I do see she takes things for granted.
I truly believe in hard work and seeing life as an opportunity to learn, grow, succeed and enjoy it. One of my goals for 2021 is to have no zero days. This means doing or creating something each day, no matter how small it is as long as it contributes to my self growth.
Maybe also included in the no zero days would be physical challenges/activities as these are important for a balanced life.
I still live with my parents (I am 21, please don’t judge) and they recently went away for three weeks which left me with myself and their sick cat. During this time, I learnt a very valuable lesson, again from Dr Jordan B. Peterson, where you must “treat yourself like someone you are responsible for helping” - Rule number 2. I took full responsibility for household including cooking and cleaning and chores, taking full care of a sick cat, feeding her, giving her medication each day, and disposing of her kitty litter waste, and then eventually, taking proper care of myself through diet, exercise, taking care of mental health and being completely self reliant.
I see Erin as being very self-reliant and competent. She has always got on with her uni and paid work without really any pushing from me. She is less inclined to be competent when it comes to looking after my car unfortunately, as the rubbish and dirt has grown in it. Thankfully the cat survived her imposed stay with Erin very well and Erin did everything we asked of her in looking after the house and keeping it super tidy, as we had open homes during our absence. I guess it is fair to say that Erin can be a very self-reliant and competent individual when she chooses to be and it is about something she cares about.


Psalm 110
A psalm of David.
1 Yahweh says to my master, "Sit at my right hand
until I make your enemies your footstool."
2 Yahweh will hold out the scepter of your strength from Zion;
rule among your enemies.
3 Your people will follow you in holy garments
of their own free will on the day of your power;
from the womb of the dawn your youth will be to you like the dew.
4 Yahweh has sworn, and will not change:
"You are a priest forever,
after the manner of Melchizedek."
5 The Lord is at your right hand.


Class GeneratePOT
This is a helper class to retrieve all i18n:translate items from the xml files and converts them to an empty POT file.
Note: this is just a simle convertor and does not feature all possibilities of PO/POT files.
Namespace: LengthOfRope\Treehouse\Utils
Author: LengthOfRope, Bas de Kort<EMAIL_ADDRESS>Located at Utils/GeneratePOT.php
Author: LengthOfRope, Bas de Kort<EMAIL_ADDRESS>Located at Utils/GeneratePOT.php
public
|
|
public
|
|
public
|
|
public
|


|
Vulkan Memory Allocator
|
API elements related to the initialization and management of the entire library, especially VmaAllocator object. More...
Classes | |
| struct | VmaDeviceMemoryCallbacks |
Set of callbacks that the library will call for vkAllocateMemory and vkFreeMemory . More... | |
| struct | VmaVulkanFunctions |
| Pointers to some Vulkan functions - a subset used by the library. More... | |
| struct | VmaAllocatorCreateInfo |
| Description of a Allocator to be created. More... | |
| struct | VmaAllocatorInfo |
| Information about existing VmaAllocator object. More... | |
| struct | VmaAllocator |
| Represents main object of this library initialized. More... | |
Typedefs | |
| typedef enum VmaAllocatorCreateFlagBits | VmaAllocatorCreateFlagBits |
| Flags for created VmaAllocator. More... | |
| typedef VkFlags | VmaAllocatorCreateFlags |
| See VmaAllocatorCreateFlagBits. More... | |
| typedef void(VKAPI_PTR * | PFN_vmaAllocateDeviceMemoryFunction) (VmaAllocator allocator, uint32_t memoryType, VkDeviceMemory memory, VkDeviceSize size, void *pUserData) |
| Callback function called after successful vkAllocateMemory. More... | |
| typedef void(VKAPI_PTR * | PFN_vmaFreeDeviceMemoryFunction) (VmaAllocator allocator, uint32_t memoryType, VkDeviceMemory memory, VkDeviceSize size, void *pUserData) |
| Callback function called before vkFreeMemory. More... | |
| typedef struct VmaDeviceMemoryCallbacks | VmaDeviceMemoryCallbacks |
Set of callbacks that the library will call for vkAllocateMemory and vkFreeMemory . More... | |
| typedef struct VmaVulkanFunctions | VmaVulkanFunctions |
| Pointers to some Vulkan functions - a subset used by the library. More... | |
| typedef struct VmaAllocatorCreateInfo | VmaAllocatorCreateInfo |
| Description of a Allocator to be created. More... | |
| typedef struct VmaAllocatorInfo | VmaAllocatorInfo |
| Information about existing VmaAllocator object. More... | |
Enumerations | |
| enum | VmaAllocatorCreateFlagBits { VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT = 0x00000001 , VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT = 0x00000002 , VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT = 0x00000004 , VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT = 0x00000008 , VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT = 0x00000010 , VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT = 0x00000020 , VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT = 0x00000040 , VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } |
| Flags for created VmaAllocator. More... | |
Functions | |
| VkResult | vmaCreateAllocator (const VmaAllocatorCreateInfo *pCreateInfo, VmaAllocator *pAllocator) |
| Creates VmaAllocator object. More... | |
| void | vmaDestroyAllocator (VmaAllocator allocator) |
| Destroys allocator object. More... | |
| void | vmaGetAllocatorInfo (VmaAllocator allocator, VmaAllocatorInfo *pAllocatorInfo) |
| Returns information about existing VmaAllocator object - handle to Vulkan device etc. More... | |
| void | vmaGetPhysicalDeviceProperties (VmaAllocator allocator, const VkPhysicalDeviceProperties **ppPhysicalDeviceProperties) |
| void | vmaGetMemoryProperties (VmaAllocator allocator, const VkPhysicalDeviceMemoryProperties **ppPhysicalDeviceMemoryProperties) |
| void | vmaGetMemoryTypeProperties (VmaAllocator allocator, uint32_t memoryTypeIndex, VkMemoryPropertyFlags *pFlags) |
| Given Memory Type Index, returns Property Flags of this memory type. More... | |
| void | vmaSetCurrentFrameIndex (VmaAllocator allocator, uint32_t frameIndex) |
| Sets index of the current frame. More... | |
API elements related to the initialization and management of the entire library, especially VmaAllocator object.
| typedef void(VKAPI_PTR * PFN_vmaAllocateDeviceMemoryFunction) (VmaAllocator allocator, uint32_t memoryType, VkDeviceMemory memory, VkDeviceSize size, void *pUserData) |
Callback function called after successful vkAllocateMemory.
| typedef void(VKAPI_PTR * PFN_vmaFreeDeviceMemoryFunction) (VmaAllocator allocator, uint32_t memoryType, VkDeviceMemory memory, VkDeviceSize size, void *pUserData) |
Callback function called before vkFreeMemory.
| typedef enum VmaAllocatorCreateFlagBits VmaAllocatorCreateFlagBits |
Flags for created VmaAllocator.
| typedef VkFlags VmaAllocatorCreateFlags |
| typedef struct VmaAllocatorCreateInfo VmaAllocatorCreateInfo |
Description of a Allocator to be created.
| typedef struct VmaAllocatorInfo VmaAllocatorInfo |
Information about existing VmaAllocator object.
| typedef struct VmaDeviceMemoryCallbacks VmaDeviceMemoryCallbacks |
Set of callbacks that the library will call for vkAllocateMemory
and vkFreeMemory
.
Provided for informative purpose, e.g. to gather statistics about number of allocations or total amount of memory allocated in Vulkan.
| typedef struct VmaVulkanFunctions VmaVulkanFunctions |
Pointers to some Vulkan functions - a subset used by the library.
Flags for created VmaAllocator.
| Enumerator | |
|---|---|
| VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT | Allocator and all objects created from it will not be synchronized internally, so you must guarantee they are used from only one thread at a time or synchronized externally by you. Using this flag may increase performance because internal mutexes are not used. |
| VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT | Enables usage of VK_KHR_dedicated_allocation extension. The flag works only if VmaAllocatorCreateInfo::vulkanApiVersion Using this extension will automatically allocate dedicated blocks of memory for some buffers and images instead of suballocating place for them out of bigger memory blocks (as if you explicitly used VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT flag) when it is recommended by the driver. It may improve performance on some GPUs. You may set this flag only if you found out that following device extensions are supported, you enabled them while creating Vulkan device passed as VmaAllocatorCreateInfo::device, and you want them to be used internally by this library:
When this flag is set, you can experience following warnings reported by Vulkan validation layer. You can ignore them.
|
| VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT | Enables usage of VK_KHR_bind_memory2 extension. The flag works only if VmaAllocatorCreateInfo::vulkanApiVersion You may set this flag only if you found out that this device extension is supported, you enabled it while creating Vulkan device passed as VmaAllocatorCreateInfo::device, and you want it to be used internally by this library. The extension provides functions |
| VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT | Enables usage of VK_EXT_memory_budget extension. You may set this flag only if you found out that this device extension is supported, you enabled it while creating Vulkan device passed as VmaAllocatorCreateInfo::device, and you want it to be used internally by this library, along with another instance extension VK_KHR_get_physical_device_properties2, which is required by it (or Vulkan 1.1, where this extension is promoted). The extension provides query for current memory usage and budget, which will probably be more accurate than an estimation used by the library otherwise. |
| VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT | Enables usage of VK_AMD_device_coherent_memory extension. You may set this flag only if you:
The extension and accompanying device feature provide access to memory types with When the extension is not enabled, such memory types are still enumerated, but their usage is illegal. To protect from this error, if you don't create the allocator with this flag, it will refuse to allocate any memory or create a custom pool in such memory type, returning |
| VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT | Enables usage of "buffer device address" feature, which allows you to use function You may set this flag only if you:
When this flag is set, you can create buffers with For more information, see documentation chapter Enabling buffer device address. |
| VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT | Enables usage of VK_EXT_memory_priority extension in the library. You may set this flag only if you found available and enabled this device extension, along with When this flag is used, VmaAllocationCreateInfo::priority and VmaPoolCreateInfo::priority are used to set priorities of allocated Vulkan memory. Without it, these variables are ignored. A priority must be a floating-point value between 0 and 1, indicating the priority of the allocation relative to other memory allocations. Larger values are higher priority. The granularity of the priorities is implementation-dependent. It is automatically passed to every call to |
| VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM |
| VkResult vmaCreateAllocator | ( | const VmaAllocatorCreateInfo * | pCreateInfo, |
| VmaAllocator * | pAllocator | ||
| ) |
Creates VmaAllocator object.
| void vmaDestroyAllocator | ( | VmaAllocator | allocator | ) |
Destroys allocator object.
| void vmaGetAllocatorInfo | ( | VmaAllocator | allocator, |
| VmaAllocatorInfo * | pAllocatorInfo | ||
| ) |
Returns information about existing VmaAllocator object - handle to Vulkan device etc.
It might be useful if you want to keep just the VmaAllocator handle and fetch other required handles to VkPhysicalDevice
, VkDevice
etc. every time using this function.
| void vmaGetMemoryProperties | ( | VmaAllocator | allocator, |
| const VkPhysicalDeviceMemoryProperties ** | ppPhysicalDeviceMemoryProperties | ||
| ) |
PhysicalDeviceMemoryProperties are fetched from physicalDevice by the allocator. You can access it here, without fetching it again on your own.
| void vmaGetMemoryTypeProperties | ( | VmaAllocator | allocator, |
| uint32_t | memoryTypeIndex, | ||
| VkMemoryPropertyFlags * | pFlags | ||
| ) |
Given Memory Type Index, returns Property Flags of this memory type.
This is just a convenience function. Same information can be obtained using vmaGetMemoryProperties().
| void vmaGetPhysicalDeviceProperties | ( | VmaAllocator | allocator, |
| const VkPhysicalDeviceProperties ** | ppPhysicalDeviceProperties | ||
| ) |
PhysicalDeviceProperties are fetched from physicalDevice by the allocator. You can access it here, without fetching it again on your own.
| void vmaSetCurrentFrameIndex | ( | VmaAllocator | allocator, |
| uint32_t | frameIndex | ||
| ) |
Sets index of the current frame.


What's in your shame pile?
Stories about video games, gaming technology, and game design.
There are times when I watch a movie and it stays with me for days;...
AND SO OUR HERO HAS A JOB
It can be overwhelming to scroll through the screen of unplayed digital games that have...
Find out if these games are good enough for you and your friends before spending...


Index of all elements
[ a ]
[ c ]
[ d ]
[ e ]
[ f ]
[ g ]
[ h ]
[ i ]
[ l ]
[ n ]
[ o ]
[ p ]
[ r ]
[ s ]
[ t ]
[ u ]
[ w ]
[ _ ]
top
c
- $chmod
- in file Chmod.php, variable cFTP_Chmod::$chmod
- $chmod_everyone
- in file Chmod.php, variable cFTP_Chmod::$chmod_everyone
- $chmod_group
- in file Chmod.php, variable cFTP_Chmod::$chmod_group
- $chmod_owner
- in file Chmod.php, variable cFTP_Chmod::$chmod_owner
- $connection
- in file Session.php, variable cFTP_Session::$connection
Contains cFTP_Session object
- cFTP_Autoloader
- in file Autoload.php, class cFTP_Autoloader
cFTP autoloader
- cFTP_Chmod
- in file Chmod.php, class cFTP_Chmod
CHMOD
- cFTP_Connection
- in file Connection.php, class cFTP_Connection
This file is part of cFTP library.
- cFTP_Directory
- in file Directory.php, class cFTP_Directory
Represents a directory
- cFTP_Exception
- in file Exception.php, class cFTP_Exception
Thrown when any FTP operation fails
- cFTP_ExceptionCodes
- in file ExceptionCodes.php, class cFTP_ExceptionCodes
Contains list of Exception codes
- cFTP_File
- in file File.php, class cFTP_File
Represents a File
- cFTP_Item
- in file Item.php, class cFTP_Item
Represents item in FTP
- cFTP_Session
- in file Session.php, class cFTP_Session
Represents a FTP session
- ChangeDir
- in file ExceptionCodes.php, class constant cFTP_ExceptionCodes::ChangeDir
Could not change directory
- changeMode
- in file Item.php, method cFTP_Item::changeMode()
Changes element CHMOD
- close
- in file Session.php, method cFTP_Session::close()
Closes the session
- Connect
- in file ExceptionCodes.php, class constant cFTP_ExceptionCodes::Connect
Could not connect
- connect
- in file Session.php, method cFTP_Session::connect()
Connects to FTP server
- create
- in file Directory.php, method cFTP_Directory::create()
Creates new directory
- CreateDir
- in file ExceptionCodes.php, class constant cFTP_ExceptionCodes::CreateDir
Could not create directory
- Chmod.php
- procedural page Chmod.php
- Connection.php
- procedural page Connection.php
top
top
top
top
g
- getChmod
- in file Chmod.php, method cFTP_Chmod::getChmod()
Returns CHMOD
- getConnectionOptions
- in file Connection.php, method cFTP_Connection::getConnectionOptions()
Returns connection options as array where keys are following:
- getCurrent
- in file Session.php, method cFTP_Session::getCurrent()
Returns directory name
- getDirectory
- in file Session.php, method cFTP_Session::getDirectory()
Gets directory
- getDirectory
- in file Directory.php, method cFTP_Directory::getDirectory()
Gets Directory
- GetDirName
- in file ExceptionCodes.php, class constant cFTP_ExceptionCodes::GetDirName
Could not get directory name
- getEveryoneAccessMode
- in file Chmod.php, method cFTP_Chmod::getEveryoneAccessMode()
Returns everyone access mode
- getFile
- in file Directory.php, method cFTP_Directory::getFile()
Returns cFTP_File object
- GetFileData
- in file ExceptionCodes.php, class constant cFTP_ExceptionCodes::GetFileData
Could not get file data and save to open file pointer
- GetFileSize
- in file ExceptionCodes.php, class constant cFTP_ExceptionCodes::GetFileSize
Could not get file size
- getGroupAccessMode
- in file Chmod.php, method cFTP_Chmod::getGroupAccessMode()
Returns group access mode
- getHostName
- in file Connection.php, method cFTP_Connection::getHostName()
Returns hostname
- getName
- in file Item.php, method cFTP_Item::getName()
Returns element name
- getOptionValue
- in file Session.php, method cFTP_Session::getOptionValue()
Returns FTP option value
- GetOptionValue
- in file ExceptionCodes.php, class constant cFTP_ExceptionCodes::GetOptionValue
Could not get option value
- getOwnerAccessMode
- in file Chmod.php, method cFTP_Chmod::getOwnerAccessMode()
Returns Owner access mode
- getPort
- in file Connection.php, method cFTP_Connection::getPort()
Returns port
- getSize
- in file File.php, method cFTP_File::getSize()
Gets file size
- getSystemType
- in file Session.php, method cFTP_Session::getSystemType()
Returns system type
- GetSystemType
- in file ExceptionCodes.php, class constant cFTP_ExceptionCodes::GetSystemType
Could not get remote system type
- getTimeout
- in file Connection.php, method cFTP_Connection::getTimeout()
Returns timeout
top
top
top
top
top
o
- open
- in file Directory.php, method cFTP_Directory::open()
Changes directory to this directory. Just does `cd` on current directory
top
top
top
s
- Session.php
- procedural page Session.php
- setConnectionOptions
- in file Connection.php, method cFTP_Connection::setConnectionOptions()
Sets connection options with array where kesy are:
- setEveryoneAccessMode
- in file Chmod.php, method cFTP_Chmod::setEveryoneAccessMode()
Sets everyone access mode
- setGroupAccessMode
- in file Chmod.php, method cFTP_Chmod::setGroupAccessMode()
Sets group access mode
- setHostName
- in file Connection.php, method cFTP_Connection::setHostName()
Sets FTP server address
- setOptionValue
- in file Session.php, method cFTP_Session::setOptionValue()
Sets FTP option value
- SetOptionValue
- in file ExceptionCodes.php, class constant cFTP_ExceptionCodes::SetOptionValue
Could not set option value
- setOwnerAccessMode
- in file Chmod.php, method cFTP_Chmod::setOwnerAccessMode()
Sets owner access mode
- SetPassiveMode
- in file ExceptionCodes.php, class constant cFTP_ExceptionCodes::SetPassiveMode
Could not set passive mode
- setPassiveMode
- in file Session.php, method cFTP_Session::setPassiveMode()
Sets passive mode On/Off
- setPort
- in file Connection.php, method cFTP_Connection::setPort()
Sets Port to connect to
- setTimeout
- in file Connection.php, method cFTP_Connection::setTimeout()
Sets timeout
top
top
top
top
top
|
|