I bought a Celestron FirstScope dobsinian telescope for a project that I’ve been kicking around. It’s not super duper, but for $50, it’s a functional telescope.
Before I bought it, I was looking for some dimension specs. Unable to find any, I decided to document it myself.
Measurements are in inches, and are “close enough”
Base diameter: 8”
Little rubber feet height: 1.25”
Lazy susan height: 1.25”
Floor to telescope tube mid-point: 9.5”
Telescope tube overall length: 10.5”
Telescope tube diameter: 4”
Eyepiece height (min): 2.5”
Eyepiece height (max): 4”
First Impressions
It’s not half bad. Pretty easy to use. Probably needs to be collimated, but it’s definitely good enough for looking down on the city during the day. For $50, it’s a solid scope. I’m impressed.
Here’s a picture I took of a barge. It’s a pretty hazy day today, unfortunately.
4% != .004% : When I was writing the article, my brain translated 99996 into 96000. Big difference. It turns out that I’m unable to dequeue somewhere between .004% and .20% of messages in about half of test runs.
Note:
I’ve been chatting with some very helpful RabbitMQ-knowledgeable people, and they have some suggestions for the issues I’m seeing that I’m going to check out. I will update this article with my findings.
I want to thank Alvaro Videla and Michael Klishin for reading my first attempt at this post and suggesting different avenues to explore.
Introduction
For the two of you who don’t know, RabbitMQ is a really neat AMQP-compliant queue broker. It exists to facilitate the passing of messages between or within systems. I’ve used it for a couple of different projects, and I’ve found it to be tremendously capable: I’ve seen a RabbitMQ instance running on a single, moderately sized, VM handle almost 3GB/s.
I was doing some load testing with RabbitMQ recently, and I found that, if I started attempting to publish more than around 2500 10KB messages per second, about 4% as much as 0.2% of those messages wouldn’t make it to the queue during some test runs. I am not sure if this is my code’s fault or if I am running into the limits of the RabbitMQ instance I was testing against (probably the former), but with the help of the RabbitMQ community, I was able to come up with some best practices that I’ve described below.
The examples below are all in Go, but I’ve tried my best to explain them in such a way that people who are not familiar with Go can understand them.
Terminology
If you’re unfamiliar with AMQP, here’s some terminology to help understand what’s possible with a queue broker and what the words mean.
Connection: A connection is a long-lived TCP connection between an AMQP client and a queue broker. Maintaining a connection reduces TCP overhead. A client can re-use a connection, and can share a connection among threads.
Channel: A channel is a short-lived sub-connection between a client and a broker. The client can create and dispose of channels without incurring a lot of overhead.
Exchange: A client writes messages to an exchange. The exchange forwards each message on to zero or more queues based on the message’s routing key.
Queue: A queue is a first-in, first out holder of messages. A client reads messages from a queue. The client can specify a queue name (useful, for example, for a work queue where multiple clients are consuming from the same queue), or allow the queue broker to assign it a queue name (useful if you want to distribute copies of a message to multiple clients).
Routing Key: A string (optionally) attached to each message. Depending on the exchange type, the exchange may or may not use the Routing Key to determine the queues to which it should publish the message.
Exchange types:
Direct: Delivers all messages with the same routing key to the same queue(s).
Fanout: Ignores the routing key, delivers a copy of the message to each queue bound to it.
Topic: Each queue subscribes to a topic, which is a regular expression. The exchange delivers the message to a queue if the queue’s subscribed topic matches the message.
Header: Ignores the routing key and delivers the message based on the AMQP header. Useful for certain kinds of messages.
Testing methodology
Here is the load tester I wrote: https://github.com/backstop/rabbit-mq-stress-tester. It uses the streadway/amqp library. Per this issue, my stress tester does not share connections or channels between Goroutines — it launches a configurably-sized pool of Goroutines, each of which maintains its own connection to the RabbitMQ server.
To run the same tests I was running:
Clone the repo or install using go get github.com/backstop/rabbit-mq-stress-tester
Open two terminal windows. In one, run
./tester -s test-rmq-server -c 100000
That will launch the in Consumer mode. It defaults to 50 Goroutines, and will consume 100,000 messages before quitting.
This will run the tester in Producer mode. It will (-p)roduce 100,000 messages of 10,000 (-b)ytes each. It will launch a pool of 100 Goroutines (-n), and it will work in (-q)uiet mode, only printing NACKs and final statistics to stdout.
What I found is that, roughly half the time I run the above steps, the consumer will only consume 99,000 and change messages (typically greater than 99,980, but occasionally as low as 99,800). I was unable to find any descriptive error messages in the<EMAIL_ADDRESS>file.
I can change that, though. If I run the producer like this:
then each Goroutine waits for an ACK or NACK from the RabbitMQ server before publishing the next message (that’s what the -a flag does). I have never seen a missing message in this mode. The functionality of the -a flag is described in the next section.
Some things that I don’t think are the culprit:
Memory-based flow control: Memory usage as reported by top never exceeds approximately 22%. Also, no messages in the log file.
Per-connection flow control: After fussing with rabbitmqctl list_connections for a while, I was not able to find evidence of a connection that had been blocked. I’m not sure of these results, though, so if someone would be willing to give me a hand with this, that would be awesome.
Ensuring your message got published
Like I said earlier, I was doing some stress testing against a RabbitMQ instance and a small number of messages that I attempted to publish did not get dequeued. I reached out to the RabbitMQ community, and someone on their IRC channel told me to look up Confirm Select.
When you place a channel into Confirm Select, the AMQP broker will respond with an ACK with a for each message passed to it on that channel. Included with the ACK is an integer that increments with each ACK, similar to a TCP sequence ID. If something goes wrong, the broker will respond with a NACK. In Go, placing a channel into Confirm Select looks like this:
The above channel.Confirm(false) puts the channel into Confirm mode, and the false puts the client out of NoWait mode such that the client waits for an ACK or NACK after each message. ack and nack are golang chans that receive the integers included with the ACKs or NACKs. If you were in NoWait mode, you could use them to bulk publish a bunch of messages and then figure out which messages did not make it.
After each publish, I’m performing a read off of the ack and nack chans (that is what select does). That read blocks until the client gets an ACK or NACK back from the broker.
The above examples are in Go, but there’s an equivalent in the other libraries I’ve played with. Clojure (langohr) has confirm/select and confirm/wait-for-confirms-or-die.
Can we do better?
Yes. Rather than wait for an ACK after each publish, it’s better to publish a bunch of messages, listen for ACKs, and then handle failures. I didn’t, because I was already seeing performance several orders of magnitude better than I needed.
We can also wrap blocks of messages in a transaction if we need to ensure that all messages get published and retain order, but doing that incurs something like a 250x performance penalty.
Pool your Goroutines and avoid race conditions
This issue proved interesting (if ultimately not relevant to my problem). It looks like the person who filed the issue was running into two issues:
There was a race condition in the code that counted ACKs / NACKs
The one-Goroutine-per-publish strategy causes a condition where the 2000 goroutines waiting for network IO prevent the goroutine listening for ACKs / NACKs from receiving sufficient CPU cycles.
I got around this in two ways: I have a fixed-size pool of Goroutines performing the publishing, and each goroutine handles its own Publish –> Ack lifecycle.
Ensuring messages get handled correctly
A message queue is of little use if messages just sit there, so it is prudent to include a consumer or two. But, what happens if your consumer crashes? Does your message get lost in the ether?
The answer is AutoAck. More specifically, realizing that AutoAck is dangerous and wrong.
When a consumer consumes a message from a queue, the queue broker waits for an ACK before discarding the message. When a consumer has AutoAck enabled, it sends the ACK (thus causing the message to be discarded) instantly upon receiving the message. It’s smarter to read the next message on the queue, handle the message properly, and then send the ACK.
Reading and acknowledging messages
1234567891011
autoAck:=falsemsgs,err:=channel.Consume(q.Name,"",autoAck,false,false,false,nil)iferr!=nil{panic(err)}ford:=rangemsgs{// the d stands for Deliverylog.Printf(string(d.Body[:]))// or whatever you want to do with the messaged.Ack(false)}
In the example above, autoAck is set to false. Every time I read a message (in the for d := range msgs loop), I send an ACK for that message.
If my consumer quits without acknowledging a message, that message is repeated to the next consumer to come by.
Performant results
So, what kind of performance am I getting?
The following numbers are all time to publish and consume 100,000 messages, each with a 10KB payload. The tester was running on my Macbook, and RabbitMQ was running on a Cloudstack VM.
With Confirm Select
Publishing: 24.42s
Consuming: 26.79s
Without Confirm Select
Publishing: 16.32s
Consuming: 26.13s
The point is, RabbitMQ is fast and Go is fast. When we use one to stress test the other, messages get lost somewhere. If we take a little bit of time to ensure that messages get published and processed properly, we can prevent pesky data loss issues.
Last night, I had a dream that I was telling a joke. It was a long one. I got almost all the way to the punchline before I woke up, and, thinking back on it, I had completely botched the setup.
Here’s the joke:
In eastern Europe, some time in the 15th century, there was a young rabbi. He was just out of training and was not ready to settle down, so he was wandering the countryside performing good deeds.
One day in late spring, the rabbi came across a village situated at the base of a tall mountain. In Roman times, the village was called Villi de Trido, but the villagers just called it Trid and, each other, Trids. The rabbi stayed at the inn one night, and noticed that the Trids looked unusually malnourished and depressed. He took the innkeeper aside and inquired as to what was going on.
“There is a rare and special fruit that only grows on the southern face of the mountain that towers above Trid. We Trids used to harvest the fruit. It nourshed us, and we would trade with neighboring villages, and Trid was prosperous! But last year, a monster inhabited the southern face of the mountain. When we go up to pick the delicate fruits, he kicks us off the mountain! Pow, just like that! Now we starve, and we cannot trade with the neighboring villages.”
The rabbi could not let this go. He promised the innkeeper he would do something about it. Perhaps he could talk the monster into a deal with the villagers. He bought a stout rope, a pair of warm gloves, and borrowed some crampons to deal with ice. The next morning, he started up the mountain.
He climbed for hours, expecting to encounter the monster at every turn. The rabbi seemed brave, but he was honestly nervous. What do you say to a monster? He climbed higher and higher, dealing with more and more snow and ice, wishing he had borrowed a heavy coat. As the light faded and he was about to consider making camp for the night, he encountered the grove where the fruit grew! The trees were majestic, and he could see even now the first little fruits starting to bud.
He heard a noise behind him, and wheeled around to find the monster!  Fearsome though it was, the monster didn’t attack. The rabbi waited a moment, and then decided to speak. “Monster! The people of the village below say that you kick them off of the mountain. Why is it you have not kicked me from the mountain?”
The monster approached the rabbi, and extended one gigantic paw. Placing it on the man’s shoulder, the monster said, “Silly rabbi. Kicks are for Trids!”
In my dream, I made the mistake of calling the fruit “Trids” rather than the villagers.  That would have been embarassing!
 For example: Mike’s Hard Lemonade contacted me at the Southside Hackerspace, wanting us to modify a golf cart as part of their “Mike’s Hacks” summer ad campaign. I dumped a lot of time (and just a little money) into the project, but everything went south at the last minute.
But this isn’t about that.
At the same time, Mason Donahue put me in touch with Chicago Girls in Computing.  It went awesome.
I had them assemble and program basic nightlights (LEDs turn on when the ambient light drops). They took that idea and ran with it.
The total cost per student came out to about $27. I was able to pick up a bunch of plastic containers from the grocery store for $0.10 each, and the kits fit into the containers.
They seemed to like it.
Major props go to Backstop, Stack Overflow, and DigitalOcean. I wrote them at the last minute saying it would sure be neat if I could give out some stickers at the workshop. Backstop gave me pads and pens, Stack Overflow sent stickers and markers, and DigitalOcean sent me a bunch of stickers (and chocolates).
I know my site doesn’t exactly have any dedicated watchers, but if anyone noticed a period of downtime earlier this week, it’s because I was migrating from hosting on FatCow to hosting on a rented VPS through DigitalOcean. I also moved my domain registration from FatCow to Gandi.net. In this post, I plan to cover the hows, whys, and some lessons learned.
I’ll start with the juicy stuff.
Why?
There are a couple of reasons, but the root of it all is that I got fed up with FatCow. It’s not clear how their pricing varies increases from year to year, and it’s obnoxious how, every few months, I find myself signed up for another “free trial” of some service out of which I have to opt. I can roll my own solution for less money, and with greater control.
Why move away from FatCow?
Like I said above, money and annoyance. I have a few sites with FatCow, and the oldest is about to round the three year mark. When I signed up, I was offered a trial rate of around $30 for the first year. That’s a very good deal. I barely used the site, but I ignored a few emails and, lo and behold, I found myself renewed automatically to the tune of $70-something. Okay, that’s still not significantly more than $5/month. Pretty darn good for unlimited hosting, the fact that I’m not using it notwithstanding. I turned off automatic renewal.
A few months ago, I got a message saying that FatCow couldn’t automatically renew that site because the card information I had stored was bad. I logged in, turned automatic renewal off again, and looked at the invoice — they were about to bill me $200-something for April 2014-April 2015! No way! That’s way too much.
I just renewed Agocs.org to the tune of $70-something with FatCow, but I decided it was in my best interests to break ties with that company completely, something I will be doing over the next few weeks.
Why Gandi.net?
Bluntly, they have a “no bullshit” policy. That, and they were recommended by a trusted coworker and friend, and they are a French corporation and French law meaningfully allows them to transfer ownership of “Agocs.org” over to me (most American registrars, I have been informed, retain ownership of the domain name and license its usage to you).
The process of getting things set up with Gandi.net was a little rocky, as I will detail below, but they have a bunch of good help text and an extensive knowledge base. I was able to get up and running quickly and with minimal bugging of my more knowledgeable friends.
Why DigitalOcean?
I’ve hosted a few VPSs with DigitalOcean before, and they are a joy to work with. I get full control of a Linux box (something I never got from FatCow), I can choose my web server (Nginx all the way) and database back-end (none for me please!), and set it up however I want. Write a script that uses rsync to publish new articles? Sure! Go nuts! I fought with FatCow for a while about that, and resorted to using FTP (which, once you’ve started using rsync, sucks).
Anyway, one small VPS costs me about five bones per month. Because I’m just the tiniest bit clever, I can host several sites on the same VPS. They’re all static content generated by Octopress, so it’s not like I’m going to outgrow the small server any time soon. It’s really nice.
How it worked
The process was straightforward. I set up the VPS with DigitalOcean first, copied my site over there, installed Nginx, and got that configured. Then I requested a transfer code from FatCow (I suspect, but cannot confirm, that they drag their feet on this), and initiated the transfer through Gandi. The transfer cost me about $13, but that means Agocs.org is mine for an additional year. When the transfer was complete, I created a DNS Zone file through Gandi’s web interface that points to my VPS.
Lessons learned
I made my fair share of mistakes, mostly in setting up the DNS Zonefile. My first attempt looked like this:
* 10800 IN A <IP_ADDRESS>
www.agocs.org worked great, but no email and no plain ol’ agocs.org. Email was more critical, so around midnight that night I changed it to this:
* 10800 IN A <IP_ADDRESS>
imap 10800 IN CNAME access.mail.gandi.net.
pop 10800 IN CNAME access.mail.gandi.net.
smtp 10800 IN CNAME relay.mail.gandi.net.
@ 10800 IN MX 50 fb.mail.gandi.net.
@ 10800 IN MX 10 spool.mail.gandi.net.
The lines below were cribbed from Gandi.net’s default Zone file<EMAIL_ADDRESS>worked, but agocs.org did not. I did some research and then made the following change:
* 10800 IN A <IP_ADDRESS>
@ 10800 IN A <IP_ADDRESS>
imap 10800 IN CNAME access.mail.gandi.net.
pop 10800 IN CNAME access.mail.gandi.net.
smtp 10800 IN CNAME relay.mail.gandi.net.
@ 10800 IN MX 50 fb.mail.gandi.net.
@ 10800 IN MX 10 spool.mail.gandi.net.
I found out the * record points all _sub_domains to that IP address, but it does not point the root domain (i.e. agocs.org) there. The @ record points the root domain to that IP address.
Finally, I noticed a problem with sent email. The last change I had to make was through Gmail, which was sending agocs.org traffic through an SMTP server run by FatCow. I’m way too lazy to roll my own SMTP server, so I told Gmail to take care of it.
I tried to keep the slides content-light, since I find that having too many things on the screen distracts from what I’m saying. I’ll recapitulate my notes below.
Title slide. Blah blah blah.
Around since 2009
Go started as a research project at Google in 2007. It was released as an open source project in 2009, and Go 1.0 dropped in March of 2012. It’s a real-live language!
Static Typing
Kinda —> Go uses Type Inference, but variables are statically typed once the type has been inferred. This is a reaction to the popularity of languages like JavaScript and Python, and gets away from the “cumbersome type systems” used in the C family and Java.
Object Oriented
Kinda —> Go is object oriented, but it doesn’t have classes. I’ll get into this later.
Garbage Collected
Yes.
What is it good at? Some of the notable features are quick compile times (which it achieves through clean dependency analysis and no wasted imports or declarations), creation of statically linked binaries, and concurrency, which I dive into later.
Why Go?
Systems Programming Go represents a next big step in systems programming. Systems programming is the creation of OSes, utilities, drivers, and so-forth. It has to be fast, resource-conscious, and rock solid. C has been the big name in systems programming, but that came out in 1972. C++ came out in 79, and since there, what has there been? D? PL/8? Go and Mozilla Rust are the two up and coming names in systems programming for this century.
Multicore Computers Moore’s law no longer applies. We’re making computers faster by cramming more and more cores onto a processor and more and more processors onto a motherboard. If you look at concurrency support in C or Java or any other enterprise language, it’s all abysmal. Go has primitives for concurrency built in. It’s so beautiful, it’s crazy.
Make Programming Fun I think so, at least. At the end of the talk, we wrote a little application that measures response time to a handful of websites and screwed around with it for a while. Not to toot my own horn, but a fellow dev told me it was “one of the best live coding exercises he had ever seen.”
Hello World Nothing special here. ‘fmt’ is the formatting package in Go’s standard library, much like Stdio.h.
Basic syntax What I wanted to call out here is the difference between Go’s function declaration syntax and that in the C family. C-style declaration is really focused on what a variable / function evaluates to, while Go is more focused on what the thing is. I talked a little bit about the Clockwise-Spiral rule.
Static Typing and Type Inference I talked about how you declare variables. myName is in the global address space, while myAge is local to the main method. Some key points:
myAge := 26 — := is a shorthand form of declaration and assignment that only works in the local scope. Here, Go’s type inference is assuming that I want myAge to be an int.
var myAge = 26 is just a longhand version of the above.
var myAge int64 = 26 — Let’s say we live in a world where people live a very long time. Here, I’m overriding Go’s type inference and telling Go that myAge will be a 64 bit int.
myAge := 28 / myAge= := 26 Let’s say I made a mistake and went to reassign 26 to myAge. I can’t do it this way; the compiler says “You already declared myAge, dumbass.” If you erase the : on the second line, you can reassign myAge.
myBrother := "Rob" — We can’t declare a variable without using it. It throws a compiler error. This is part of how Go keeps compile times down.
Object Orientation — Here’s a quick example of how Go is object oriented. We’re declaring a struct called littleBox that holds a couple of ints. We can create a litteBox and use it.
More Object Orientation — Here, we’re declaring a littleBox and a bigBox that holds a littleBox. The function
creates a function on bigBox that makes it into a string. This is how Go is object oriented, but eschews classes. Whats neat is, if you change func (bb bigBox) makeString() into func (bb bigBox) String(), and change fmt.Println(myBigBox.makeString()) into fmt.Println(myBigBox), you’ve made bigBox implement the Stringer interface! Did you explicitly do this? No! But you did it anyway! Isn’t that awesome?
Compile times are quick.
Go compiles to native binaries. To demonstrate this, I opened iTerm, ran go build hello_world.go, then ran file hello_world to demonstrate that hello_world had compiled to a binary. Then I moved hello_world to /opt/local/bin and ran hello_world, which, of course, output:
Go comes with a number of primitives to handle concurrency. They are:
Goroutines — you can think of these as being super light, cheap threads. What really happens is a new stack frame is created in the same address space as the parent, and concurrent goroutines are multiplexed using threads. All of the actual thread juggling is handled behind the scenes.
Channels — these are concurrency-safe buffers used for communication between goroutines.
Select — selects between receiving channels.
Here’s a purposefully slow example. aBigNumber calls a naive recursive implementation of the Fibonacci function, which delays execution for a few seconds. aSmallNumber either never gets a chance to execute, or executes much later.
In this one, we’ve created a channel called results. We’ve prefixed the calls to aSmallNumber() and aBigNumber() with the go keyword, which tells Go to execute them in separate goroutines. Both functions put the result onto the results channel, and the main method reads the results off of the channel in that order. In this instance, it will print “7” first, and then whatever the huge fib(42) is (or else execution on the remote server will time out first).
This was the programming exercise. You can look at the code on Github. In short, it accesses 24 different websites concurrently, and prints out the site, the access time, and the status code in order of completion. I wrote this with a really great group of developers, and we went off on a number of tangents trying different things to figure out some deep implementation details of Go (which explains the time.Sleep(1000000000) on line 30.
I used the “Present” tool, which is part of the Golang tool kit. I enjoyed using it, as it lets you use code examples pretty heavily, and the code examples can be modified in-browser and executed live. When I posted the talk on Facebook, an old professor of mine asked me about that, which I thought was pretty cool.
Giving the talk to the developers I work with was a lot of fun. Backstop Solutions employs a bunch of really smart people, and it’s a pleasure when they ask deep probing questions that go beyond your knowledge. A++++, 10 stars, would present again.
I saw a Kickstarter for a cold brew coffee device today, and I started reading about it. Cold Brew is supposed to taste different from your traditional hot brews — it gets less of the acidic flavors than traditionally brewed coffee, so you wind up with a smoother beverage. Also, cold brew techniques produce a coffee concentrate that you’re supposed to dilute, and the idea of mixing up 50/50 cold brew and milk is interesting.
I had a Twitter exchange with my friend Jordan Killpack about cold brewin’, and we determined that the Kickstarter device, while nicely engineered, was a little highfalutin. I decided to try my own cold brew using nothing but mason jars and coffee filters (and coffee, and water).
Ingredients
Starbucks Blonde Roast, pre-ground (don’t judge, it was on sale and all the good coffee places were closed at this point)
Two one-cup Mason jars with canning lids
Two standard paper coffee filters
Water
Going off of the America’s Test Kitchen recipe, I put 60g coffee in the mason jar and added 240g water. After a few minutes, I stirred. I’m going to let it sit until tomorrow night, and then I’ll try it out.
Pictures:
On the right is coffee + water that’s been sitting for about 10 minutes. I just finished stirring the one on the left.
On the right is the prototype for how I’m going to filter the coffee tomorrow. I’ll just invert the assembly over a bowl or big cup and let it all drain. I’ll update with how it worked out.


--- layout: post title: The Pirate Bay Goes Dark.. Dirty Pirates Had it Coming categories: [] tags: [] status: publish type: post published: true meta: _original_post_id: '' _original_import_author: John Duprey author: ---
At the end of August the Stockholm district court ordered Black Internet to shut down the connection that The Pirate Bay used, and the ISP complied.
The Pirate Bay kinda reminded me of Larry Flint (http://en.wikipedia.org/wiki/Larry_Flynt) in that while they kinda represented the underbelly of what is considered socially acceptable, they stood up to "the man" .. and for that they got my respect. That and I occasionally needed their services.. for perfectly legitimate uses of course. I suspect this is not the last that we see of them. I also suspect that the movie industry will get a clue as the music industry seems to have done.
Update: .. And they're back..


Jigsaw Puzzle
Start
Hint (3)
Reset
Hard Mode
5:00
Your browser does not support the audio element.
Your browser does not support the audio element.
Your browser does not support the audio element.
Your browser does not support the audio element.


Backpropagation - A pillar of neural networks
April 22, 2020
Harsh Patel
Hello people, this blog is about the backpropagation algorithm used in Machine learning. It is one of the most important algorithms and can be described as the pillar of the neural networks. I tried to make it as simple as possible, so I am sure you would be able to understand the fundamental working of backpropagation after reading this blog.
Overview
As we have seen in the last post that during training, Neural networks undergo feedforward and backpropagation mechanism. Data moves from input to output i.e. first layer to the last layer in feedforward mechanism and then we start backward and move from right to left to again first layer in backpropagation. The main purpose of backpropagation is that we update other parameters of the network with a change in a loss.
Introduction
From input data, we generate predicted data using feedforward propagation. then we find a loss between predicted data and true data. Now as loss gets updated, we need to update all network parameters before the next iteration. So, using backpropagation, we update all the values for the change in a loss. We use chain rule in derivation to calculate this.
Feedforward at a glance
Notations:
$$ T = \text{true data} $$ $$ L = loss $$ $$ Y = \text{predicted data} $$ $$ W = \text{weights ( }W_1 \text{ means layer 1 weights) } $$ $$X = \text{input data} $$ $$B = bias $$
$$ Z_1 = X \cdot W_1 + B_1 $$
$$ H_1 = \sigma(Z_1) $$
$$ Z_2 = H_1 \cdot W_2 + B_2 $$
$$ Y = \sigma(Z_2) $$
$$ L = \frac{1}{N} \sum_{i=0}^{N} (Y-T)^{2} $$
The above computation graph shows single hidden layer working of the network. If you are not able to understand it, you can know more about the feedforward network on my previous blog. click here.
Backpropagation
Backpropagation is calculated for \(n+1\) times for \(n\) layer network. In other words, No. of backpropagation = No. of weights in the network so there will be 2 times backpropagation according to above network.
Now Let’s look at backpropagation for \(W_2\) (last weight) in the network. As we have discussed before, we have to find the change of other values with change in loss.
Last layer backpropagation includes all the highlighted circles as shown in the above figure 2. So the values we need to find are:
$$ \frac{\partial L}{\partial Y} = \text {change of Y with loss} $$ $$ \frac{\partial Y}{\partial Z_2} = \text {change of Z with Y} $$ $$ \frac{\partial Z_2}{\partial W_2} = \text {change of W with Z} $$ $$ \frac{\partial Z_2}{\partial B_2} = \text {change of B with Z} $$
$$ \frac{\partial L}{\partial Y} , \frac{\partial Y}{\partial Z_2} , \frac{\partial Z_2}{\partial W_2} , \frac{\partial Z_2}{\partial B_2} $$
Of course, we can find all these values, but here is a question, what values can we update after calculating them? We cannot update \(Y\) or \(Z\) as it is generated by the model. We can change bias and weights as we initialize it from the start. Bias and weights does gets manipulated throughout the layers. Weights decide how many features should be propagated further. We can also not change input data as changing it will not be a good idea ever (we want to find a solution to the problem, not change the problem). So we are going to update only these values.
$$ \frac{\partial Z_2}{\partial W_2} , \frac{\partial Z_2}{\partial B_2} $$
To compute this, we will apply the chain rule. Chain rule works as follows:
$$ \frac{\partial a}{\partial d} = \frac{\partial a}{\partial b} \times \frac{\partial b}{\partial c} \times \frac{\partial c}{\partial d} $$
Hence applying it in our scenario:
$$ \frac{\partial L}{\partial W_2} = \frac{\partial L}{\partial Y} \times \frac{\partial Y}{\partial Z_2} \times \frac{\partial Z_2}{\partial W_2} \quad,\quad \frac{\partial L}{\partial B_2} = \frac{\partial L}{\partial Y} \times \frac{\partial Y}{\partial Z_2} \times \frac{\partial Z_2}{\partial B_2}$$
An example
This is like passing a message to each node backward. Let us take a small example to understand this better. Suppose you are going on a trip to Las Vegas with a budget of 30K. Now you want to know how much money you will be left with for using in casino eliminating other expenses. You have an idea that 10% will be travel cost and 20% will be accommodation cost.
Let us compute this problem and help you out with it.
Budget = 30K
travel cost = 30K * 0.10 = 3K
accommodation cost = 30K * 0.20 = 6K
Money after eliminating costs = 21K
Hence you will have 21K to use In the casino. Now if you change the budget, you would have to compute all the costs again to calculate remaining money.
Same way as you find loss, you need to change all the intermediate values which finally gives you the changes in weights and bias. This would have given you an idea of why and what happens.
Continuing further
Now let us calculate chain rule derivatives.
\( \text{Sigmoid as an activation function } \sigma = \frac{e^x}{(1 + e^{-x})} \)
\( \text{derivative of sigmoid } \sigma = \sigma' = \sigma(x) \times (1 - \sigma(x)) \)
\( \text{MSE loss } = \frac{1}{N} \sum_{i=0}^{N} (y-t)^{2} \)
Using table 1. we get the following values.
$$ \frac{\partial L}{\partial W_2} = (Y - T) \times \sigma'(Z_2) \times X $$ $$ \text{As } \frac{\partial Z_2}{\partial B_2} = 1, \quad \frac{\partial L}{\partial B_2} = (Y - T) \times \sigma'(Z_2) \quad \text{i.e. equal to }\ \frac{\partial L}{\partial Z_2} $$
We completed \(1\) backpropagation , we will now move further and calculate for \(W_1\) (i.e. the first weight of our network) and then generate a formula for the arbitrary number of layers.
Till now, we have computed
$$ \frac{\partial L}{\partial Z_2} = (Y - T) \times \sigma'(Z_2) $$ $$ \frac{\partial L}{\partial W_2} = (Y - T) \times \sigma'(Z_2) \times X $$
Applying Chainrule for \(2^{nd} \) backpropagation :-
$$ \frac{\partial L}{\partial W_1} = \frac{\partial L}{\partial Y} \times \frac{\partial Y}{\partial Z_2} \times \frac{\partial Z_2}{\partial H_1} \times \frac{\partial H_1}{\partial Z_1} \times \frac{\partial Z_1}{\partial W_1} $$ $$ \frac{\partial L}{\partial B_1} = \frac{\partial L}{\partial Y} \times \frac{\partial Y}{\partial Z_2} \times \frac{\partial Z_2}{\partial H_1} \times \frac{\partial H_1}{\partial Z_1} \times \frac{\partial Z_1}{\partial B_1} $$Because we already know \( \frac{\partial L}{\partial Z_2} \)from previous calculations, we can simplify this as,
$$ \frac{\partial L}{\partial W_1} = \frac{\partial L}{\partial Z2} \times \frac{\partial Z_2}{\partial H_1} \times \frac{\partial H_1}{\partial Z_1} \times \frac{\partial Z_1}{\partial W_1} $$ $$ \frac{\partial L}{\partial B_1} = \frac{\partial L}{\partial Z2} \times \frac{\partial Z_2}{\partial H_1} \times \frac{\partial H_1}{\partial Z_1} \times \frac{\partial Z_1}{\partial B_1} $$Using table 2. we get the following values.
$$ \frac{\partial L}{\partial W_1} = \frac{\partial L}{\partial Z_2} \times W_2 \times \sigma'(Z_1) \times X $$ $$ \frac{\partial L}{\partial B_1} = \frac{\partial L}{\partial Z_2} \times W_2 \times \sigma'(Z_1) \times 1 $$
expanding we get,
$$ \frac{\partial L}{\partial W_1} = (Y - T) \times \sigma'(Z_2) \times W_2 \times \sigma'(Z_1) \times X $$ $$ \frac{\partial L}{\partial B_1} = (Y - T) \times \sigma'(Z_2) \times W_2 \times \sigma'(Z_1) \times 1 $$
So, we calculated all required derivatives required for backpropagation for a single layer neural network.
Arbitrary number of layers
We can observe that each time we calculate backpropagation, we already have some values of the previous calculations in the chainrule. So we can and keep multiplying further with those values as we go on. we notice that in both \( \frac{\partial L}{\partial W_1}\) and \(\frac{\partial L}{\partial W_2}\), we have some common values. The common values are :
$$ (Y - T) \times \sigma'(Z_2) \times X $$
and what gets added in second backpropagation is :
$$ W_2 \times \sigma'(Z_1) $$
When we also calculate for 3rd backpropagation in a more dense network, we find out that each time this same values keeps adding up for each layer and the common value remains fixed. Using this observations we derive a general formula for any network as the following.
$$ n = \text{total hidden layers of network} + 1 = \text{total weights of the network} $$
$$ \frac{\partial L}{\partial B_k} = (Y - T) \times \sigma'(Z_n) \times \prod_{i=2}^{k} {W_{k} \times \sigma'(Z_{k-1})} $$ $$ \frac{\partial L}{\partial W_k} = (Y - T) \times \sigma'(Z_n) \times X \times \prod_{i=2}^{k} {W_{k} \times \sigma'(Z_{k-1})} $$
Some depth
This \( \frac{\partial L}{\partial W_n} \) and \( \frac{\partial L}{\partial B_n} \) are the gradients of the networks. Mathematically these gradients are vectors that move in a specific direction to reduce the loss of the network. If we suppose our training data have 2 features \(X_1\) and \(X2\), the contour graph can be used for this visualization. The contour graph is a \(2d\) representation of \(3d\) surface. \(X_1\) and \(X_2\) are the features in the \(X\) and \(Y\) axis respectively and bumps (\(3^{rd}\) surface) represents a loss of the network given \(X_1\), \(X_2\) values. The peak represents high loss and base represents low. These gradients try to move to global minima which is the lowest point of the surface. Thus we aim to go downward.
Our gradient is a vector which is a slope of the surface. As slope \( m = \frac{y}{x} \), we do the same calculation in finding the derivative. Hence It is simply a slope. So we keep finding the slope of the surface, update our values and move along the downward direction.
What after finding these gradients
As these weights and bias are initialized randomly before feedforward propagation, we update them after backpropagation.
$$ W_{\Delta} = \frac{\partial L}{\partial W_n} $$ $$ B_{\Delta} = \frac{\partial L}{\partial B_n} $$ $$ W_{new} = W_{current} - W_{\Delta} $$ $$ B_{new} = B_{current} - B_{\Delta} $$
The reason we subtract the \(W_{\Delta}\) from the current value is that we need to go to the opposite of the slope to reach global minima. Let's take an example of \(m = 2x\). \( \frac{\partial m}{\partial x} = 2 \) which is the gradient. Now increasing \(x\) by \(2\) will always increase the value of \(m\). Therefore we subtract it from the current value.
Adding Learning rate
As we saw earlier, after we find \(W_{\Delta}\) and \(B_{\Delta}\), we subtract it from \(W_{current}\) and \(B_{current}\) respectively in order to reduce the loss for next iteration. Consider that as a jump from value \(A\) to \(B\). To control the proportion of this jump, we use the learning rate. Using it, we can set how much slow or fast we want our loss to converge. So basically, the learning rate is multiplied with \( \Delta \) values as follows:
$$ W_{new} = W_{current} - ( \text{learning rate} \times W_{\Delta} ) $$ $$ B_{new} = B_{current} - ( \text{learning rate} \times B_{\Delta} ) $$
Usually we keep \(0.01\) or \(0.001\) as learning rate, but it differs on many other factors such as dataset.
steps of the neural network
iterate \(n\) times:
1. Feedforward propagation
2. Find loss between predicted images and true images
3. Backpropagation
4. Update the weights based on the gradients
Conclusion
This is all about backpropagation. While programming backpropagation, the formula is structured a bit differently in order to do mathematial operations like \( \text{dot product}\) and few others. In the upcoming posts, I will show you how to program a simple neural network from scratch and then using higher-level libraries.
Find more blogs:
Feedforward propagation - A Simple Introduction to neural networks
GUI Developement Using Python - 6. Button widget
GUI Developement Using Python - 5. Place method (Tkinter geometry Manager)
GUI Developement Using Python - 4. Grid method (Tkinter geometry manager)
GUI Developement Using Python - 3. More about Pack method (Tkinter Geometry manager)
GUI Developement Using Python - 2. Pack method (Tkinter Geometry manager)
GUI Developement Using Python - 1. Starting Tkinter
Multiple file/folder rename using Python.


--- layout: home ---
{Fast, Correct} - Choose two
Bazel is a build tool from Google that builds code quickly and reliably. We use it to build the majority of Google's software, and it's specifically designed to handle our huge source code repositories and our testing and release requirements.
Bazel is used at Google to build software from a massive, shared code repository in which all software is built from source. Caching and parallel processing make it fast. (Don't worry. It works for small projects, too.)
Bazel was designed with correctness and reproducibility in mind. A build performed on a continuous build machine or in a release pipeline will generate bitwise-identical outputs to those generated on a developer's machine.
Bazel's architecture supports many different programming languages within Google, and can be used to build both client and server software targeting multiple architectures from the same underlying codebase.
See our Installation Guide to learn how to download and install Bazel.
See our Getting Started Guide to learn how to write a BUILD file and run Bazel .
See our User Manual to learn about the Bazel command-line tool.
Take a look at our documentation and read our FAQ.
Contribute
Governance Plan
Roadmap
Support
Who's using Bazel


RestfulX Framework: The RESTful way to develop Adobe Flex and AIR applications
Description
Here‘s some of the things you can do with RestfulX:
- Create a complete Adobe Flex or AIR
application in less than 5 minutes.
 Simply do:
sudo gem install restfulx
And then run:
rx-gen -h
- Integrate with Ruby On Rails, Merb or Sinatra applications that use ActiveRecord, DataMapper, CouchRest, ActiveCouch and so on.
- Communicate between your Flex/AIR Rich Internet Application and service providers using either AMF, XML or JSON.
- Persist your data directly in Adobe AIR SQLite database or CouchDB without any additional infrastructure or intermediate servers.
- Deploy your RestfulX application on the Google App Engine and use Google DataStore for persistence.
- Synchronize your data between AIR SQLite and other service providers.
Getting Started
For details on how to get started with the RestfulX framework refer to:
http://restfulx.github.com
Getting Involved
Report bugs or track framework development progress:
http://github.com/dima/restfulx_framework/issues
Get involved with the community:
http://groups.google.com/group/restfulx-framework
License
Copyright (c) 2008-2011 Dima Berastau and Contributors, released under MIT License


warnx prints the name of the program, a colon, the text generated by passing format and subsequent args through printf, and a newline.
warn prints the same thing, except that a colon and the error string for the current error (obtained by calling strerror on errno) are printed prior to the newline.
vwarnx and vwarn are the same as warnx and warn respectively, except that the additional arguments for printf are taken to have been already packaged up in a va_list by use of the stdarg facility.


L & D Status
Team
--select--
Access Denied
House of Claims
Are we there yet
Notorious
Central Intelligence
PI-Number
--select--
PI-1
PI-2
PI-3
PI-4
Sprint-Number
--select--
SP-1
SP-2
SP-3
SP-4
SP-5
IP-Sprint
Week No
--select--
Week-1
Week-2
Sprint Start Date
Sprint End Date
Testing Start Date
Cards for Current Sprint
Cards form Previous Current Sprint
Total Number of Cards
Total Number of Test Cases planned
Number of Cards Executed
Number of Test Cases Executed
Number of Cards Completed
Cards moved to Next Sprint
Test Cases moved to Next Sprint


| Package | flare.vis.controls |
| Class | public class AnchorControl |
| Inheritance | AnchorControl Control flash.events.EventDispatcher |
| Property | Defined by | ||
|---|---|---|---|
| filter : Function Boolean function indicating the items considered by the control.
| Control | ||
| layout : Layout | AnchorControl | ||
| object : InteractiveObject The interactive object this control is attached to.
| Control | ||
| update : Function Update function called when the layout anchor changes.
| AnchorControl |
| Method | Defined by | ||
|---|---|---|---|
|
AnchorControl(layout:Layout = null)
Creates a new AnchorControl
| AnchorControl | ||
|
attach(obj:InteractiveObject):void
Attach this control to the given interactive object.
| AnchorControl | ||
|
detach():InteractiveObject
Detach this control.
| AnchorControl | ||
|
updateMouse(evt:Event = null):void
Causes the layout anchor to be updated according to the current
mouse position.
| AnchorControl |
| layout | property |
layout:Layout
[read-write]Implementation
public function get layout():Layout
public function set layout(value:Layout):void
| update | property |
public var update:Function
Update function called when the layout anchor changes.
| AnchorControl | () | constructor |
public function AnchorControl(layout:Layout = null)
Creates a new AnchorControl
Parameterslayout:Layout (default = null ) — the layout on which to update the anchor point
|
| attach | () | method |
public override function attach(obj:InteractiveObject):void
Attach this control to the given interactive object. This method will automatically detach if already attached to another object.
Parametersobj:InteractiveObject — the display object to attach to
|
| detach | () | method |
public override function detach():InteractiveObject
Detach this control.
ReturnsInteractiveObject — the interactive object this control was attached to,
or null if this control was not attached.
|
| updateMouse | () | method |
public function updateMouse(evt:Event = null):void
Causes the layout anchor to be updated according to the current mouse position.
Parametersevt:Event (default = null ) — an optional mouse event
|


Only hearings which have been confirmed will appear in the search results.
You will only be able to get audio file links for hearings that have finished.


Circuits involving nothing more than batteries and resistors are fundamental to the study of electronics, because we need a power source, all electronic components have some internal resistance (or the opposite), and we must study steady-state (or static) electrical systems before we get into dynamical systems.
My understanding is that atoms are made of electrons and protons, and they like to have an equal number of each. Atoms with an excess of electrons (i.e., more electrons than protons) want to get rid of some while those with a deficit (i.e., less electrons than protons) want to gain some. The exchange of electrons from one atom to another to appease these demands constitutes what we call electric current.
Atoms of various kinds are more or less willing to give up or gain electrons. Those more willing are conductors of electric current, and those less are insulators.
An atom with more electrons than protons is said to be negatively charged, while an atom with less electrons than protons is said to be positively charged. A source of electrical energy (e.g., a battery) provides positive and negative terminals at which can be found atoms of the same charge. When a conductive path is completed from one terminal to another, current can and does want to flow to restore the balance of electrons and protons.
One of the laws of physics is that energy is neither created nor destroyed. (This is known as conservation of energy.) So the electrical energy from the battery isn't spent, it's just converted to other forms of energy by the components in an electrical circuit, such as light, heat and sound.
A useful model/analogy1 of electron flow in a circuit is to think of marbles and tracks. A battery is like an elevator that continuously takes marbles up to the top and dumps them down a track. The pathways of the circuit are tracks the marbles can roll down. These tracks split and converge as the circuit diagram dictates until they eventually arrive at the bottom of the elevator.
Voltage at a point on a track in the circuit may be thought of as the height of that point above ground level. Current at a point may be thought of as the number of marbles (electrons) per second passing that point. Resistance may be thought of as the frictional properties of the track.
Note that voltage across two points is the difference in height between those two points.
A fundamental question of any circuit is that of which way current is flowing at any particular point. (Never-mind how much current is flowing for now.) The answer comes from our model of electronic circuits, and it is as simple as that current flows from places of high voltage to places of lower voltage. As far as how much, it suffices to say at this point that electrons are lazy. Most prefer the path of least resistance. Few are willing to take harder paths.
It is a bit distressing (or was for me) to learn that circuit diagrams are drawn and circuit analyses are performed using a convention of current flowing in the opposite direction from that of reality. In reality, current flows from the negative terminal of the battery to the positive. Conventionally, current flows from the positive terminal to the negative. What you must quickly learn is that in our analysis of some circuits, it almost doesn't matter. The symmetry of many circuit problems and components may be an explanation. Anyhow, I'm still weary of conventional current, and cannot yet see at this point how it won't matter for more complicated circuits containing more complicated types of components.


You can register for certificates with email address. if user is registered can alter certificate and if not it will add certificate. for multiple certifications use import-export via django-admin not this.
| Name | Subject | Discription | |
|---|---|---|---|
| {{friend.name}} | {{friend.email}} | {{friend.subject}} | {{friend.discription}} |


@* * Copyright 2023 HM Revenue & Customs * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *@ @(params: Map[String, Any]) @uk.gov.hmrc.hmrcemailrenderer.templates.helpers.html.template_main(params, "Our terms of use have changed") {
Dear Customer
We have updated our terms of use, and the way you accept the terms of use has changed. This time, you need to answer questions about your organisation and development practices.
Sign in to your Developer Hub account and agree to version 2 of the terms by @{params("completeBy")} to keep using @{params("applicationName")}.
From HMRC Developer Hub
}


All relevant data are within the paper and its Supporting Information files.
In temperate areas, population dynamics of the invasive Asian tiger mosquito Aedes albopictus are strongly affected by winter. The work we present here analyzes the adaptive synchronization of the diapause process in the wintry generation of A. albopictus, where the egg stage is exposed to adverse winter conditions. The seasonal pattern of egg laying activity of a French Mediterranean population of the Asian tiger mosquito was monitored weekly for 2 years with ovitraps. The field diapause incidence and the critical photoperiod (CPP, i.e. the maternal day length inducing diapause in 50% of the eggs), were determined by hatching experiments on the collected eggs. The period of diapause termination was estimated by a field survey of the first hatchings for both years. The CPP is equal to 13.5 hours of light and occurs in the field on the 25 th of August. Thus, it is on September 11 th, 17 days after the CPP, that 50% of the eggs are in a prediapause stage in the field. The egg diapause rate increases rapidly during September, whereas the mean number of eggs laid decreases sharply after mid-September. Surprisingly, after having reached a peak of 95% at the end of September, from mid-October the diapause incidence declined and stayed below 50%. Indeed, both years the diapause initiates before the rapid decrease of the environmental temperature. This leaves a sufficient period of time to the complete development of one generation of A. albopictus with effective induction of diapause in the laid eggs. The very first larvae hatched were sampled both years in the first half of March. With 20 to 26 weeks in the egg stage and about 7 weeks in the larval stages, the first annual generation spends a long time in immature stages. On a practical point of view, this long development time represents a wide window for eggs and larvae control in early spring.
The Asian tiger mosquito Aedes albopictus (Skuse 1894) is an invasive species, extending its distribution range faster than any mosquito species during the last 30 years [ 1 ]. Native to South-East Asia, the first efficient establishment of A. albopictus in a temperate country outside its native area was recorded in Albania in 1979 [ 2 ]. In 1985 it started to invade the United States of America from Japan [ 3 ] and in 1990 Western Europe, especially Mediterranean areas, from the United States [ 4 ]. In both cases the species was imported as dormant eggs through used tires trade [ 3 , 5 , 6 ]. The vector competence of the Asian tiger mosquito was demonstrated for 27 arboviruses, but its role in field outbreaks was only proved for dengue, chikungunya and Zika viruses [ 7 , 8 ]. The risk of emergence or re-emergence of these diseases is relevant with regards to the European outbreak history. The most explosive and virulent dengue outbreak was recorded in 1927–28 in Greece, and was transmitted by another urban and anthropophilic vector, A. aegypti [ 9 ]. It is a topic of high concern with autochthonous cases of dengue fever reported in France repeatedly since 2010 [ 10 , 11 , 12 ] and in Croatia in 2010 [ 13 ]. Similarly, A. albopictus is responsible for a chikungunya outbreak in Italy in 2007 [ 14 ] as for indigenous transmissions in France in 2010 [ 15 ] and in 2014 [ 16 ]. However detailed field data on its phenology are still lacking, and particularly on the incidence of winter dormancy, to better understand its seasonal dynamics. These data are needed to assess the risk of mosquito-borne diseases transmission and to develop adequate vector control strategies in temperate areas.
The Asian tiger mosquito shows a remarkable ecological and physiological plasticity [ 7 ]. The environmental parameters of importance to define this species suitable habitat have been identified [ 17 , 18 , 19 ] as well as the epidemiological hazard [ 20 ]. In temperate areas, winter temperature is the major factor limiting the persistence of A. albopictus [ 21 , 22 ]. Temperate populations are able to withstand winter at the stage of egg diapause [ 1 ]. Diapause is a process of arrested development of the organism occurring before environmental conditions become harsh, permitting the optimal temporal adaptation of the species to its environment [ 23 ]. The seasonal dynamics of the diapause process is of prime importance to decipher its phenology. The terms and definitions of the diapause phases used here refer to the review of Koštál [ 24 ]. The facultative egg diapause is induced by maternal photoperiod [ 25 ]. Females are sensitive to short photoperiod at pupal and adult stages. They then produce a signal to trigger diapause preparation in their oocytes. Diapause initiation is effective once the embryo is fully developed [ 26 ]. The prediapause phase includes all events from diapause induction to diapause initiation. The diapause phase ends by the diapause termination, as the gradual reactivation of the eggs after winter. In many insects, the major environmental factors in diapause termination are low temperatures and an extended photoperiod [ 27 ]. Eggs will stay in a post-diapause quiescence after the diapause termination up until they experience a springtime hatching stimulus. As winter temperatures in Southern France are a strong constraint for the survival of this species, the invasive populations probably underwent a strong selection pressure. The adaptation of the photoperiodic induction of diapause in a particular area is known to happen quickly in A. albopictus [ 28 ]. Thus we expect that A. albopictus populations from the French Riviera are able to respond to the local photoperiodic conditions through a maternally induced diapause allowing them to avoid temporal harsh conditions.
The work presented here attempts to analyze the complete diapause process of the wintry generation of A. albopictus, from events occurring during their maternal oogenesis to the oviposition of their offspring. For this purpose, we isolated and quantified the effects of photoperiod on diapause incidence in a natural population. (1) Using individuals sampled in the field, we determined the critical photoperiod (CPP) of the population, i.e. the day/night ratio that the laying females must be exposed in order to induce diapause in 50% of the eggs laid. The CPP was compared to the field diapause incidence. (2) The period of dormancy termination was then estimated by a field monitoring of the first hatchings on both years. (3) Lastly, using a day degree model, the egg laying activity data of 2 consecutive sliding years were analyzed according to the phenology of diapause and climatic conditions.
The animal facility of the ‘‘Entente Interdépartementale pour la Démoustication du littoral méditerranéen” has received accreditation from the French Ministry of Agriculture to perform experiments on live guinea pig (permit number B34-172-29) in appliance of the French and European regulations on care and protection of Laboratory Animals. Field survey was realized with permission from the Direction Générale de la Santé (DGS) of the French ministry in charge of health.
The diapause incidence survey was performed in the Alpes-Maritimes region, France, where A. albopictus is established since 2004 [ 29 ] ( S1 Table). It is the only species of the subgenus Stegomyia present in France since the 1950’s eradication of A. aegypti [ 30 ]. An ovitrap network was installed at the summer solstice 2010 in Cagnes-sur-Mer (43°66'N, 7°6'E), a city colonized by the species since 2006 ( Fig 1). A residential area mainly composed of individual houses with gardens was chosen for the monitoring. During our experimental period, no insecticide treatment was realized in the vicinity of the ovitraps, even though this experiment took place within the framework of the national anti-dissemination plan for chikungunya and dengue viruses [ 31 ]. Sites in the neighboring area were chosen to survey the spring larval development. Eggs collected on ovitraps up until July 26 th 2010, a period of the year not expected to induce diapause, were reared as progenitors (F0 generation) of laboratory mosquitoes.
The area monitored by ovitraps from summer solstice 2010 to summer solstice 2012 was computed as the surface of the smallest polygon including all traps with a buffer distance of 50 m (black area). This area was safe from outdoor insecticide spraying for vector control (circles). Ten infested places localized around the ovitraps network were inspected daily in March 2011 and 2012 to detect the first larvae of the year (triangles).
The purpose of this experiment was to determine the photoperiod response of a sampled population of A. albopictus. Specifically, the objective was to calculate the critical photoperiod (CPP). Since day length is changing daily in the field, the CPP could hardly be deduced from observations and is more surely determined under fixed day length in the laboratory. Two generations of mosquitoes were reared at 21°C, 80% relative humidity and a light:darkness (L:D) 16:8 photoperiod ( Fig 2). Eggs of F2 generation were stimulated to hatch under standardized conditions, and larvae were reared in batches of 250 larvae per pan of 1 liter tap water and fed with 1.75 g of milled dog food. Eleven days after egg hatching, pans containing fourth instar larvae with first pupae were transferred in cages in photoperiodic chambers. Three batches of larvae were used per photoperiodic conditions, as follows: 13:11, 13.25:10.75, 13.5:10.5, 13.75:10.25 and 14:10 L:D hours. Photoperiodic chambers consisted of windowless plastic boxes (65 x 65 x 40 cm) with a black-tissue zipper opening. Individual chambers were maintained at a constant temperature of 21.5°C and 80% relative humidity, using a fan-produced air flow and a periodic air dampening system made of a water pot stirred using an aquarium air-pump. Light cycle was computer controlled and generated with a 3 watts bar of 42 white LED per photoperiodic chamber. There was no light transition between photophase and scotophase. Adult mosquitoes were supplied with a 10% sucrose solution. Females were blood-fed on an anesthetized Guinea pig 10 days after emergence. Five days after blood feeding, each cage was provided with an oviposition cup containing water and a strip of paper. The paper was removed 5 days later and eggs were conserved in petri dishes in darkness during 10 days to allow complete embryo development [ 26 ].
The critical photoperiod (CPP) of the population is determined by an experiment including all steps in this order: A, B, C, D, E, B, C and F (black arrows). The survey of diapause incidence in the field follows steps A, B, C and F (green arrows).
In order to determine the egg diapause rate, the resulting batches of eggs were immersed in containers filled with 2 liters of water ( Fig 2). A decrease in dissolved oxygen concentration was generated with the addition of 100mg of ascorbic acid per liter of water 30 minutes after flooding [ 32 ]. This powerful hatching stimulus suppressed egg quiescence [ 27 ]. This protocol was repeated one day later, after air drying the eggs during 2 hours, to ensure the efficiency of the hatching stimulation. After two consecutive hatching stimulations, hatched eggs were counted rather than hatched larvae, the latter being prone to mortality and more difficult to count ( S1 Fig). To determine the viable state of unhatched eggs, they were first bleached in Trpiš solution [ 33 ] to allow embryo observation. Eggs were considered viable when the embryo presented pigmented ocelli, an egg burster and were without abnormal pigmentation or malformation [ 26 ]. Diapause rate was calculated with hatched and unhatched embryonated egg numbers:
Once collected in the ovitraps (see below), eggs were stored for at least of 10 days in a humid atmosphere under complete darkness at 21°C. In 2010, eggs collected in the same week were studied as a uniform batch. For increased accuracy, 2011’s eggs were weekly separated in three batches of 100 eggs minimum in order to obtain the standard deviation values. All eggs were studied together when the weekly number of eggs became less than 300. The egg hatching and counting protocol described previously was used to determine the field diapause incidence.
The diapause termination was also investigated in the field. Ovitraps being inappropriate to determine the beginning of the period of activity for the first generation of immature stages of the year, in 2011 and 2012 daily active surveys were conducted around the study area to find the first larvae hatchings ( Fig 1). Ten places documented as infested by A. albopictus and localized in a five kilometer radius around the ovitraps network were inspected daily from March 1 st. These places displayed unmovable breeding sites of varied nature (concrete blocks holes, stone containers, tree holes, etc.) and were maintained with the addition of water during dry conditions.
The population dynamics was monitored weekly using a network of 15 ovitraps set up on June 21 st 2010 [ 34 ]. Ovitraps are artificial containers made up of 3 L black plastic buckets filled with 2 L of tap water changed weekly. In each container a floating polystyrene square (5 x 5 cm) is added to provide a support for oviposition. Ovitraps were hidden under vegetation and egg batches were collected weekly and brought back to laboratory for counting. The collection was stopped in November after two consecutive negative reports, marking the end of the active season of the Asian tiger mosquito. In 2011 and 2012 the network was reinstalled from the end of March and was expanded to 18 ovitraps. The surface of the trapping area was computed as the surface of the smallest polygon including all ovitraps with a buffer distance of 50 m, and covered 30.5 hectares in 2010 and 41.6 ha the following years. Both hatched and unhatched eggs of A. albopictus collected in ovitraps were counted in laboratory under a stereomicroscope Zeiss Stemi SV6.
The seasonal dynamics were studied according to the meteorological influence. The daily minimum (T
The development of poikilothermic organisms such as mosquitoes, being dependent of environmental temperature, the span of the mosquito life cycle should be analyzed according to the temperature range allowing its development. The time units (days) were reported to the number of accumulated daily degree (ADD), calculated as follows: ADD = ∑(((T
The numbers of heat units required for different development times were calculated using demographic parameters of two strains. There are no differences in development rates between tropical and temperate strains, except in the embryonic stage [ 22 ]. Thus, we used development data from a tropical strain [ 35 ], completed with the embryonation rates–with or without diapause induction–of a local temperate strain [ 26 ] to calculate our day degree model.
The diapause incidence percentages from laboratory and field eggs batches were modeled through sigmoid response curves fitted by day length using an iterative logistic model with a four parameters logistic regression. It allowed calculating the CPP for this population. The reaction norms were compared to determine the delay between maternal diapause induction and diapause initiation in offspring.
The threshold temperatures of the beginning of the egg laying activity and of the first seasonal egg hatching were determined by linear regressions of day length and the average minimum temperature of the week preceding egg laying activity.
Statistical analyses were performed using R 3.0.2 software [ 36 ].
As expected, under fixed temperature and photoperiod in the laboratory, the complete shift in the number of eggs entering diapause incidence occurs between a day length of 13.0 and 14.0 hours. The CPP of this population is equal to 13.5 hours of light according to the sigmoid curve model of diapause induction ( Fig 3).
X axis represents the mean daylight duration during the egg laying week in the field in 2010 (green diamonds, n = 10) and 2011 (red dots, n = 36). Photoperiod inducing diapause was studied at fixed day length in laboratory (blue squares, n = 15). Sigmoid curves modeled for egg diapause incidences are in bold solid line (laboratory) or solid dashed lines (field). Smooth dotted lines represent the 95% confidence intervals. The sigmoid response curves ignore the field data points of decreasing diapause incidence for day length ≤ 11.5 hours, as these outliers are probably the result of a selection trend. The horizontal dot line (light grey) marks 50% of diapause incidence. The difference between blue curve (laboratory data) and green and red curves (field data) highlights the delay between maternal diapause induction and diapause preparation in offspring.
The diapause incidence was compared to the average day length ( Fig 3) of the week of field monitoring. The diapause rate showed a similar pattern between 2010 and 2011. It increases rapidly in the field during September ( Fig 4A and 4B). Half of the eggs laid in the second week of September (week 36) were programmed to enter into diapause. The moment when 50% of the eggs initiate diapause corresponds to a day length of 12.7 hours (12h41), and occurred on September 11 th. After the 39 th week, more than 95% of eggs laid were in prediapause stage, the diapause incidence stayed high for the first half of October. It decreased significantly from mid-October while the number of laid eggs decreased sharply.
Asterisk represents positive samples with less than 100 eggs collected. Arrows show the week of sampling of the first larvae of the year.
The experimentally determined CPP is of 13.5 hours; in the field this day length corresponds to the 25 th of August. The CPP is higher by 0.8 hour than the day length monitored in the field when embryonic diapause would be programmed in 50% of the eggs. This difference represented a time span of 17 days after the date of the CPP. It suggests the influence of environmental factors as well as a physiological delay during maternal diapause induction. The transition from a non-diapausing day length to a day length inducing the maximal diapause incidence should last theoretically 20 days (with the laboratory determined day lengths), but it lasted twice that time in the field.
The very first larvae were sampled both years in the first half of March (the 8 th in 2011 and the 13 th in 2012) and in the same breeding site (holes in concrete stud). A period of 25 (in 2010) to 26 weeks (in 2011) was needed between the time when 50% of eggs entered in diapause and the observation of the first viable hatched larva the following year. This period was similar from year to year despite different winter conditions (see below).
A total of 53790 eggs of A. albopictus were collected during the field samplings (21126 eggs during the period between the summer solstices of 2010 and 2011, and 32664 during the period between the summer solstices of 2011 and 2012s). A mean density of 68.4 ± 49.0 eggs per ovitrap per week was collected from weeks 19 to 45 in 2011. All the ovitraps were found positive during 14 weeks in 2010 and 12 weeks in 2011, between June 27 th and November 2 nd. The egg laying activity highly increased after the summer solstices of both years and remained globally high despite variations until the second half of September ( Fig 4A and 4B). After that, the mean number of eggs per ovitrap sharply decreased. No egg laying activity was detected after November 2 nd in 2010 and November 14 th in 2011 (data already published in [ 34 ]).
The first eggs laid by the first annual generation of adults were detected in the first half of May for both years. Taking into account the date of first egg hatchings, it corresponds to a development length of 9 weeks in 2011 and of 7 weeks in 2012.
The elapsed time at different phases of the diapause process was converted in ADD above 11°C, the estimate thermal units available for mosquito development ( Table 1 ). We considered here the 11 th day of September as the generic day of diapause initiation, with 50% of the eggs laid in diapause. Diapause was induced in 50% of eggs 15 days before the date of diapause initiation (Figs 3, 4A and 4B). In the field the fortnight elapsed between these estimated dates correspond to 205 to 225 ADD. It is more than the heat units necessary in A. albopictus for the development from pupae to first egg laying, or from pupae to the end of the second gonotrophic cycle. The photothermic analysis of the prediapause stage suggests that diapause was not completely induced in field eggs of the first gonotrophic cycle. This is corroborated by the laboratory experiment, where females exposed to short photoperiod during at least 11 days show a switch to complete induction of diapause ( S1 File).
The thermal threshold is equal to 11°C.
| Development time | Theoretical ADD | Observed ADD (year) |
|---|---|---|
| From egg hatching to first oviposition | 245 a | |
| From pupation to first gonotrophic cycle end | 142 b | |
| From pupation to second gonotrophic cycle end | 198 b | |
| Mean generation (without diapause) | 295 c | |
| Mean generation (with diapause) | 310 c | |
| From CPP to diapause initiation | 205 (2010) b | |
| 225 (2011) b | ||
| From CPP to the end of the oviposition activity | 558 (2010) c | |
| 729 (2011) c | ||
| From diapause initiation to the first spring hatching | 424.85 (2010–2011) d | |
| 615.5 (2011–2012) d | ||
| From the first spring hatching to the first oviposition | 270 (2011) a | |
| 201 (2012) a |
a,b,c,d: data compared against each other’s.
For both years, from the date when field day length was equal to the CPP to the end of the monitored oviposition activity, there were actually more heat units available than required to complete one generation of A. albopictus with effective induction of diapause in the laid eggs. The sum of heat units available even allowed the complete development of 2 generations in 2011 (605 ADD necessary).
The 2010–2011 winter was rainier than the 2011–2012 winter (324.1 mm versus 85.3 mm of cumulated rainfalls) ( Fig 4C and 4D). The average mean temperature was similar between both winters (9.66 ± 1.78°C for the 2010–2011 winter versus 9.60 ± 2.85°C for the 2011–2012 winter), however the last winter was more contrasted: it started hot and dry and followed by two cold weeks with 8 days of negative minimal temperature. Consequently, from the generic day of diapause initiation to the date of observation of the first larva hatching, there was 424.85 ADD during the winter 2010–2011 and 615.5 ADD during the winter 2011–2012. This represents an increase of 45% ADD
The two days following the observation of the first larva in 2011 were the last days of spring where the mean temperature was less than 10°C ( S2 Fig) with a minimum temperature less than 5°C. In 2012 such low temperatures ended a week before the observation of the first larva. Only 2 days of chilling with T
The average minimum temperature of the week preceding egg laying activity is estimated with an intercept of the linear regression at 12.5°C. From egg hatching to the first oviposition, the development time measured in 2011 in the field corresponded closely to the heat units necessary (245 ADD). However in 2012, only 201 ADD were observed between the monitored hatching and egg laying; a correspondence in ADD measured is observed when considering the time where the number of eggs laid reached 5% of the annual weekly mean number of eggs laid.
The CPP is under polygenic control, evolving with latitude [ 28 ], and is a very plastic life history trait sensitive to high temperature [ 37 ] and larval nutritive state [ 37 ]. The observed difference in the field of 0.8 hour between the CPP and the diapause preparation into 50% of the eggs is important and could be partly explained by environmental conditions. Indeed, individuals of the natural population are exposed to fluctuating temperatures, which can slightly interact with the photoperiodic signal. In the northern tamarisk beetle Diorhabda carinulata, high daily thermal amplitude was demonstrated to reduce the CPP by 0.15 hour for laboratory controlled amplitude of 10°C [ 38 ]. This kind of effect could exist in A. albopictus, however the median daily thermal amplitude did not reach 6.7°C during the month preceding and following the day of CPP. Furthermore, the effects of thermal amplitude in the field should be counterbalanced by the broad variability of larval nutrition; indeed, adults starved at larval stages showed a CPP lengthened up to 0.25 hour [ 37 ]. The different temperature and food conditions experienced by individuals do not entirely explain the difference in photoperiodic responses between the field and the laboratory populations. The photothermic analysis of the prediapause stage suggested diapause was not completely induced in eggs of the first gonotrophic cycle in the field. Indeed, there was enough ADD during this time for sensitive stages to develop from the pupae to the end of the second gonotrophic cycle ( Table 1 ). This supposition is corroborated by laboratory experiment at 21°C on this strain, showing a switch to complete induction of diapause in eggs of females exposed to short photoperiod during at least 11 days ( S1 File). A similar observation was made on North America strains [ 25 ]. Thus diapause induction should only be considered fully effective for eggs from the second gonotrophic cycle. As a physiological process, diapause induction could occur slightly faster in the field where mean temperatures are higher by 1 to 3°C ( Fig 4C and 4D).
Egg diapause must be induced at the appropriate time to obtain an initiation accurately synchronized with seasonal conditions. In the field, the maximum diapause incidence occurred a month before the cooling of the minimal temperature under 15°C ( Fig 4). After diapause induction it is essential that the environment remains sufficiently warm to allow for the completion of at least one full generation of A. albopictus progenitors and of a diapausing offspring [ 39 ]. The sum of heat units recorded both years in our field study allowed the complete development of one, and sometimes two generations of progenitors. Does it mean the CPP of this Asian tiger mosquito population is not perfectly adapted to the local Mediterranean environment? Even though it is not possible to assert this with certainty, the data are consistent with a “bang-bang” strategy [ 40 ]: during the favorable period mosquitoes reproduce and do not enter diapause, up to a specific date, illustrated as the CPP, when all the organisms will have to initiate diapause. The apparent precocity of prediapause stage could then be explained by the overlapping generations of A. albopictus and the stochasticity of rainfalls occurrence or intensity during Mediterranean summers.
Most of the population enters diapause at the end of September, however a decrease of the diapause incidence is observed in eggs laid after that date on both years. This trend is not directly induced by the photoperiod, as the diapause incidence of our local temperate populations in the laboratory remains higher than 90% for rearing day lengths of 13.0 as well as 9.0 hours [ 26 ]. As diapausing eggs are not sensitive to environmental stimuli, only non-diapausing eggs can hatch to produce a new generation of breeders at the end of the season. Thus the overall decrease in the number of active A. albopictus at end of the season–decrease caused by the initiation of diapause–leads to a selection of phenotypes that express less or no diapause in the remaining active population. Under favorable climatic conditions this selection phenomenon allows for a rapid decline of diapause in the population, such as documented in previous studies: In Rome, Italy, the minimum egg hatching rate obtained after a field sampling of A. albopictus eggs realized in the fall of year 2000 was 17%—as compared to less than 5% in our study–meaning that a significant part of the A. albopictus population had not entered diapause [ 41 ]. In southernest's cities of Spain, a small part of the Asian tiger mosquito population is probably unable of winter diapause [ 42 , 43 ]. This phenomenon is even more evident in North America where a progressive selection of the non-diapausing phenotypes could explain that in 2011 more than 60% of eggs laid by the strain of Miami are not in diapause [ 44 , 45 ]. The non-diapausing individuals must be advantaged in areas with warm winters, having the exclusive benefit of a longer period of time for reproduction and proliferation.
In metropolitan France, non-diapausing phenotypes are probably eliminated afterwards by winter conditions. Indeed, in our study the complete end of the egg laying period occurred at the same time as the most important rainfalls of the year ( Fig 4). These exceptional rainfall events occurring on week 44 may have precipitated the end of the active season of the Asian tiger mosquito by causing an important mortality of the immature stages [ 46 ] and remaining adults. However, a continuous residual egg laying activity was observed during the winter in Rome [ 47 ] and in southern Spain [ 42 , 43 ], but none was reported in other southern cities, such as Athens, Greece [ 48 ] or Tirana, Albania [ 49 ] where the oldest European populations of the Asian tiger mosquito are found. In Rome (41°53′N), despite repeated flooding during winter the eggs remained unhatched, thus confirming their diapause status and leading to the strong assumption that they had been laid by long-lived A. albopictus females of the last seasonal generation [ 47 ]. The anthropogenic modification of the environment is likely to be involved in the winter survival of mosquitoes [ 50 ]. However in France, based on a 6 years long population sampling—winter monitoring included -, the persistence of adult A. albopictus populations during winter seems unlikely to happen soon [ 34 ].
The beginning of diapause termination in the field was estimated in our study by a monitoring of egg hatching, although this method cannot discriminate the termination per se of the post-diapause quiescence. This quiescence follows diapause termination until environmental conditions become favorable. The monitored breeding sites were flooded and maintained with water by the investigator, therefore only eventual low temperatures would have sustained quiescence and have substantially delayed egg hatching. Based on our study, and according to previous field observations [ 41 ] and models [ 18 ], the values for the hatching onset parameters correspond to a spring temperature above 10.5°C and a spring photoperiod above 11.25 hours. The termination of diapause leads to a gradual reactivation of eggs in the field. The factors involved in this process where studied in laboratory and differed with regards to the mosquito species [ 27 ]. Mainly, a long-term exposition at chilling but not freezing temperature triggers egg reactivation. Photoperiodism is also effective, long day treatment having a strong reactivation effect in eggs of A. caspius and A. triseriatus. The adaptive advantage of photothermic interaction is obvious in the field, photoperiodism preventing early and inappropriate hatchings under changing temperatures during winter. Our data are consistent–but not conclusive–with a reactivation dependent of a photothermic interaction. The estimation of the average minimum temperature of the week preceding egg laying activity found in this study is inferior by 0.5°C from the 13°C found in northern Italy on adult female emergence [ 51 ]. As some precocious egg laying and adults were observed in 2012, earlier undetected hatchings could explain this discrepancy between monitored and development time. However, there occurrence resulted more likely from an accelerated larval development in breeding sites warmer than field conditions, such as rain barrels exposed to the sun.
Maternal induced egg diapause plays a central role for the wintry long generation, with phases studied here in a field population: from the induction through to the diapause initiation, and following up to diapause termination ( Fig 5). The first annual generation spends a long time in immature stages, with 20 to 26 weeks at the egg stage and about 7 weeks at the larval stages. This long development time represents for mosquito control operators a great opportunity to thwart the species population dynamics by targeting the eggs and larvae of a unique generation. The mechanical suppression of breeding containers where eggs have accumulated as a result of female seasonal oviposition choice during the fall [ 52 ] would be an especially efficient procedure for that purpose. As mosquito control operators cannot contact every inhabitants living in the suburban areas where the major biting discomfort is experienced, the main issue to overcome, particularly in a period with no adult nuisance, will deal with communication aiming to modify community habits [ 53 ].
Horizontal lines represent the mean durations of diapause syndrome and of the long generation of A. albopictus. Vertical lines delineate the moment when diapause is induced (in red) or initiated (in dark) in 50% of eggs, and the start of diapause termination (in green).
When compared to models based on Medlock et al. [ 54 ], the time span of mosquito activity measured in our study is already longer than projections for the current period [ 55 ] and even equal to projections for 2030–2050 [ 18 ]. In these models, the Mediterranean area is expected to be very vulnerable to climatic change, with a strong overall warming–including a temperature increase of 2–4°C during fall and winter up to the years 2071–2100 –and a reduction in precipitation [ 56 ]. These models slightly underestimate the extent of the growing season in urban areas, where temperature is generally higher than in natural environments. Consequently, an upward revision of the estimated period of activity of A. albopictus should be considered for cities. The distribution area, the extent of the growing season and developmental rates are all expected to increase due to global warming. It would notably make possible the production of one or two additional yearly generations [ 57 ]. The major biological response to climate change in mosquitoes is expected to be an adaptation of the diapause induction and termination to adjust to shorter winters [ 23 ].
The phenological population dynamics of A. albopictus was studied in the light of the major role played by the evolutionary process of diapause. The photoperiodic data of diapause induction, initiation and termination of the population of Asian tiger mosquito will serve as reference for future work on the evolution over time and dissemination of this invasive species, with regards to local adaptation and global warming. This study provides a basis of field and phenological data that will be useful to apprehend the future expansion of A. albopictus population toward Northern Europe, and to develop temporal abundance models in order to simulate and test innovative strategies for vector control operators.
(DOCX)
Click here for additional data file.
(DOCX)
Click here for additional data file.
(DOCX)
Click here for additional data file.
(DOCX)
Click here for additional data file.
The authors are grateful to the EID Méditerranée (EID) staff for helping to provide mosquito egg samples, Myriam Cros for the map and Nathalie Barras for English revision. This work was supported by EID Méditerranée and the French ministry in charge of health, Direction Générale de la Santé (DGS). This paper is number BRC343 of the Biodiversity Research Centre.


General
Show download confirmation
Show
downloading
message
Filters
Show advanced filter modes
Show
Only images from links
option
Show
Sort by URL
option
Images
Show the URL textbox
Show the
open
button
Show the
download
button
Columns:
Minimum Width:
px
Maximum Width:
px
Border Width:
px
Border Color:


Question of
Congratulations!
You have advanced to Level
.
Now select the correct translation within
seconds.
Proceed to new game


The min
attribute The multiple attribute is a boolean attribute.
When present, it specifies that the user is allowed to enter/select more than one value.
The multiple attribute can be used on the following elements:
Input Example:
A file upload field that accepts multiple values::
<form action="/action_page.php">
Select images: <input type="file" name="img" multiple>
<input type="submit">
</form>
Select Example:
A drop-down list that allows multiple selections:
<select multiple>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="opel">Opel</option>
<option value="audi">Audi</option>
</select>


All classic encryption methods belong to the group of symmetric encryption methods, where sender and receiver are using the same key.
The menu Symmetric (classic) contains the following commands, in order to encrypt or decrypt data:
| Caesar / Rot-13 | Encryption and decryption using Caesar. |
| Vigenère | Encryption and decryption using Vigenère. |
| Hill | Encryption and decryption using Hill. |
| Substitution / Atbash | Encryption and decryption using monoalphabetic substitution. |
| Playfair | Encryption and decryption using Playfair. |
| ADFGVX | Encryption and decryption using ADFGVX. |
| Byte Addition | Encryption and decryption using Byte Addition. |
| XOR | Encryption and decryption using a binary Exclusive-OR (XOR). |
| Vernam / OTP | Encryption and decryption using Vernam. |
| Homophone | Encryption and decryption using homophonic substitution. |
| Permutation / Transposition | Encryption and decryption using permutation. |
| Solitaire | Encryption and decryption using Solitaire. |
| Scytale / Rail Fence | Encryption and decryption using simple transpositions. |


Algebra is one of the earliest branches of mathematics that includes many ways to think about numbers such as complex numbers, vectors, and matrices.
Need help on homework?
Post your question in a forum post!
Tutors will set up study sessions regularly. If you need 1-on-1 help, send a message to one of our tutors and when they are available, they will be more than happy to help.
Algebra Study Session (November 23rd, 2020 @ 5:00 PM)
Hey everyone, let's meet together to study Algebra together on Monday. A video will be uploaded -Johnsmith932
Urgent Algebra Homework Help Please!
Hey everyone! I have a homework due tomorrow and I really need some help because I can't wrap my head around it. Thanks! -Hercules82
Solve an equation 7x - 3x = -32
My child has some algebra homework and I want to help them on it. Can someone walk me through how to do so? -Anonymous
Quadratic Formula?
Anyone have a good way to memorize quadratic formula? Anyone have any trick to do so? -YumyumNoodles
Any study sessions soon?
I am having trouble in school. Is there a tutor available? I don't mind if it's not a 1-on-1 session -SamanthaWatson
| Username | Last Tutored | Rating |
|---|---|---|
| Johnsmith932 | November 10th, 2020 | (536) |
| KatKitten | November 20th, 2020 | (124) |
| SolidFacts101 | November, 15th, 2020 | (156) |
| Username | Title | |
|---|---|---|
| John Smalls | Exam review for the upcoming test! | |
| Lazlo | Can anyone help explain the most recent homework to me? | |
| StudyKing | Just chilling and studying | |
| Lia Nnenna | Working on the semester project. | |
| Elias Kim | Anyone want to review some old lectures? | |
| Kristi Glover | Just wanted to chat with people while studying. |


Class SimpleUploader
Direct known subclasses
LeanCloud\Uploader\QCloudUploader, LeanCloud\Uploader\QiniuUploader, LeanCloud\Uploader\S3Uploader
public static
|
|
protected static
string
|
|
public
string
|
#
multipartEncode( array $file, array $params, string $boundary )
Encode file with params in multipart format |
public
|
|
public
|
|
public
|
|
abstract public
|
protected
|
$uploadUrl
|
|
protected
|
$authToken
|


Hello and welcome.
What's your name, friend?
(Type your name and hit enter)
Continue.
How do you say "Hello" in Portuguese?
Olá
Tudo bem
How do you say "Goodbye" in Portuguese?
Adios
Tchau
How do you say "How are you?" in Portuguese?
Tudo bem?
Qual é?
These are your results.
Go Again.
Check out this site to learn some more.
Reset.


Simplify your wealth management with
Single Application
Verified Avenues
Trusted Advisors
Informed
Decisions
How does managing and enjoying your wealth sound to you ?
Sign up and get an exclusive preview of the future of wealth management


The purpose of a notice is to convey the next course of action for a task or flow. The notice must be clear and concise, with minimum cognitive load.
A notice may appear at the following levels: window, page, section or inline.
A window notice is a message of celebration used when a user has completed something important. It is always the major focus of the window.
It can be used to fill a dialog window on large screens, or to fill the entire screen on small devices.
You'll get a confirmation email soon. The rest of your items are now ready to checkout.
You'll get a confirmation email soon. The rest of your items are now ready to checkout.
Apply the .window-notice--fill modifier to fill the container and align items accordingly.
You'll get a confirmation email soon. The rest of your items are now ready to checkout.
You'll get a confirmation email soon. The rest of your items are now ready to checkout.
A page-level notice appears prominently at the top of the page for high priority use cases; often requiring an interaction.
A page-level notice may have a status of celebration, confirmation, information or attention.
To aid discoverabilty of such important content for assistive technology, we make each page notice a landmark region.
Your order's in!
We'll email updates to<EMAIL_ADDRESS>You should get it by Thu, Sept 22.
Congrats! You just listed "Spam and Eggs From the Cow's Perspective (paperback)."
Good news! You get free shipping on your next pair of shoes! Learn more.
Error. Please take another look at the following:
Card number, Expiration date & Security code.
Your order's in!
We'll email updates to<EMAIL_ADDRESS>You should get it by Thu, Sept 22.
Congrats! You just listed "Spam and Eggs From the Cow's Perspective (paperback)."
Good news! You get free shipping on your next pair of shoes! Learn more.
Error. Please take another look at the following:
Card number, Expiration date & Security code.
Section notices are used to provide tips, guidance & feedback on section level elements. Section notices are not as prominent as page level alerts, but still educate the user without alarming them.
A section-level notice may have the following status: default (no icon), confirmation, information or attention.
Items you didn't win will now show in the Didn't win section of this page.
This successfully finished next page
Good news! You get free shipping on your next pair of shoes! Learn more.
Error. Please take another look at the following:
Card number, Expiration date & Security code.
Items you didn't win will now show in the Didn't win section of this page.
This successfully finished next page
Good news! You get free shipping on your next pair of shoes! Learn more.
Error. Please take another look at the following:
Card number, Expiration date & Security code.
An inline-level notice provides tips, guidance and feedback on individual elements and form controls.
An inline-level notice may have a status of confirmation, information or attention.
Delivered on May 1, 2017
Tracking number:<PHONE_NUMBER>9376898908657567
Global Shipping Program transaction.
Update your credit card.
Delivered on May 1, 2017
Tracking number:<PHONE_NUMBER>9376898908657567
Global Shipping Program transaction.
Update your credit card.


Package org.apache.shiro.web.env
Interface WebEnvironment
-
- All Superinterfaces:
Environment
- All Known Subinterfaces:
MutableWebEnvironment
- All Known Implementing Classes:
DefaultWebEnvironment
,IniWebEnvironment
,ResourceBasedWebEnvironment
public interface WebEnvironment extends Environment
A web-specificEnvironment
instance, used in web applications.- Since:
- 1.2
-
-
Method Summary
All Methods Instance Methods Abstract Methods Default Methods Modifier and Type Method Description FilterChainResolver
getFilterChainResolver()
Returns the web application'sFilterChainResolver
if one has been configured ornull
if one is not available.ServletContext
getServletContext()
Returns theServletContext
associated with thisWebEnvironment
instance.default ShiroFilterConfiguration
getShiroFilterConfiguration()
Returns the configuration object used to configure the ShiroFilter.WebSecurityManager
getWebSecurityManager()
Returns the web application's security manager instance.-
Methods inherited from interface org.apache.shiro.env.Environment
getSecurityManager
-
-
-
-
Method Detail
-
getFilterChainResolver
FilterChainResolver getFilterChainResolver()
Returns the web application'sFilterChainResolver
if one has been configured ornull
if one is not available.- Returns:
- the web application's
FilterChainResolver
if one has been configured ornull
if one is not available.
-
getServletContext
ServletContext getServletContext()
Returns theServletContext
associated with thisWebEnvironment
instance. A web application typically only has a singleWebEnvironment
associated with itsServletContext
.- Returns:
- the
ServletContext
associated with thisWebEnvironment
instance.
-
getWebSecurityManager
WebSecurityManager getWebSecurityManager()
Returns the web application's security manager instance.- Returns:
- the web application's security manager instance.
-
getShiroFilterConfiguration
default ShiroFilterConfiguration getShiroFilterConfiguration()
Returns the configuration object used to configure the ShiroFilter.- Returns:
- the configuration object used to configure the ShiroFilter.
-
-


County: {{tree.county}}, {{tree.state}}
Scientific Name: {{tree.scientific_name}}
Points: {{tree.points}}
Tree ID: {{tree.id}}
Circumference: {{tree.circumference}} in.
Height: {{tree.height}} ft.
Crown Spread: {{tree.crown_spread}}
Was nominated by {{tree.nominated_by}} in the year {{tree.year_nominated}}.
Was crowned on {{tree.date_crowned}}.


3.2. PREDICTIVE PARSING
a
c
d
X
X
→
a
X
→
Y
X
→
Y
X
→
Y
Y
Y
→
Y
→
Y
→
c
Y
→
Z
Z
→
XY Z
Z
→
XY Z
Z
→
d
Z
→
XY Z
FIGURE 3.14.
Predictive parsing table for
Grammar 3.12.
and similarly, we say that a string
γ
is nullable if each symbol in
γ
is nullable.
CONSTRUCTING A PREDICTIVE PARSER
Consider a recursive-descent parser. The parsing function for some nontermi-
nal
X
has a clause for each
X
-production; it must choose one of these clauses
based on the next token
T
of the input. If we can choose the right produc-
tion for each
(
X
,
T
)
, then we can write the recursive-descent parser. All the
information we need can be encoded as a two-dimensional table of produc-
tions, indexed by nonterminals
X
and terminals
T
. This is called a
predictive
parsing
table.
To construct this table, enter production
X
→
γ
in row
X
, column
T
of
the table for each
T
∈
FIRST
(
γ
)
. Also, if
γ
is nullable, enter the production
in row
X
, column
T
for each
T
∈
FOLLOW
[
X
]
.
Figure 3.14
shows the predictive parser for
Grammar 3.12.
But some of the
entries contain more than one production! The presence of duplicate entries
means that predictive parsing will not work on
Grammar 3.12.
If we examine the grammar more closely, we ﬁnd that it is ambiguous. The
sentence
d
has many parse trees, including:
.
Z
d
.
Z
X
Y
Y
Z
d
An ambiguous grammar will always lead to duplicate entries in a predictive
parsing table. If we need to use the language of
Grammar 3.12
as a program-
ming language, we will need to ﬁnd an unambiguous grammar.
Grammars whose predictive parsing tables contain no duplicate entries
51