In this tutorial, I am going to use the Spray Client, Akka IO and core Akka to build an application that streams tweets and then performs trivial analysis of the received data. It shows you how to build a simple Akka application with just a few actors, how to use Akka IO to make HTTP requests, how to wire in OAuth, and how to deal with streaming input. It also demonstrates approaches to testing of such applications.
It should allow us to track specific Twitter topics, and analyse the received tweets, giving the following output
Let's begin by showing the overall structure of the code we're building.
The components in blue are actors, the components in orange are traits; and we shall be providing some interesting implementations of those traits.
I begin by constructing the core of our system. It contains two actors one that deals with the HTTP connection to Twitter, and one that deals with processing of the tweets as they arrive. In code, they are the TweetStreamerActor
, and SentimentAnalysisActor
. The TweetStreamerActor
needs the URI to connect to and the reference to the actor that is going to perform the sentiment analysis. Thus, we arrive at
object TweetStreamerActor {
val twitterUri = Uri("https://stream.twitter.com/1.1/statuses/filter.json")
}
class TweetStreamerActor(uri: Uri, processor: ActorRef) extends Actor {
...
}
class SentimentAnalysisActor extends Actor {
...
}
For our convenience, I included the TweetStreamerActor
companion object, which contains the uri to Twitter's streaming API. To construct our application, all we need to do is to instantiate the actors in the right sequence
object Main extends App {
import Commands._
val system = ActorSystem()
val sentiment = system.actorOf(Props(new SentimentAnalysisActor))
val stream = system.actorOf(Props(new TweetStreamerActor(TweetStreamerActor.twitterUri, sentiment)))
...
}
Next up, let's write the core of the TweetStreamerActor
We construct the Akka IO, and then construct the appropriate HttpRequest
that we send to the given uri
.
class TweetStreamerActor(uri: Uri, processor: ActorRef) extends Actor {
val io = IO(Http)(context.system)
def receive: Receive = {
case query: String =>
val body = HttpEntity(ContentType(MediaTypes.`application/x-www-form-urlencoded`), s"track=$query")
val rq = HttpRequest(HttpMethods.POST, uri = uri, entity = body)
sendTo(io).withResponsesReceivedBy(self)(rq)
case MessageChunk(entity, _) =>
case _ =>
}
}
Dissecting the TweetStreamerActor
, we first get the reference (an ActorRef
no less) to the HTTP manager by calling IO(Http)(system.context)
. This actor is responsible for dealing with all HTTP communication; in our case, we'll be sending the HttpRequest
s to it.
And that's precisely what we do in the receive
function. When the query: String
message arrives, we construct the HTTP request and then call sendTo(io).withResponsesReceivedBy(self)(rq)
, which--in human speak--means take the IO actor (sendTo(io)), have it send all received responses to this actor (withResponsesReceivedBy(self)), and apply the request to it (rq). And so, Spray client is going to send the responses to the request to this actor, which means that we have to handle ChunkedResponseStart
, MessageChunk
, and many other HTTP messages. However, the only HTTP layer message we're really interested in is the MessageChunk
, whose entity
contains the JSON that represents each tweet.
Being strongly-typed, we would like to deal with our own types, not JSON String
s. And so, we must implement an unmarshaller that can turn the entity into an instance of Tweet
. To do that, we'll use Spray JSON module, and define an instance of the Unmarshaller
typeclass for the type Tweet
.
trait TweetMarshaller {
implicit object TweetUnmarshaller extends Unmarshaller[Tweet] {
def apply(entity: HttpEntity): Deserialized[Tweet] = {
???
}
}
}
I will not show all the boring JSON gymnastics; instead, I'll just outline the main points. Our typeclass instance must implement the apply(HttpEntity): Deserialized[Tweet]
method; Deserialized[A]
is a type alias for Either[DeserializationError, T]
.
trait TweetMarshaller {
implicit object TweetUnmarshaller extends Unmarshaller[Tweet] {
def mkUser(user: JsObject): Deserialized[User] = ...
def mkPlace(place: JsValue): Deserialized[Option[Place]] = ...
def apply(entity: HttpEntity): Deserialized[Tweet] = {
Try {
val json = JsonParser(entity.asString).asJsObject
(json.fields.get("id_str"), json.fields.get("text"), json.fields.get("place"), json.fields.get("user")) match {
case (Some(JsString(id)), Some(JsString(text)), Some(place), Some(user: JsObject)) =>
val x = mkUser(user).fold(x => Left(x), { user =>
mkPlace(place).fold(x => Left(x), { place =>
Right(Tweet(id, user, text, place))
})
})
x
case _ => Left(MalformedContent("bad tweet"))
}
}
}.getOrElse(Left(MalformedContent("bad json")))
}
}
Folding the instances of Deserialized[_]
, we arrive at code that can (safely) turn a JSON that may represent a tweet into an instance of Tweet
. Let's now wire add the TweetMarshaller
to our TweetStreamerActor
and use it when dealing with the MessageChunk
message.
class TweetStreamerActor(uri: Uri, processor: ActorRef) extends Actor with TweetMarshaller {
def receive: Receive = {
...
case MessageChunk(entity, _) => TweetUnmarshaller(entity).fold(_ => (), processor !)
case _ =>
}
}
Notice that I've mixed in the TweetMarshaller
to the actor using the with
keyword. This give me access to the TweetUnmarshaller
typeclass instance, and I call its apply
method to the received entity
. It then gives me Deserialized[Tweet]
, fold the result into ()
by "ignoring" the values on the Left
s and by sending the values on the Right
to the processor
. This is a terse way of writing the usual pattern match
class TweetStreamerActor(uri: Uri, processor: ActorRef) extends Actor with TweetMarshaller {
def receive: Receive = {
...
case MessageChunk(entity, _) =>
TweetUnmarshaller(entity) match {
case Right(tweet) => processor ! tweet
case _ =>
}
}
}
Onwards. Let's see if our code runs as expected by writing a test; a test that constructs the HTTP server that serves the tweet responses like the real Twitter API, and by using the TweetStreamerActor
to check that it can deal with the received responses. The test, in its entirety fits on just a few lines of code
class TweetStreamerActorSpec extends TestKit(ActorSystem()) with SpecificationLike with ImplicitSender {
sequential
val port = 12345
val tweetStream = TestActorRef(
new TweetStreamerActor(Uri(s"http://localhost:$port/"), testActor))
"Streaming tweets" >> {
"Should unmarshal one tweet" in {
val twitterApi = TwitterApi(port)
tweetStream ! "quux" // our TwitterApi does not care
val tweet = expectMsgType[Tweet]
tweet.text mustEqual "Aggressive Ponytail #freebandnames"
tweet.user.lang mustEqual "en"
tweet.user.id mustEqual "137238150"
tweet.place mustEqual None
twitterApi.stop()
success
}
}
}
Notice how I make the most of Akka's TestKit and use the testActorRef
as the processor
parameter of the TweetStreamerActor
. This allows me to examine the received responses--viz the line expectMsgType[Tweet]
. Before we move on to the real Twitter API, I will show the implementation of the TwitterApi
our test-only HTTP server that simulates the Twitter API.
class TwitterApi private(system: ActorSystem, port: Int, body: String) {
private class Service extends Actor {
def receive: Receive = {
case _: Http.Connected =>
sender ! Http.Register(self)
case HttpRequest(HttpMethods.POST, _, _, _, _) =>
sender ! ChunkedResponseStart(HttpResponse(StatusCodes.OK))
sender ! MessageChunk(body = body)
sender ! ChunkedMessageEnd()
}
}
val service = system.actorOf(Props(new Service))
val io = IO(Http)(system)
io ! Http.Bind(service, "localhost", port = port)
def stop(): Unit = {
io ! Http.Unbind
system.stop(service)
system.stop(io)
}
}
object TwitterApi {
def apply(port: Int)(implicit system: ActorSystem): TwitterApi = {
val body = Source.fromInputStream(getClass.getResourceAsStream("/tweet.json")).mkString
new TwitterApi(system, port, body)
}
}
It too uses the Akka IO's Http extension, but this time, to bind the Service
to the localhost
interface on the given port
. Whenever a client connects (by sending the Http.Connected
message), I register the same actor to handle the requests from that client by replying with Http.Register(self)
. (This means that our Service
is a singleton handler all clients are handled by the same actor.) Because I have registered self
to be the handler for all client connections, I must react to the HttpRequest
messages the clients send. In my case, I respond to every HTTP POST by chunking the content of the /tweet.json
resource.
Before I can move on to the big data code, I must deal with the authorization that Twitter requires. Twitter requires OAuth authorization of all requests. Most trivially, this means adding the Authorization
HTTP header with properly constructed value. To put it even another way, to authorize a HttpRequest
is to take the original request and return a new HttpRequest
that includes the appropriate header. To do so in the context of OAuth, I also need to know the consumer token and secret and the token key and secret. And this is enough to allow me to give the outline in Scala
object OAuth {
case class Consumer(key: String, secret: String)
case class Token(value: String, secret: String)
def oAuthAuthorizer(consumer: Consumer, token: Token): HttpRequest => HttpRequest = {
// magic
???
}
}
The shape of the code above matches what I said above to OAuth-authorize a HttpRequest, I need to know the details of the consumer and token; and the authorization process takes an unauthorized HttpRequest
and adds the required authorization to it.
I can now add the OAuth authorization to the TweetStreamerActor
. However, instead of just "hard coding" it in, I will define a few traits that will allow me to control the instances of the TweetStreamerActor
s. I define
trait TwitterAuthorization {
def authorize: HttpRequest => HttpRequest
}
And then require that the instances of the TweetStreamerActor
be instantiated with the appropriate implementation of the TwitterAuthorization
. In other words, the Cake pattern with self-type annotations.
class TweetStreamerActor(uri: Uri, processor: ActorRef) extends Actor with TweetMarshaller {
this: TwitterAuthorization =>
...
}
I also provide an implementation of the TwitterAuthorization
that uses the OAuth machinery, and loads the consumer and token details from a file. (So that you don't include the authorization details in your code.)
trait OAuthTwitterAuthorization extends TwitterAuthorization {
import OAuth._
val home = System.getProperty("user.home")
val lines = Source.fromFile(s"$home/.twitter/activator").getLines().toList
val consumer = Consumer(lines(0), lines(1))
val token = Token(lines(2), lines(3))
val authorize: (HttpRequest) => HttpRequest = oAuthAuthorizer(consumer, token)
}
Notice in particular that I satisfy the def authorize: HttpRequest => HttpRequest
by having the field authorize
, whose value is computed by applying the oAuthAuthorizer
to the consumer and token. Finally, I must actually apply the authorization to the HttpRequest
s I send out in the TweetStreamerActor
. Nothing could be simpler. I just add ~> authorize
to the HttpRequest
I create when handling the query: String
message.
class TweetStreamerActor(uri: Uri, processor: ActorRef) extends Actor with TweetMarshaller {
this: TwitterAuthorization =>
...
def receive: Receive = {
case query: String =>
val body = HttpEntity(ContentType(MediaTypes.`application/x-www-form-urlencoded`), s"track=$query")
val rq = HttpRequest(HttpMethods.POST, uri = uri, entity = body) ~> authorize
sendTo(io).withResponsesReceivedBy(self)(rq)
...
}
}
To complete, I need to modify the test and the app to satisfy the self-type annotation. The test does not actually require any authorization
class TweetStreamerActorSpec extends TestKit(ActorSystem()) with SpecificationLike with ImplicitSender {
sequential
val port = 12345
val tweetStream = TestActorRef(
new TweetStreamerActor(Uri(s"http://localhost:$port/"), testActor)
with TwitterAuthorization {
def authorize = identity
})
...
}
I must implement the authorize
member, which returns HttpRequest => HttpRequest
function. But for tests, the returned function returns the value it is given; it is therefore the identity
function.
In the app, I mix in the OAuthTwitterAuthorization
trait when constructing the TweetStreamerActor
.
object Main extends App {
import Commands._
val system = ActorSystem()
val sentiment = system.actorOf(Props(new SentimentAnalysisActor))
val stream = system.actorOf(Props(
new TweetStreamerActor(TweetStreamerActor.twitterUri, sentiment)
with OAuthTwitterAuthorization))
...
}
I now have code that successfully streams the tweets from Twitter's streaming API, I have OAuth authorization; the last component I need is the sentiment analysis.
The sentiment analysis receives the Tweet
instances and should analyse the tweets. To perform the analysis, I will need sets of positive and negative words; and a way to display the output. I would also like to have some flexibility in constructing the sentiment analyzer. And so, I arrive at
trait SentimentSets {
def positiveWords: Set[String]
def negativeWords: Set[String]
}
trait SentimentOutput {
type Category = String
def outputCount(values: List[Iterable[(Category, Int)]]): Unit
}
And require the SentimentAnalysisActor
to be instantiated with the appropriate implementations of the SentimentSets
and SentimentOutput
.
class SentimentAnalysisActor extends Actor {
this: SentimentSets with SentimentOutput =>
...
}
When the SentimentAnalysisActor
receives a Tweet
, it finds out if its text is in the positiveWords
or negativeWords
, incrementing the counts of positive and negative tweets, respectively. It also keeps track of counts of tweets depending on the tweet's place and language. Without further ado, the entire SentimentAnalysisActor
is just
class SentimentAnalysisActor extends Actor {
this: SentimentSets with SentimentOutput =>
import collection._
private val counts = mutable.Map[Category, Int]()
private val languages = mutable.Map[Category, Int]()
private val places = mutable.Map[Category, Int]()
private def update(data: mutable.Map[Category, Int])
(category: Category, delta: Int): Unit =
data.put(category, data.getOrElse(category, 0) + delta)
val updateCounts = update(counts)_
val updateLanguages = update(languages)_
val updatePlaces = update(places)_
def receive: Receive = {
case tweet: Tweet =>
val text = tweet.text.toLowerCase
val positive = if (positiveWords.exists(text contains)) 1 else 0
val negative = if (negativeWords.exists(text contains)) 1 else 0
updateCounts("positive", positive)
updateCounts("negative", negative)
if (tweet.user.followersCount > 200) {
updateCounts("positive.gurus", positive)
updateCounts("negative.gurus", negative)
}
updateCounts("all", 1)
updateLanguages(tweet.user.lang, 1)
updatePlaces(tweet.place.toString, 1)
outputCount(List(counts, places, languages))
}
}
There is one implementation of the SentimentSets
the CSVLoadedSentimentSets
, which loads the sentiment sets from CSV files on the classpath; there is also one implementation of the SentimentOutput
, which displays the output on the ANSI terminal.
The "proper" instantiation of the SentimentAnalysisActor
in the app becomes
object Main extends App {
import Commands._
val system = ActorSystem()
val sentiment = system.actorOf(Props(new SentimentAnalysisActor with CSVLoadedSentimentSets with AnsiConsoleSentimentOutput))
val stream = system.actorOf(Props(new TweetStreamerActor(TweetStreamerActor.twitterUri, sentiment) with OAuthTwitterAuthorization))
...
}
Now that we have all the required code, we can create the app that you can run. It runs a simple command loop that reads the standard input, interprets the commands you type in, and then send the messages to the TweetStreamerActor
.
object Main extends App {
import Commands._
val system = ActorSystem()
val sentiment = system.actorOf(Props(new SentimentAnalysisActor with CSVLoadedSentimentSets with AnsiConsoleSentimentOutput))
val stream = system.actorOf(Props(new TweetStreamerActor(TweetStreamerActor.twitterUri, sentiment) with OAuthTwitterAuthorization))
@tailrec
private def commandLoop(): Unit = {
Console.readLine() match {
case QuitCommand => return
case TrackCommand(query) => stream ! query
case _ => println("WTF??!!")
}
commandLoop()
}
commandLoop()
system.shutdown()
}
object Commands {
val QuitCommand = "quit"
val TrackCommand = "track (.*)".r
}
Before you run the application, remember to create the ~/.twitter/activator
file, containing four lines; these lines represent your twitter consumer key and secret, followed by token value and token secret. To generate these values, head over to https//dev.twitter.com/apps/, create an application and add the appropriate lines to this file. An example ~/.twitter/activator
is
*************TqOdlxA
****************************Fv9b1ELexCRhI
********-*************************GUjmnWQvZ5GwnBR2
***********************************ybgUNqrZwD
Naturally, the you will need to replace the *
s with the values in your consumer token and secret; and token value and secret.
Having added the file above, you can see the application "in action", by running sbt run
in an ANSI terminal. Once running, type in track christmas
, track daley
, or anything else that tickles your fancy and rejoice in the humanity's collective wisdom.


Status: Passed, as amended, Mar 89 X3J13Issue: BREAK-ON-WARNINGS-OBSOLETE
Forum: Cleanup
References: *BREAK-ON-WARNINGS* (CLtL p432, CL Condition System p40)
*BREAK-ON-SIGNALS* (CL Condition System p25)
Category: CLARIFICATION/CHANGE
Edit history: 07-Mar-89, Version 1 by Pitman
8-Apr-89, Version 2 by Masinter (as amended; update discussion)
Problem Description:
With the advent of *BREAK-ON-SIGNALS*, *BREAK-ON-WARNINGS* is
redundant and unnecessary.
Proposal (BREAK-ON-WARNINGS-OBSOLETE:REMOVE):
Remove *BREAK-ON-WARNINGS*.
Test Case:
N/A
Rationale:
This will lead to simplification of the description of WARN.
Not only are the two variables overkill, but they have an effect
in an identifiably but uselessly distinct place.
Current Practice:
Most have *BREAK-ON-WARNINGS*.
Cost to Implementors:
slight.
Cost to Users:
Users will have to write (SETQ *BREAK-ON-SIGNALS* 'WARNING)
rather than (SETQ *BREAK-ON-WARNINGS* T).
Since this is mainly done interactively and not in programs,
the cost is slight.
Cost of Non-Adoption:
The definition of WARN will be gratuitously cluttered.
Benefits:
Cost of non-adoption is avoided.
Aesthetics:
Slight improvement.
Discussion:
Pitman thinks this is a good idea, but doesn't think a lot of time
should be wasted discussing the issue if there is strong opposition.


Try out our Premium Member services: Virtual Legal Assistant, Query Alert Service and an ad-free experience. Free for one month and pay only if you like it.
-1- IN THE HIGH COURT OF JUDICATURE FOR RAJASTHAN AT JODHPUR. J U D G M E N T D.B. Civil Special Appeal (Writ) No.424/2015 M/s Modi Industries v. State of Rajasthan & Ors. Date of Judgment :: 4th August, 2015 P R E S E N T HON'BLE MR.JUSTICE GOVIND MATHUR HON'BLE MISS JUSTICE JAISHREE THAKUR Mr. Sunil Joshi, for the appellant. Mr. Sajjan Singh, Assistant to Dr. P.S.Bhati, Additional Advocate General, for the State. Mr. Manish Shishodia, for respondent Rajasthan State Pollution Control Board. .... BY THE COURT :
Acting upon the direction given by the District Administration, Jodhpur, the Jodhpur Vidhyut Vitran Nigam Limited disconnected electric supply available to the petitioner firm which is having business of printing, dyeing, bleaching and washing of cloths. The District Administration, Jodhpur instructed the Jodhpur Vidhyut Vitran Nigam Limited to disconnect electric supply to the petitioner in pursuance to the directions said to be given by the National Green Tribunal, New Delhi, Circuit Bench at Jodhpur.
The writ petition giving challenge to the disconnection of the electricity supply preferred by the petitioner came to be dismissed by learned Single Bench by order impugned dated 29.5.2015 by observing as under:- -2-
"Having considered the submissions and after perusal of the material placed on record, it is apparent that the respondents have acted pursuant to the direction issued by the NGT by its order dated 27.11.2014, wherein the District Administration of Jodhpur was directed to stop illegal operation of washing, Grey/Printed Cloth received from Pali and Balotra with immediate effect and when despite the order admittedly on the date, the action was taken by the respondents, the petitioner was carrying on activities in contravention of the directions issued by the NGT.
In view of the above, in case, the petitioner wants any relief qua the action taken by the respondents pursuant to the directions dated 27.11.2014 issued by the NGT, the petitioner has to approach the NGT."
In appeal, the argument advanced is that the National Green Tribunal never directed the District Administration, Jodhpur for taking any action to the extent of closing down business of the petitioner firm by disconnecting electricity supply. Without prejudice to the above, it is also stated that even as per the respondents the disconnection of electricity supply was made for violation of the provisions of the Water (Prevention and Control of Pollution) Act, 1974 (hereinafter referred to as 'the Act of 1974'), however, the Act aforesaid nowhere empowers the District Administration to instruct for disconnection of electricity supply. This argument is substantiated with the aid of Section 33-A of the Act of 1974, according to which the power to give directions for stoppage or regulation of supply of electricity is -3- available to the State Pollution Board and that too after adhering the procedure given under the Act of 1974 itself. It is asserted that learned Single Bench failed to appreciate that disconnection of the electricity supply was wholly without jurisdiction and, therefore, the writ petition could have not been dismissed being not maintainable.
Per contra, as per learned counsel for respondent Collector, Jodhpur, the action was taken by the Jodhpur Vidhyut Vitran Nigam Limited under instructions of the District Administration, Jodhpur on directions of the National Green Tribunal by its order dated 27.11.2014.
Heard learned counsel for the parties.
Suffice to mention that before the National Green Tribunal, New Delhi, Circuit Bench at Jodhpur certain Original Applications were filed agitating a common cause about pollution of river Jojari, the peripheral river of Jodhpur City as a result of industrial affluents which are toxic in nature. The Tribunal by order dated 27.11.2014 issued certain interim directions including that "the District Administration may be directed to stop illegal washing of Grey/Printed Cloth received from Pali and Balotra immediately to control the discharge of untreated industrial waste water into river Jojari through RIICO drain".
From perusal of the directions given it is apparent that that National Green Tribunal directed the -4- District Administration, Jodhpur to stop illegal washing of Grey/Printed Cloth received from Pali and Balotra. No authority was given to the District Administration, Jodhpur by the National Green Tribunal to instruct Jodhpur Vidhyut Vitran Nigam Limited to stop electricity supply to the petitioner or any other firm that may be involved in illegal washing of Grey/Printed Cloth received from Pali and Balotra. The petitioner firm is indulged in the business of printing, dyeing, bleaching and washing of cloth and may be receiving cloths from stations other than Pali and Balotra. The disconnection of electricity supply shall close down work of the petitioner firm relating to washing of cloths for other stations also. The District Administration, Jodhpur, therefore, had no authority to issue instructions for disconnection of the electricity supply. The authority available to the District Administration, Jodhpur under the orders of National Green Tribunal is only to the extent of restraining the person/ establishment/firm/company from washing printed/grey cloths received from Pali and Balotra. The measures required to be taken for that purpose must be different than to order for disconnection of electricity supply. It shall also be appropriate to mention that if the District Administration, Jodhpur found the petitioner guilty of any act that may amount to violation of the provisions of the Act of 1974, then the appropriate course was to make a complaint in this regard to the State Pollution Board and the State Pollution Board by acting upon that would have initiated process to stop electricity supply as prescribed under Section 33-A of the Act of 1974.
-5-
For the reasons given above, the impugned action of the Jodhpur Vidhyut Vitran Nigam Limited undertaken at the instance of District Administration, Jodhpur is without jurisdiction, hence is declared illegal. Respondent Jodhpur Vidhyut Vitran Nigam Limited is directed to restore electricity connection of the petitioner forthwith.
The special appeal is allowed accordingly. The acceptance of this appeal shall not prevent the District Administration, Jodhpur to take all necessary steps in consonance with the directions given by the National Green Tribunal under the order dated 27.11.2014 and also the State Pollution Board to take necessary steps to invoke the power under Section 33-A of the Act of 1974.
No order to costs.
(JAISHREE THAKUR),J. (GOVIND MATHUR),J. kkm/ps.


Nissan recalls nearly 400,000 vehicles over braking system defect
by Agency ReportJapan’s Nissan Motor Co. Ltd (7201.T) has said that it will recall 394,025 cars in the US over a braking system defect.
The defect has caused concerns that a brake fluid leak could potentially lead to a fire.
Nissan said this in a filing dated November 8 with the National Highway Traffic Safety Administration under recall number 18V-601.
The leak into internal circuit boards will trigger a warning to drivers, which if ignored may lead to a fire in “rare instances,” Nissan said.
“If the warning is ignored and the vehicle continues to be operated in this condition, the brake fluid leak may potentially create an electrical short in the actuator circuit, which in rare instances, may lead to a fire,” the Japanese automaker said.
The recall, which was reported on Friday by US media, includes Maxima sedans from 2016 through 2018, Infiniti QX60 luxury crossovers from 2017 to 2019, Murano SUVs from 2015 to 2018 and Pathfinder SUVs from 2017 to 2019, the filing showed.
The document does not mention whether the brake system defect actually caused any fires or injuries.
The company also reportedly said that it was working to fix the issue and that owners of the affected cars will be notified starting early December.
“Once the remedy is available, owners will receive a final notification letter asking them to bring their vehicle to an authorised Nissan dealer or INFINITI retailer to have the remedy work completed at no cost for parts or labour,” it told NPR in an emailed statement.
The development comes less than two months after NHTSA opened a preliminary investigation into 553,000 Nissan Rogue sport utility vehicles after reports of their automatic emergency braking systems engaging without warning or an obstruction.
Improper inspections of brakes, steering wheels, speed measurements, and vehicle stability had also caused the company to issue a recall of several thousand vehicles in Japan in late 2018.
In September, the company recalled 1.3 million vehicles to fix a problem with its backup camera displays.
(Reuters/NAN)


| < Day Day Up > |
Hack 85 Downgrade a Port
It doesn't happen often, but occasionally portupgrade will upgrade a port to a newer version that doesn't sit well with your system. It can be very frustrating when an application that was working just fine an hour ago suddenly stops working after an upgrade. Now what? At first glance, the solution isn't obvious. Because ports don't contain revision labels, you can't just cvsup back to an earlier version. However, the commits or changes to each port are tracked in the CVS repository. You could learn the syntax of the cvs command and use it to connect to the CVS repository, manually review the port's commit history, find an earlier version that worked on your system, check out that version, and rebuild the port. Whew! There must be an easier way. That's what Heiner Eichmann thought when he created portdowngrade . His script does all of the work for you; you only need to choose which version of the port to use. 8.10.1 Using portdowngradeInstalling portdowngrade is easy enough: # cd /usr/ports/sysutils/portdowngrade # make install clean A few moments later, you'll have the script and an informative manpage. To run the script, simply specify which port you'd like to downgrade. Here, I'll demonstrate an arbitrary port: # portdowngrade apinger portdowngrade 0.1 by Heiner Eichmann Please note, that nothing is changed in the ports tree unless it is explicitly permitted in step 6! Seeking port apinger ... found: net/apinger Step 1: Checking out port from CVS repository CVS root directory<EMAIL_ADDRESS>Step 2: Reading the port history from the CVS repository Step 3: Analyzing the port history from the CVS repository Step 4: Load port version numbers and present results Keys: <space> : next page d : details p : previous page <enter> : leave presentation and downgrade if wanted number date portversion comment 1 2003/11/05 15:39:39 Fix whitespace. 2 2003/06/07 11:43:13 Fix breakage. 3 2003/06/04 09:49:31 Add startup script for apinger. 4 2003/05/07 11:37:52 Change maintainer email to my @FreeBSD. 5 2003/03/28 03:41:45 Update to 0.6.1 6 2003/02/21 13:14:34 De-pkg-comment. 7 2003/01/02 17:54:17 Update to 0.6 8 2002/10/14 14:02:52 upgrade to 0.5 9 2002/10/05 19:06:00 Upgrade to 0.4.1. 10 2002/07/19 23:02:53 Update to 0.3 11 2002/07/18 12:55:14 Alarm Pinger (apinger) is a little tool Here are the first four of six steps run by portdowngrade. It has logged into the CVS server, found the desired port, and presented you with its commit history. This particular port has had 11 revisions and number 1 is the latest. At this point, the script pauses for user input. I'm going to go back a few revisions to Version 4: Total lines: 11. Command: press enter Enter version number to change port to (0: exit): 4 Step 5: Checking out chosen date of the port from the CVS repository Step 6: Modifying the port Port: net/apinger at : 2003/05/07 11:37:52 Type 'yes' to bring the port to the state of the date above or 'no' to exit without changing anything. Note, that this only changes the port, not the installed software! yes or no: yes The port has been set to the selected version. Install it if you wish. If you have portupgrade installed, you should run portsdb -Uu now, to see the changes in the ports database. In any case portupgrade -f apinger will install the changed port. Note: if you run cvsup, the port is changed back to the chosen label! # When I typed yes, I chose to change the port version in the ports tree. The downgrade won't actually take place until I run portupgrade -f apinger. Note the use of the -f flag to force the reinstallation of an installed port. Since this port has changed in my tree, the reinstallation will overwrite my previously installed version. # portupgrade -f apinger [Updating the pkgdb <format:bdb1_btree> in /var/db/pkg ... - 288 packages found (-0 +2) .. done] ---> Downgrading 'apinger-0.6.1_1' to 'apinger-0.6.1' (net/apinger) <snip build output> = ==> Registering installation for apinger-0.6.1 = ==> Cleaning for apinger-0.6.1 ---> Cleaning out obsolete shared libraries [Updating the pkgdb <format:bdb1_btree> in /var/db/pkg ... - 288 packages found (-0 +1) . done] 8.10.2 Preventing Automated Re-UpgradesYou'll notice that the next time you run your cvsup process [Hack #80], your downgraded port will appear as needing upgrading. If you've totally automated the process, it may re-upgrade to that new, buggy version. It's easy to prevent that from happening. In fact, you can prevent automated upgrading of any port by using the HOLD_PKGS array in pkgtools.conf. Start by copying the sample configuration file to the real configuration file: # cp /usr/local/etc/pkgtools.conf.sample /usr/local/etc/pkgtools.conf Then, open /usr/local/etc/pkgtools.conf in your favorite editor and search for this section: # HOLD_PKGS: array # This is a list of ports you don't want portupgrade(1) to upgrade, # portversion(1) to suggest upgrading, or pkgdb(1) to fix. # You can use wildcards ("ports glob" and "pkgname glob"). # -f/--force with each command will override the held status. # e.g.: # HOLD_PKGS = [ # 'bsdpan-*', # 'x11*/XFree86*', # ] HOLD_PKGS = [ 'bsdpan-*', ] Simply follow the syntax to add the packages you want to keep as is: HOLD_PKGS = [ 'bsdpan-*', 'apinger-*', ] 8.10.3 See Also
|
| < Day Day Up > |


Ettimadai, Coimbatore
ATTENTION FRESHERS UNDER GRADUATE PROGRAMME SHOW CASE YOUR TALENTS
Register using your mail BEFORE 30-10-2020 as soon as possible and participate in the events you're interested. After registration hand over the hard copy of the registration form to the physical education department and to your respective department secretaries to claim OD. On spot registrations are permitted in exigencies.
Your previous achievements is in our records making it easier for you to keep track and generate report
Sign up here and register for any event in which you're interested. There are a plenty of events going on, check out.
Find friends with similar interests and form up a team for group events
Group/Solo Instrumental, Vocal ( Carnatic, Western, Pop), Beatboxing, Sing along events
Group/Solo Contemporary, Ballet, Hip Hop, Jazz, Ballroom, Folk Dance, Split dance
Solo Oil painting, Wall painting, Digital Arts, Room decor, Glass/Diya painting
We're here to answer your questions.
Ettimadai, Coimbatore
<EMAIL_ADDRESS>555-333-555


You are here: Home Dive Into HTML5
Geolocation is the art of figuring out where you are in the world and (optionally) sharing that information with people you trust, which cell tower your phone is talking to, or dedicated GPS hardware that calculates latitude and longitude from information sent by satellites in the sky.
Q: Geolocation sounds scary. Can I turn it off?
A: Privacy is an obvious concern when you`re talking about sharing your physical location with a remote web server. "User Agents must not send location information to Web sites without the express permission of the user." In other words, sharing your location is always opt-in. If you don`t want to, you don`t have to.
The geolocation API lets you share your location with trusted web sites. The latitude and longitude are available to JavaScript on the page, which in turn can send it back to the remote web server and do fancy location-aware things like finding local businesses or showing your location on a map.
As you can see from the following table, the geolocation API is supported by most browsers on the desktop and mobile devices. Additionally, some older browsers and devices can be supported by wrapper libraries, as we`ll see later in this chapter.
| IE | Firefox | Safari | Chrome | Opera | iPhone | Android |
|---|---|---|---|---|---|---|
| 9.0+ | 3.5+ | 5.0+ | 5.0+ | 10.6+ | 3.0+ | 2.0+ |
Along with support for the standard geolocation API, there are a plethora of device-specific APIs on other mobile platforms. I`ll cover all that later in this chapter.
The geolocation API centers around a new property on the global navigator
object: navigator.geolocation
.
The simplest use of the geolocation API looks like this:
function get_location() {
navigator.geolocation.getCurrentPosition(show_map);
}
That has no detection, no error handling, and no options. Your web application should probably include at least the first two of those. To detect support for the geolocation API, you can use Modernizr:
function get_location() {
if (Modernizr.geolocation) {
navigator.geolocation.getCurrentPosition(show_map);
} else {
// no native support; maybe try a fallback?
}
}
I CAN HAS GEO?
What you do without geolocation support is up to you. I`ll explain the JavaScript fallback
option in a minute, but first I want to talk about what happens during that call to getCurrentPosition()
. As I mentioned at the beginning of this chapter, geolocation support is opt-in.
That means your browser will never force you to reveal your current physical location to a remote server.
The user experience differs from browser to browser. In Mozilla Firefox, calling the getCurrentPosition()
function of the geolocation API will cause the browser to pop up an “infobar" at the top of the browser window.
The infobar looks like this:
There`s a lot going on here. You, as the end user,
Furthermore, this infobar is
You just saw the JavaScript code that causes this infobar to appear. It`s a single function call which takes a callback
function (which I called show_map
). The call to getCurrentPosition()
will return immediately, but
that doesn`t mean that you have access to the user`s location. The first time you are guaranteed to have location information
is in the callback function. The callback function looks like this:
function show_map(position) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
// let's show a map or do something interesting!
}
The callback function will be called with a single parameter, an object with two properties: coords
and
timestamp
. The timestamp is just that, the date and time when the location was calculated. (Since this is
all happening asynchronously, you can`t really know when that will happen in advance. It might take some time for the
user to read the infobar and agree to share their location. Devices with dedicated GPS hardware may take
some more time to connect to a GPS satellite. And so on.) The coords
object has properties
like latitude
and longitude
which are exactly what they sound like: the user`s physical
location in the world.
| Property | Type | Notes |
|---|---|---|
coords.latitude |
double | decimal degrees |
coords.longitude |
double | decimal degrees |
coords.altitude |
double or null |
meters above the reference ellipsoid |
coords.accuracy |
double | meters |
coords.altitudeAccuracy |
double or null |
meters |
coords.heading |
double or null |
degrees clockwise from true north |
coords.speed |
double or null |
meters/second |
timestamp |
DOMTimeStamp | like a Date() object |
Only three of the properties are guaranteed to be there (coords.latitude
, coords.longitude
,
and coords.accuracy
). The rest might come back null
, depending on the capabilities of your device
and the backend positioning server that it talks to. The heading
and speed
properties are calculated
based on the user`s previous position, if possible.
Geolocation is complicated. Things can go wrong. I`ve mentioned the “user consent" angle already. If your web
application wants the user`s location but the user doesn`t want to give it to you, you`re screwed. The user always wins.
But what does that look like in code? It looks like the second argument to the getCurrentPosition()
function:
an error handling callback function.
navigator.geolocation.getCurrentPosition(
show_map, handle_error)
If anything goes wrong, your error callback function will be called with a PositionError
object.
| Property | Type | Notes |
|---|---|---|
code |
short | an enumerated value |
message |
DOMString | not intended for end users |
The code
property will be one of
PERMISSION_DENIED
(1
) if the user clicks that “Don`t Share" button or
otherwise denies you access to their location.
POSITION_UNAVAILABLE
(2
) if the network is down or the positioning
satellites can`t be contacted.
TIMEOUT
(3
) if the network is up but it takes too long to calculate
the user`s position. How long is “too long"? I`ll show you how to define that in the next section.
Be gracious in defeat
function handle_error(err) {
if (err.code == 1) {
// user said no!
}
}
Q: Does the geolocation API work on the International Space Station, on the moon, or on other planets?
A: The geolocation specification states, “The geographic coordinate reference system used by the attributes in this interface is the World Geodetic System (2d) [WGS84]. No other reference system is supported." The International Space Station is orbiting Earth, so astronauts on the station can describe their location by latitude, longitude, and altitude. However, the World Geodetic System is Earth-centric, so it can`t be used to describe locations on the moon or on other planets.
Some popular mobile devices — like the iPhone and Android phones — support two methods of figuring out where you are. The first method triangulates your position based on your relative proximity to different cellular towers operated by your phone carrier. This method is fast and doesn`t require any dedicated GPS hardware, but it only gives you a rough idea of where you are. Depending on how many cell towers are in your area, “a rough idea" could be as little as one city block or as much as a kilometer in every direction.
The second method actually uses dedicated GPS hardware on your device to talk to dedicated GPS positioning satellites that are orbiting the Earth. GPS can usually pinpoint your location within a few meters. The downside is that the dedicated GPS chip on your device draws a lot of power, so phones and other general purpose mobile devices usually turn off the chip until it`s needed. That means there will be a startup delay while the chip is initializing its connection with the GPS satellites in the sky. If you`ve ever used Google Maps on an iPhone or other smartphone, you`ve seen both methods in action. First you see a large circle that approximates your position (finding the nearest cell tower), then a smaller circle (triangulating with other cell towers), then a single dot with an exaction position (given by GPS satellites).
The reason I mention this is that, depending on your web application, you may not need high accuracy. If you`re just looking for nearby movie listings, a "low accuracy" location is probably good enough. There aren`t that many movie theaters, even in dense cities, and you`ll probably be listing more than one of them anyway. On the other hand, if you`re giving turn by turn directions in real time, you really do need to know exactly where the user is so you can say “turn right in 20 meters" or whatever.
The getCurrentPosition()
function has an optional third argument, a
PositionOptions
object. There are three properties you can set in a PositionOptions
object.
All the properties are optional. You can set any or all or none of them.
| Property | Type | Default | Notes |
|---|---|---|---|
enableHighAccuracy |
Boolean | false | true might be slower |
timeout |
long | (no default) | in milliseconds |
maximumAge |
long | 0 | in milliseconds |
The enableHighAccuracy
property is exactly what it sounds like. If true, and the device can support it,
and the user consents to sharing their exact location, then the device will try to provide it. Both iPhones and Androi
d phones have separate permissions for low- and high-accuracy positioning, so it is possible that calling
getCurrentPosition()
with enableHighAccuracy:true
will fail, but calling with
enableHighAccuracy:false
would succeed.
The timeout
property is the number of milliseconds your web application is willing to wait for a position.
This timer doesn`t start counting down until after the user gives permission to even try to calculate their position.
You`re not timing the user; you`re timing the network.
The maximumAge
property allows the device to answer immediately with a cached position. For example,
let`s say you call getCurrentPosition()
for the first time, the user consents, and your success callback
function is called with a position that was calculated at exactly 10:00 AM. Exactly one minute later, at 10:01 AM,
you call getCurrentPosition()
again with a maximumAge
property of 75000
.
navigator.geolocation.getCurrentPosition(
success_callback, error_callback, {maximumAge: 75000});
What you`re saying is that you don`t necessarily need the user`s current location. You would be satisfied
with knowing where they were 75 seconds ago (75000 milliseconds). The device knows where the user was 60 seconds
ago (60000 milliseconds), because it calculated their location after the first time you called getCurrentPosition()
.
So the device doesn`t bother to recalculate the user`s current location. It just returns exactly the same information it returned
the first time: same latitude and longitude, same accuracy, and same timestamp (10:00 AM).
Before you ask for the user`s location, you should think about just how much accuracy you need, and set
enableHighAccuracy
accordingly. If you need to find their location more than once, you should
think about how old the information could be and still be useful, and set maximumAge
accordingly.
If you need to find their location continuously, then getCurrentPosition()
is not for you.
You need to upgrade to watchPosition()
.
The watchPosition()
function has the same structure as getCurrentPosition()
.
It takes two callback functions, a required one for success and an optional one for error conditions, and
it can also take an optional PositionOptions
object that has all the same properties you just
learned about. The difference is that your callback function will be called every time the user`s location
changes. There is no need to actively poll their position. The device will determine the optimal polling
interval, and it will call your callback function whenever it determines that the user`s position has changed.
You can use this to update a visible marker on a map, provide instructions on where to go next, or whatever
you like. It`s entirely up to you.
The watchPosition()
function itself returns a number. You should probably store this number somewhere.
If you ever want to stop watching the user`s location change, you can call the clearWatch()
method and pass
it this number, and the device will stop calling your callback function. If you`ve ever used the setInterval()
and clearInterval()
functions in JavaScript, this works the same way.
Prior to version 9 (technically 9.0RC1), Internet Explorer did not support the W3C geolocation API that I`ve just described. But don`t despair! For these prior versions, we will need a JavaScript fallback. It`s not quite the same as the W3C geolocation API, but it serves the same purpose.
While we`re on the subject of legacy platforms, I should point out that many older mobile phone platforms had their own device-specific geolocation APIs. BlackBerry, Nokia, Palm, and OMTP BONDI all provide their own geolocation APIs. Of course, they all work differently which in turn works differently from the W3C geolocation API. Wheeeeee!
Now you`re ready to use whichever geolocation API is installed.
if (geoPosition.init()) {
geoPosition.getCurrentPosition(geoSuccess, geoError);
}
Let`s take that one step at a time. First, you need to explicitly call an init()
function. The init()
function returns true
if a supported geolocation
API is available.
if (geoPosition.init()) {
Calling the init()
function does not actually find your location.
It just verifies that finding your location is possible. To actually find your location,
you need to call the getCurrentPosition()
function.
geoPosition.getCurrentPosition(geoSuccess, geo_error);
The getCurrentPosition()
function will trigger your browser to ask for
your permission to find and share your location. If your browser natively supports the geolocation
API, it will display an infobar at the top of the page asking whether you want
to share your location with this web site.
The getCurrentPosition()
function takes two callback functions as arguments.
If the getCurrentPosition()
function was successful in finding your location — that is,
you gave your permission and the geolocation API actually worked its magic — it will
call the function passed in as the first argument. In this example, the success callback function
is called geo_success
.
geoPosition.getCurrentPosition(geoSuccess, geoError);
The success callback function takes a single argument, which contains the position information.
Success callback
function geoSuccess(p) {
alert("Found you at latitude " + p.coords.latitude +
", longitude " + p.coords.longitude);
}
If the getCurrentPosition()
function could not find your location — either because you
declined to give your permission, or the geolocation API failed for some reason — it will
call the function passed in as the second argument. In this example, the failure callback function is
called geoError
.
geoPosition.getCurrentPosition(geoSuccess, geoError);
The failure callback function takes no arguments.
Failure callback
function geoError() {
alert("Could not find you!");
}
geoPosition.js
does not currently support the watchPosition()
function.
If you need continuous location information, you`ll need to actively poll getCurrentPosition()
yourself.
Here is a live example of using geoPosition.js
to attempt to
get your location and display a map of your immediate surroundings:
Your browser supports geolocation. Click to look up your location.
How does it work? Let`s take a look. On page load, this page calls geoPosition.init()
to determine whether geolocation is available through any of the interfaces that geoPosition.js
supports.  Clicking that link calls the
lookup_location()
function, shown here:
function lookup_location() {
geoPosition.getCurrentPosition(show_map, show_map_error);
}
If you give your consent to track your location, and the backend service was actually able
to determine your location, geoPosition.js
calls the first callback function, show_map()
,
with a single argument, loc
. The loc
object has a coords
property which contains
latitude, longitude, and accuracy information. (This example doesn`t use the accuracy information.) The rest of the
show_map()
function uses the Google Maps API to set up an embedded map.
function show_map(loc) {
$("#geo-wrapper").css({'width':'320px','height':'350px'});
var map = new GMap2(document.getElementById("geo-wrapper"));
var center = new GLatLng(loc.coords.latitude, loc.coords.longitude);
map.setCenter(center, 14);
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());
map.addOverlay(new GMarker(center, {draggable: false, title: "You are here (more or less)"}));
}
If geoPosition.js
is unable to determine your location, it calls the second callback function, show_map_error()
.
function show_map_error() {
$("#live-geolocation").html('Unable to determine your location.');
}
Some additional info


© 2019 Travelscape LLC. All rights reserved. Travelocity, the Stars Design, and The Roaming Gnome Design are trademarks of Travelscape LLC. Use of this Web site constitutes acceptance of the Travelocity User Agreement and Privacy Policy. CST# 2083930-50


I have supervised undergraduate students at Cambridge since 2022 in the subjects listed below. Parts IA, IB, and II refer respectively to the first, second, and third years of an undergraduate degree in philosophy at Cambridge.
- Part II Philosophy of Science (Lent 2023)
- Part II Philosophy of Mind (Michaelmas 2022)
- Part IB Ethics (Michaelmas 2022 and Lent 2023)
- HPS Part II Philosophy of Economics (Michaelmas 2022)
- HPS Part II Ethical Issues in Psychiatry (Lent 2023)
All supervisions share a core logistical structure:
- The essay is due 24 hours before the supervision.
- It should be at most 2,500 words.
- Get in touch at the earliest possible time if you can’t make the deadline or the meeting.
- Submit a .docx or .pages file to hrs53 at cam.ac.uk.
The essay should
- explain and frame what the question is getting at (in the introduction),
- outline how the essay plans to answer the question (in the introduction),
- signpost,
- explain technical vocabulary,
- use the same words for the same things throughout,
- give reasons for its claims,
- use concrete examples to illustrate abstract ideas,
- demonstrate familiary with the primary readings,
- consider at least one central argument in depth,
- consider at least one rebuttal, and
- omit needless ideas.
The last point is perhaps the most important. The student must demonstrate both that and how what they say in the essay goes towards answering the essay question. Extraneous bits count against the essay, even if they are interesting in their own right. This is an important difference between the essay as a literary genre and the philosophical essay.
Some useful resources are
- the library search service,
- the faculty’s essay writing guide, and
- the faculty’s reading lists for part IA, IB, and II.
There are many ways to approach essays. Here is one step-by-step guide. Students should modify it to their liking.
- Go to the lecture.
- Skim an overview of the topic on the Stanford Encyclopedia of Philosophy or the Internet Encyclopedia of Philosophy.
- Carefully read what seems like the most fruitful article based on (1) and (2).
- Read the introduction and conclusion then the rest of the essay.
- Take notes and save quotes (along with page numbers).
- Write quick paraphrases of these quotes for later use and to build memory.
- Note important references.
- Repeat (3) until enough articles have been covered.
- Outline the general structure of the essay.
- Fill in outline elements with quotes and paraphrases from (3) and (4).
- Write the full essay based on this detailed outline.
For extended essays it is expected that key passages and key articles have been read many times with careful attention to details.


dengue weather model cases models -week-lag variables wind temperature provinces lag regression average incidences best coefficient used data variable Thailand determination region Dengue Thailand. negative time -week Nakhon analysis minimum previous prediction maximum results series Chiang precipitation significant ;():–. case pressure highest model, Poisson direction positive province. {border-style binomial incidences. study high independent northern px;} quasi-likelihood #ffffff;} fever province, rate shows .). Fig area province southern variables. effects power frequent humidity shown square Hong Mae best-fit cases. provinces. total climate current-week factors model. provinces, vaporization (., .), Health Negative based central fatality incidence number plot regression, variables, Statistical association current future local northeastern precipitation, use (%CI: January Krabi Son Time eastern hemorrhagic influential method regions studies temperature, tropical December GLM Quasi-likelihood Weather []. associated different distribution higher low mean population predicted predictive pressure, px; relationships {font-family %CI: ARIMA Bangkok, Buri, However, Nong Rai, SARIMA Sciences Sri approximately column disease font-size include increase models. mosquito predict row set statistical strong transmission using vaporization. virus water week weekly Mai, Pathum Phang Phanom Phichit Prachin Public RMSE Rai Thani, accuracy cause construct constructed correlation days dengue. determination, direction, double; factor precipitation. relationship selected severe variable. Bangkok Dis. Disease Khai Khon Lampang Mai Meteorological Sakon Samut Sci Science Songkhla Thailand, Therefore, Trang Trop analysis. binomial, border-color border-width burden cases, contains covers direction. followed geographical important infection leading like normal plots pressure. provincial provincial-level region, scatter season small solid; study, supported temperature. test vapor variability viral vs. yields {font-style {font-weight (average (coefficient (degree (ml), ./journal.pone..tTable Analysis BMC Buri CI: Celsius), Chachoengsao, Climate Data Hence, Incidence Kamphaeng Krabi, Lag Loei Map Methods: NB: PACF Phuket, Poisson, Ranong Research Sea Son, South Southeast Thai Thani Trat, World adult analysis, areas avh avp bold change coefficients conducted consists country courier; dwind em; epidemiology error global help incidences, includes increasing individual infections kilometers. level linear lowest map maxt methods mint mosquitos observed obtained original overdispersion patients power. presents provinces: pt;} public pwind rain rainy region. regions, regions. reported second showing spread stage starting type variable, weeks weeks.


|
Yorick I/O ReferenceMaking Plotsplg, y, x plot graph of 1-D y vs. x
The mesh_args may be zero, two, or three arguments as follows:
The plc command accepts the levs keyword to specify the list of z values to be contoured; by default, eight linearly spaced levels are generated. The plc and plmesh commands accept the triangle keyword to specify a detailed triangulation map for the contouring algorithm. Use the help, triangle for details. The plv command accepts the scale keyword to specify the scaling factor to be applied to (u, v) before rendering the vectors in (x, y) space; by default, the vector lengths are chosen to be comparable to typical zone dimensions. The plm command accepts the boundary keyword, which should be set to 1 if only the mesh boundary, rather than the mesh interior, is to be plotted. The plm, plc, plf, and plv commands accept the region keyword to restrict the plot to only one region of the mesh, as numbered by the ireg argument. The default region is 0, which is interpreted to mean the every non-0 region of the mesh. The pli command produces a cell array; the x0, y0, x1, y1, which are optional, specify the coordinates of the opposite corners of the cell array. Numerous other keywords adjust the style of lines, text, etc. |


This team of four students of Politecnico di Torino was built in order to develop the Applicazioni Internet project.


@* * 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. *@ @import uk.gov.hmrc.govukfrontend.views.html.components._ @import uk.gov.hmrc.hmrcfrontend.views.html.helpers._ @import config.ApplicationConfig @import play.twirl.api.HtmlFormat @this(govukWrapper: govukWrapper, govukDetails: GovukDetails, head: head) @( pageTitle: String, mainClass: Option[String] = None, backUri: Option[String] = None, headExtra: Html = Html(""), backLinkClass: String = "govuk-back-link", hasErrors: Boolean = false, showTopNavigation: Boolean = true )(contentBlock: Html)(implicit request: RequestHeader, messages: Messages, config: ApplicationConfig) @headScripts = { @views.html.includes.designSystemsStylesheets() @headExtra } @scriptElem = {} @mainContent = {


Mexico Asks US Not to Mix North American Free Trade Deal With Politics
Lopez Obrador said that the Mexico-US-Canada Treaty (T-MEC) must not be held hostage to political differences, as this does not benefit the economic development of the region.
Mexican President Andres Manuel Lopez Obrador has asked US legislators not to entangle internal political issues with the ratification of a renewed North American Free Trade Agreement.
“We ask legislators from the two parties (Republicans and Democrats), with all due respect, to help us and not mix an electoral political issue with the approval of the treaty,” the President said on Friday, Xinhua news agency reported.
“As to the treaty, I believe it has a consensus or greater acceptance among the people of the three nations,” he added, referring to Canada, the US and Mexico.
Lopez Obrador said that the Mexico-US-Canada Treaty (T-MEC) must not be held hostage to political differences, as this does not benefit the economic development of the region.
Legislators from the US Republican Party have expressed fears that the possibility of ratifying the T-MEC would be reduced if the process were to continue into next year, due to the 2020 US presidential election and the possibility of an impeachment trial against President Donald Trump.
However, US House Speaker Nancy Pelosi said on Thursday that the US Congress could vote on the treaty this year.
The T-MEC agreement seeks to replace the North American Free Trade Agreement, which took effect in 1994.
To come into effect, the T-MEC needs the approval of the legislatures of all three countries. The Mexican Senate is the only one that has approved it so far.
For breaking news and live news updates, like us on Facebook or follow us on Twitter and Instagram. Read more on World Latest News on India.com.
Story Timeline
- 17 Oct 2019 Amid Pressure From US, Mexico Deports 311 Illegal Immigrants Back To India
- 27 Sep 2019 Only 18,000 Refugees to be Allowed in US From 2020 to Curb 'Mexico Crisis'
Comments - Join the Discussion


| Product Code | Planning Type | Lead Time | Range of Coverage | Service factor | Safety Stock | Forecast period | Seaosn per Year | Target Stock | Minmum Stock | MaximumStock |
|---|---|---|---|---|---|---|---|---|---|---|
| Forecast | D | |||||||||
| ROP Automatic | W | |||||||||
| ROP Manual | M | |||||||||
| S |
| Product Code | Planning Type | Lead Time | Range of Coverage | Service factor | Safety Stock | Forecast period | Seaosn per Year | Target Stock | Minmum Stock | MaximumStock |
|---|---|---|---|---|---|---|---|---|---|---|
| Forecast | D | |||||||||
| ROP Automatic | W | |||||||||
| ROP Manual | M | |||||||||
| S |


Futokarneval Marathon
Visegrad HUN
Race Winners
(22 runnings)
24 Apr
2005
2:38:38
---
25 Apr
2004
2:34:55
3:04:57
27 Apr
2003
2:32:55
3:36:16
2002
---
---
2001
---
---
2000
---
---
27 Apr
1999
2:26:39
3:03:24
26 Apr
1998
2:16:55
2:45:51
27 Apr
1997
2:21:35
2:41:12
20 Apr
1996
2:22:56
2:55:41
23 Apr
1995
2:20:11
2:56:01
24 Apr
1994
2:17:39
2:39:27
09 May
1993
2:25:27
2:54:57
10 May
1992
2:22:08
3:00:29
12 May
1991
2:23:13
2:48:47
13 May
1990
2:19:56
2:58:25
23 Apr
1989
2:19:52
2:45:50
24 Apr
1988
2:15:28
2:42:56
26 Apr
1987
2:21:15
2:53:57
20 Apr
1986
2:16:18
2:47:10
11 May
1985
2:18:31
2:58:09
14 Apr
1984
2:15:04
2:40:10
Notes: 1984 was the inaugural year. This race was known as the Ibusz Marathon for 1984-1992; the Mars Budapest
or Mars Duna Marathon for 1993-96; the Juventus Floriol Marathon for 1997-2003; and the Motorola Marathon for 2004.
The 1994-1995 races for 1993 and earlier were held in Budapest (Visegrad is about 30 km NW of Budapest).
Stephane Vamtier
n/a
Zoltan Zambori (HUN)
Andrea Szabo (HUN)
Norbert Persely (HUN)
Reka Kovacs (HUN)
n/a
n/a
n/a
n/a
n/a
n/a
Janos Bogar (HUN)
Edit Berces-2
Ferenc Sagi (HUN)
Edit Berces (HUN)
Marton Lajtos (HUN) (nc)
Agnes Jakab (HUN) (nc)
Endre Laczfi (HUN) (nc)
Eniko Feher (HUN) (nc)
Zoltan Holba (HUN) (nc)
Ágota Farkas-4 (nc)
Simon Mrashani (TAN) (nc)
Tatyana Zolotareva (RUS) (nc)
Tibor Bardos (HUN)
Sofia Sotiriadou (GRE)
Geza Farkas (HUN)
Marta Vass (HUN)
Vadim Sidorov (RUS)
Anna Bidzilya (RUS)
Zoltan Gergely (HUN)
Ágota Farkas-3
Stephan Seidemann (GER)
Dana Hajna (CZE)
Radames Gonzalez (CUB)
Ágota Farkas-2
Karel David (SVK)
Aniko Joo (HUN)
Sandor Szendrei (HUN)
Ágota Farkas (HUN)
Jiri Sykora (CZE)
Katalin Cseh (HUN)
Zoltan Kiss (HUN) (nc)
Antonia Ladanyi (HUN) (nc)
(nc) => national championship
1996 Gizela Molnar is believed to have been the national champion (2nd
place, 2:58:38)
1994 Zoltan Holba was the national champion (2nd place, 2:20:02)
1994 Gizela Molnar was the national champion (2nd place, 2:50:29)
Most Wins
(1984/97)
Men
No man has won more than once according to available information.
Women 3
Agota Farkas (HUN)
1986,1988,1990
Prize Money
(ADR qualified runners)
No prize money has been awarded at this event according to available information.
Race Time Bias
Insufficient data to calculate the race time bias.
Competitive Level
Insufficient data to calculate the competitive level.
Quality Performances
Men <2:16 2 <2:17 3 <2:18 6 <2:19 9 <2:20 14 Women <2:40 1 <2:42 3 <2:44 4 <2:46 6 <2:48 10 <2:50 13
Last Updated on
06 Feb 2011
Contributors: Tadeusz Dziekoñski, Franco Civai (22), Paul Michiels (1)


Upload a unified file and click the Split button to split it into parts. Later, upload those parts and click the Join button to re-unify the parts.


---
layout: default
---
{% include nav.html %}
‹ Go back to models
Model parameters:
- Description: {{page.description}}
- Modality: {{page.modality}}
- Organ: {{page.organ}}
- Input: {{page.input}}
- Size: {{page.size}}
- maintainer: {{page.maintainer}}
- email: {{page.email}}
- Manuscript / documentation:
{{ content }}
{% include scripts.html %}


public class BettingCentre
extends java.lang.Object
Spectator
s place their bets on the winning horse. As they come here
to place their bets, they also come here to collect his (or hers) further gains, if such a
scenario applies on a given race.| Constructor | Description |
|---|---|
BettingCentre(int numberOfHorses,
int numberOfSpectators,
GeneralInformationRepository repository) |
Creates a Betting Centre.
|
| Modifier and Type | Method | Description |
|---|---|---|
void |
acceptTheBets() |
Changes the state of the Broker to Waiting for Bets (
WFB ) and waits till the last
placeABet(int, int, int) is done by a Spectator. |
boolean |
areThereAnyWinners(int winner) |
Verification of bet's winners.
|
int |
getNumberOfHorses() |
Returns number of horses that the
BettingCentre has knowledge of. |
int |
goCollectTheGains() |
Changes the Spectator's state to Collecting the Gains (
CTG ) and lets a spectator collect all
his (or hers) gains after being placed a bet and a race had ended. |
boolean |
haveIWon(int spectatorId) |
Verification if a given Spectator identified with
spectatorId has won his (or hers) bet. |
void |
honourTheBets() |
Changes the state of the Broker to Settling Accounts (
SA ) and waits till the last
goCollectTheGains() is done by a Spectator. |
int |
placeABet(int spectator,
int bet,
int horse) |
Changes the Spectator's state to Placing a Bet (
PAB ) and lets a Spectator place a bet
onto the BettingCentre . |
void |
setAbility(int horse,
int ability) |
Sets the ability of a pair Horse/Jockey on a internal structure in order to evaluate its odds later.
|
public BettingCentre(int numberOfHorses, int numberOfSpectators, GeneralInformationRepository repository)
numberOfHorses
- the number of pairs Horse/Jockeys which will compete against one another.numberOfSpectators
- the number of Spectators which will attend the events.repository
- an instance of a GeneralInformationRepository
in order to report all the actions and
log each and every moment.public void acceptTheBets() throws java.lang.InterruptedException
WFB
) and waits till the last
placeABet(int, int, int)
is done by a Spectator.
java.lang.InterruptedException
- if the wait() is interrupted.public void honourTheBets() throws java.lang.InterruptedException
SA
) and waits till the last
goCollectTheGains()
is done by a Spectator.
java.lang.InterruptedException
- if the wait() is interrupted.public int placeABet(int spectator, int bet, int horse) throws java.lang.InterruptedException
PAB
) and lets a Spectator
place a bet
onto the BettingCentre
.
bet
, made by a specific spectator
is done respecting a proper
horse
, which represents a pair Horse/Jockey.
spectator
- an identification of a Spectator
which represents a better.bet
- an amount of money represented as an integer, which the spectator
wants to bet.horse
- the identification of the pair Horse/Jockey in which the spectator
wants to bet.Broker
to place the bet.java.lang.InterruptedException
- if the wait() is interrupted.public int goCollectTheGains() throws java.lang.InterruptedException
CTG
) and lets a spectator
collect all
his (or hers) gains after being placed a bet and a race had ended.
spectator
, as an integer.java.lang.InterruptedException
- if the wait() is interrupted.public boolean haveIWon(int spectatorId)
spectatorId
has won his (or hers) bet.spectatorId
- identification of Spectator
who has placed a bet earlier and wants to verify if it did
win indeed or not.true
if spectator
has won his (or hers) bet; otherwise, it will return false
.public boolean areThereAnyWinners(int winner)
winner
- the identification of the pair Horse/Jockey which have won the race.true
if anybody had won indeed; otherwise it will return false
.public int getNumberOfHorses()
BettingCentre
has knowledge of.public void setAbility(int horse, int ability) throws UnknownHorseJockeyException
horse
- the identification of the pair Horse/Jockey.ability
- the ability of the pair Horse/Jockey identified with horse
.UnknownHorseJockeyException
- if the pair Horse/Jockey horse
does not exists.


FWIDE
Section: Linux Programmer's Manual (3)
Updated: 2014-03-19
Index
Return to Main Contents
NAME
fwide - set and determine the orientation of a FILE stream
SYNOPSIS
#include <wchar.h>
int fwide(FILE *stream, int mode);
Feature Test Macro Requirements for glibc (see
feature_test_macros(7)):
fwide():
-
_XOPEN_SOURCE >= 500 || _ISOC99_SOURCE ||
_POSIX_C_SOURCE >= 200112L;
or
cc -std=c99
DESCRIPTION
When mode is zero, the
fwide()
function determines the current
orientation of stream.
It returns a positive value if stream is
wide-character oriented, that is, if wide-character I/O is permitted but char
I/O is disallowed.
It returns a negative value if stream is byte oriented---that is,
if char I/O is permitted but wide-character I/O is disallowed.
It
returns zero if stream has no orientation yet; in this case the next
I/O operation might change the orientation (to byte oriented if it is a char
I/O operation, or to wide-character oriented if it is a wide-character I/O
operation).
Once a stream has an orientation, it cannot be changed and persists until
the stream is closed.
When mode is nonzero, the
fwide()
function first attempts to set
stream's orientation (to wide-character oriented
if mode is greater than 0, or
to byte oriented if mode is less than 0).
It then returns a value denoting the
current orientation, as above.
RETURN VALUE
The
fwide()
function returns the stream's orientation, after possibly
changing it.
A positive return value means wide-character oriented.
A negative return value means byte oriented.
A return value of zero means undecided.
CONFORMING TO
C99, POSIX.1-2001.
NOTES
Wide-character output to a byte oriented stream can be performed through the
fprintf(3)
function with the
%lc
and
%ls
directives.
Char oriented output to a wide-character oriented stream can be performed
through the
fwprintf(3)
function with the
%c
and
%s
directives.
SEE ALSO
fprintf(3),
fwprintf(3)
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- RETURN VALUE
-
- CONFORMING TO
-
- NOTES
-
- SEE ALSO
-
This document was created by
man2html,
using the manual pages.
Time: 02:55:10 GMT, September 18, 2014


Home
User Administration
Here is a list of users:
{% for user in user_list %}
Username: {{(user[0])}} || Full Name: {{(user[2])}}
Delete User
{% endfor %}
Add A User!


Detection algorithm to avoid deadlock
Banker's Algorithm is a resource allocation and deadlock avoidance algorithm that tests for safety by simulating the allocation of predetermined maximum possible amounts of all resources, and then makes an "safe-state" check to test for possible deadlock conditions for all other pending activities, before deciding whether allocation should be allowed to continue.


Visual blocks for mathematical syntax
Home
Demos
Builder
Translation exercise
Limit definition exercise
Logic exercises
Vectors demo
About
Demo of vector and scalar arithmetic
This page will not display properly in Internet Explorer, sorry. Some blocks will appear blank. Try using another web browser.
(dump XML)
2
1
3
CROSS
0
0


A-Future - Zero Point Access
Another house producer turns to electro.
by Carlos Hawthorn| Label / EON EON002 |
Released / November 2019 |
Style / Electro |
Adam Shelton, the UK house and techno artist who runs One Records alongside Subb-an, traces his pivot to electro back to Freerotation festival in 2016. Alex Downey was on the decks, thumping out bombs by the likes of DMX Krew, Underground Resistance and Drexciya. Shelton, a lifelong collector of electro, was blown away. A year later, with the approval of Craig Richards, he played his first electro set at Houghton Festival, warming up for another legend of the genre, Radioactive Man.
Fast-forward two years and we have Zero Point Access, Shelton's first EP under his new alias, A-Future. "No Era," the only original cut, is an impressive debut, all amen breaks, eerie synth licks and explosive gear changes. There's a lot going on, but the noise never overwhelms. Of the two remixes, Alex Jann's electro slammer is the pick: fat, cosmic and ferocious, with wonderfully crisp drums.
Tracklist /
A1 No Era
B1 No Era (Alex Jann's Planet Transmit Mix)
B2 No Era (Secret Universe's Biosphere Mix)


A MARKETING ANALYSIS MODEL APPLIED TO ROMAN CATHOLIC ELEMENTARY AND SECONDARY EDUCATION
IN TOLEDO, OHIO
by
John Archie Thomas
A dissertation submitted in partial fulfillment of the requirements for the degree of Doctor of Philosophy (Education) in The University of Michigan 1971
Doctoral Committee:
Professor Russell E. Wilson, Chairman
Professor Frederick Bertolaet
Professor Dan H. Cooper
Professor J. B. Ritchie
The Reverend Bernard Harrington, Assistant Superintendent of Schools, Archdiocese of Detroit
Reproduced with permission of the copyright owner. Further reproduction prohibited without permission.


surgical smoke electrocautery surgeries intraoperative operating use compounds {border-style (%) PAH px;} study #ffffff;} naphthalene phenanthrene Health chemical rooms used average health surgery PAHs air concentrations exposure collab: conducted exposed (.%) PPE Safety mg/m occupational workers Occupational aromatic identified masks team United abdominal graduate hydrocarbons produced students Available States from: performed protective px; {font-family arising exhaust font-size measures median minutes standard studies surgeries. time Administration Naphthalene Surgical addition airborne collected double; effects gases goggles inhalation nursing personal procedures recommended systems test ventilation videolaparoscopic America. American Rev Surg [], border-color border-width correlation detected deviation environment field filter form general generated hazards including local minimize minutes, open perioperative polycyclic respirator seven solid; team. various {font-style {font-weight (Taiwan) Changhua Enfermagem IARC International Lübeck PR, Table Uppsala agency associated bold carcinogenic concentration courier; did electrocautery, em; harmful high however, identify masks, phenanthrene, present protect pt;} pump risk safety smoke, staff study's study, type types values


"Serving the community with a culture of excellence."
A local government-funded college in Olongapo City, Philippines. It was founded on February 24, 1999 by virtue of City Ordinance No. 9, and is composed of four colleges: College of Computer Studies; College of Business and Accountancy; College of Education Arts and Sciences; College of Allied Health Studies. Other academic units include the Institute of Graduate Studies, Technical-Vocational Unit, and Senior High School
By 2025, the College envisions to be a premier local institution of higher learning in Region 3 committed to the holistic development of the human person and society.
To produce well-trained, skilled, dynamic, and competitive individuals imbued with values and attitudes responsive to the changing needs of the local, national and global communities.


A lack of industry diversity and overconcentration of workers in a single industry can make a region vulnerable to challenges from external forces, whereas promoting industry diversity and increasing the distribution of workers across multiple industries improves the economic resilience of the region. In the past, single-minded investment by a region in an industry, such as mining or manufacturing, has led to some challenging times once the boom is over or production moves overseas. This project is an interactive data visualisation tool which allows users to explore and understand industry diversity and concentration across New Zealand.
We sourced data on the number of employees per industry from Statistics New Zealand and determined the industry diversity by calculating the coefficient of variance of the spread of labour between industries for each area. These values were then used to generate a heatmap of New Zealand, with regions coloured from green (high diversity) to red (low diversity). The user can interact with the heatmap to view the industry diversity over time (from 2000 to 2016) by dragging a sliding scale. For a more in-depth breakdown, the user can select a region on the map to generate a pie chart for that area showing the split of workers by industry. The user can also interact with this data over time, by dragging the sliding scale.
In future, overlaying additional datasets, such as regional GDP and unemployment, and further stratification of the data (e.g. distribution of a single industry across the country) would allow further insights to be drawn.
Datasets Used:
Business Demography (Geographic units by region and industry 2000-2016)
Libraries Used:


Let's see what we have learn from ITE101 class at Stamford International University. You can also test your knowledge in each section you have learned.
Help with understanding the differences between software and hardware. What are the main components of hardware? Can the computer run without software? We will learn these in this lesson.
Learn Software Development Life Cycle starting with SDLC overview and covering various models like waterfall model, Iterative Model, Spiral Model. Why is system development important in information technology? What are the processes in SDLC?
Learn about database fundamentals, what are the advantages of using database? What is data mining? why is it important to do data mining and why will it become more important to do data mining in the future.
In information technology, networking is the construction, design, and use of a network, including the physical (cabling, hub, bridge, switch, router) Learn more about network topologies and also pros & cons of each.


## Content
* More Problems on Software Development?
* Software Development Principles
* DRY
* YAGNI
* Communications
* Requiements Gathering
* Retrospectives
* Planning
* Product Backlog
* Iteration Backlog
* TDD
* Review
## More Problems on Software Development?
Note:
Did students find problems which's not in the list.
For example:
* User didn't know what they want
* User use the wrong IT terms
* It works on dev env, but not in the production env.
* Broken app on difference env & config.
## Software Development Principles
* `DRY` - **D**on't **R**epeat **Y**ourself
* `YAGNI` - **Y**ou **A**in't **G**onna **N**eed **I**t
Note:
## Communications
* Typically the root causes of all evils!
* How to make it precise?
* How to make it unambiguous?
* How to make it clear?
* How to communicate changes?
* Bosses ***hate*** surprises!
Note:
## Requiements Gathering
* Customers might not be able to tell what they want clearly.
* Customers ***know*** what they want!
* What customers' want might change several times!
* Make sure to understand their problems instead of obey to their words
* Make it clear about ***DO*** and ***DON'T***
* Many project flaws have their root stem from immature requirements.
Note:
## Retrospectives
* Feedback your thoughts to your team
* Mention about
* GOOD
* BAD
* TRY
* Discuss about how to improve the team
Note:
## Planning
![Planning][planning]
[planning]: https://thumbs.dreamstime.com/z/group-business-people-meeting-planning-41699625.jpg "From https://www.dreamstime.com/photos-images/planning.html"
### Prioritization
![Ideas to Action][prioritize]
[prioritize]: http://www.innovationgames.com/wp-content/uploads/2012/04/IdeasIntoActiona.png "From http://www.innovationgames.com/ideas-to-action/prioritize/"
### Scrum
![Scrum Overview][scrum]
[scrum]: http://riverpark.co.th/images/blogimg/kk.jpg "From http://riverpark.co.th/blog/agilesdlc.html"
### Scrum Backlogs & Prioritization
![Scrum Backlogs][scrum-backlogs]
[scrum-backlogs]: imgs/scrum-flow.png "From http://www.innolution.com/essential-scrum/table-of-contents/chapter-2-scrum-framework"
### Scrum Backlogs
![Scrum Backlogs in Cards][backlog-cards]
[backlog-cards]: imgs/o/Sprint-Planning-Meeting-outcome.jpg "From http://scrumreferencecard.com/scrum-reference-card/"
### Release Planning
![Release Planning][release-plan]
[release-plan]: https://tcagley.files.wordpress.com/2014/02/untitled2.png "From https://tcagley.wordpress.com/tag/agile-release-plan/"
### Sprint Planning
![Sprint Planning][sprint-plan]
[sprint-plan]: http://scrumtrainingseries.com/Sprint_Planning_Meeting_thumbnail.png "From http://scrumtrainingseries.com/SprintPlanningMeeting/SprintPlanningMeeting.htm"
### Sprint Backlog
![Sprint Backlog][sprint-backlog]
[sprint-backlog]: http://image.slidesharecdn.com/zenofscrum3-slideshare-120425152214-phpapp02/95/zen-of-scrum-32-728.jpg?cb=1335455735 "From http://www.slideshare.net/devoteddeveloper/zen-of-scrum"
### Sprint Planning Tasks
* Sprint Planning Task I:
* To committing the `Features`
* Sprint Planning Task II:
* To coming up with `Tasks`
* Might mix up the two parts
### One Item at a Time
![One Item at a Time][one-at-a-time]
[one-at-a-time]: imgs/Product-Backlog.png "From http://scrumreferencecard.com/scrum-reference-card/"
### Product Backlog Refinement
![Product Backlog Refinement][backlog-refinement]
[backlog-refinement]: http://www.innolution.com/uploads/misc/grooming.png "From http://www.innolution.com/blog/who-should-attend-scrum-meetings"
### Summary
![Sprint Activities][sprint-activities]
[sprint-activities]: http://nomad8.com/wp-content/uploads/2015/03/Screen-Shot-2015-03-16-at-3.26.59-pm.png "From http://nomad8.com/how-to-run-a-sprint-planning-meeting-the-way-i-like-it/"
## TDD
![TDD][tdd]
[tdd]: http://image.slidesharecdn.com/improvingdesignthroughtdd-121210115200-phpapp02/95/improving-design-through-test-driven-development-tdd-5-638.jpg?cb=1355140485 "From http://www.slideshare.net/excellaco/improving-design-through-test-driven-development-tdd"
### Software Quality Assurance
![Software Quality Assurance][sqa]
[sqa]: http://www.innsoftsolution.ca/content/services/software/InnSoft-Quality-Assurance.png "From http://www.innsoftsolution.ca/software-quality-assurance.php"


Dialog Box
Click Here !
Multiple Ticket
1.
Category?
Description:
Ticket price for this category?
Toggle Dropdown
₹
$
¥
₩


| The life story of Italian violinist and composer, Niccolò Paganini, who rose to fame as a virtuoso in the early 19th Century. | |
| Genres: | Biography, Drama, Musical |
| Director: | Bernard Rose |
| Writer: | Bernard Rose |
Cast: | Niccolò Paganini - David Garrett Urbani - Jared Harris Ethel Langham - Joely Richardson John Watson - Christian McKay Elizabeth Wells - Veronica Ferres Lord Burghersh - Helmut Berger Primrose Blackstone - Olivia d'Abo Charlotte Watson - Andrea Deck Fighter - Kristian Portz Burly Man - Thomas Anton Journalist - Peter R. Bishop Officer - Peter Bosch Charlotte's Husband - Ben Cura Ticket Tout - David Godden Bandmaster - Stephen Hastings Maid - Franziska Huber Server - Ian Hughes Newspaper seller - Tim Jefferis Lizzie - Elizabeth Kinnear Milanese Guy in the audience - Onat Koc Marie - Fanny Krausz Achille Paganini - Makhare Alexander Ninidze Boy - Oskar Ricketts Anna - Ania Sowinski Freddie - Andrew Tiernan Opera Spectator - Leopold Josef Paul Berger |


Through years of practicing Indian classical dance, I learnt the concept of Abhinaya: the act of story-telling that involves acute understanding of human emotions through empathy. It took me years to understand Design through Empathy. Why Empathy? Technological penetration is ever so high and cheap. Developing a product is no longer limited to a specific sect of people, rather it has to cater to global audience. I believe, to ensure inclusive design, we need deep understanding of human emotions which can only be achieved through empathy.
When the sun goes up, I take laptop in one hand and coffee in other and start building things. As an Engineer in Microsoft, I'm currently working on the product Emoi, which solicits feedback from human emotions and reactions. This non-intrusive method can change the way we obtain feedback. I have worked on hybrid cloud system and connected cars, made flying drones easier and help enterprise tap into the ubiquity of IoT devices to enable large scale automation.
When the sun goes down, I indulge in art amorphously, shapeless blob exploring the breadth and depth of my creative existence. I practice, Bharatanatyam, an Indian classical dance form. I have performed for large audience, TV channels and theater tours. I project the complex intricacies of human emotions and ideas through my sketches. And when the paint dries out, I turn to ink. I prefer prose and poetry to longer forms of writing. I write for me, to satiate my creative hunger, though people have told its helps them too.


Oh no! Ryan lost his scholarship but don't worry, he still graduated!
Hooray! Ryan graduated!
Let's help Ryan graduate!
Press any key to jump!
Collect soda to give Ryan happiness!
Collect Calculus books to boost Ryan's grade!
But watch out for the bad grades!
Let's Play!
Built and designed by Ryan Berger
Turn your device sideways to guarantee the best experience


Namespace MvcCore
| MvcCore\Ext |
| Config | Core configuration: - config files reading: - reading config.ini file by relative path - parsing and typing ini data into stdClass/array by key types - typing ini values into integers, floats, booleans or strings - environment management: - simple environment name detection by comparing server and client ip - environment name detection by config records about computer name or ip |
| Controller | Application controller: - template methods: (necessary to call parent at method begin) - Init() - called after controller is created - session start - all internal variables initialized except view - PreDispatch() - called after Init, before every controller action - view initialization - internal actions: - AssetAction() - handling internal MvcCore http request to get assets from packed package - url proxy method, reading request param proxy method - view rendering or no-rendering management - http responses and redirects management - basic error responses rendering - request termination (to write and close session) |
| Debug | Core debug tools - printing any value by var_dump(); in fixed bar at browser window right bottom border - timing printing - debuging shortcut functions initialization - exceptions hdd logging or printing in development mode |
| Model | Core model - reading 'db' section from system config.ini - database PDO connecting by config settings and index - instance loaded variables initializing - instance initialized values reading - virtual calls/sets and gets handling |
| Request | Core request: - linear request url parsing from $_SERVER into local properties describing url sections - params reading from $_GET/$_POST or direct input (in JSON or in query string) - params cleaning by developer rules |
| Response | Core response: - http response wrapper carrying response headers and response body - sending response at application terminate process by Send(); method - completing MvcCore performance custom header at response sending |
| Route | Core route: - describing request input, url output, controller/action target and default params - required properties to set: - Pattern - classic preg_match() pattern including border '#' characters, containing char groups - Reverse - url form with {%param} replacements where to insert param values from url method - Controller - controller to create and dispatch or view directory name, pascal case - Action - controller action to execute or view name to render, pascal case - Name - 'Controller:Action' or any custom route name how to create url in application by Url() method - Params - default params to set before controller/action dispatching if no params in request |
| Router | Core router: - main store for all routes - application request routing process before request dispatching in core - currently matched route store - application url completing - by configured routes into mod_rewrite form - or into query string form, containing controller and action params - params query string building - primitive param value or array value representation possible |
| Session | Core session: - session safe starting - session writing and closing - by registered shutdown function - \MvcCore\Session::Close() - how to register the handler - close handler called registered by \MvcCore::Terminate(); - session namespaces management - variables expiration by seconds - variables expiration by request hoops |
| Tool | Core tools: - translating cases (with folders support): - dashed-case to PascalCase - PascalCase to dashed-case - unserscore_case to PascalCase - PascalCase to unserscore_case - JSON safe encode/decode |
| View | Core view: - static doctype storage - static storage for dir names with view scripts - possible to use for any controller/subcontroller/control/\MvcCore\Ext\Form - view prerender preparing and rendering - direct code evaluation - view helpers management - creating by predefined class names bases - instance storing and calling - views sub scripts relative path solving - Url() proxy method, AssetUrl() proxy method - magic calls: - __call() - helpers handling - __set() - to set anything in controller to get it back in view - __get() - to get anything in view previously completed in controller - no special view language implemented... why to use such stupid things... |


ESDC IT Research & Prototyping Technology Radar
The Research & Prototyping Technology Radar is a list of emerging industry technologies, detailing how much attention and effort our team is devoting to them and how they align with our team's services.
We use four rings with the following semantics:
Technologies in this ring have been assessed and deemed relevant and valuable to the organization.
Analysis is actively being performed by the team to evaluate the potential of the technology and its relevance to the organization (ETAC, Primers, FAQs, …)
This ring is the entry point for our radar, an it's populated with emerging technologies that have been deemed promising and warrant further observation.
Technolgies listed in this ring have been observed by our team and deemed not currently relevant for further action.
If you have any questions, concerns, or feedback regarding our Technology Radar, feel free to get in touch with the Research & Prototyping team!


Original Neutral
Your browser doesn't support HTML5 audio. Here is a
link to the audio
instead.
Neutral Resynthesized by STRAIGHT
Your browser doesn't support HTML5 audio. Here is a
link to the audio
instead.
Neutral Resynthesized by STRAIGHT, Temporal Decompostion, F0 by YIN
Your browser doesn't support HTML5 audio. Here is a
link to the audio
instead.


The tool paper that originated my previous post on demo videos got accepted. Hooray! Given the ongoing global pandemic, I was asked to submit a 15-minute video of my presentation, that has then been broadcasted to all participants. This post is a collection of notes I gathered along the way.
Some storyboarding required
I simply used LaTeX + Beamer to create a deck of 11 slides (which are actually 31 if you include all Beamer transitions and stuff). As a rule of thumb, I always try to have at most one slide per minute (excluding transitions). Yes, including the title slide. When I end up having more than that, I inevitably find out that some of them are needlessly technical, or that multiple slides could be merged into a single one that is more concise and effective.
I think that the first 3-4 slides are the most critical for a good talk. If these slides manage to convey a message, then the message will stick even with those people that may get lost at a later stage of the talk. Heck, somebody might even read the paper you’re presenting! On the other hand, losing your audience during these initial slides usually means that your talk is little more than a waste of everyone’s time. (Sorry for the bluntness!)
This is why I wrote down several drafts of my voiceover for the initial 3 slides (out of 11), recorded myself reading them, and took note of the time required for each slide. I did the same for the next three slides, which introduce some technical background. Listening back to myself made it easier to realize that some parts of my voiceover were unclear, wordy, or both. After a few tries I got something acceptable. I did the same for slides 4 to 6, and then I just jotted down the essential talking points for the rest of the presentation. At that point, I was ready for the next step: the actual recording.
First attempt
At first, I recorded the screen and my voiceover with OBS. I used Présentation.app to show my slides full-screen on a secondary monitor (which I captured with OBS), while the primary monitor showed a timer, thumbnails of the next slide, and other goodies.
Présentation is really a great piece of open-source software, and everybody that works with PDF slides on a Mac should at least try it out. I know that OBS is also really good, although in my use case (capturing fairly static slides on a screen) I got a quite blurry video. Probably I should have toyed with the settigns a little bit more.
Doin’ it right
Since I wanted to move away from iMovies, I downloaded Shotcut, an open-source non-linear video editor. I added the OBS video file and started toying around. To my horror, I started to notice a lot of wrong things with my voiceover! I am mostly talking about “ehhs”, “uhms”, and broken English (apparently I forget many -s suffixes when I am in a hurry). At the same time, I realized that some parts of the voiceover could still be rephrased more clearly. Probably the original voiceover would have been (more or less) alright as a live talk, but this was a recorded presentation. Sigh. So I started re-recording parts of the voiceover using Ocenaudio, a really good free (although sadly closed-source) audio editor. I did all the recordings in FLAC, but had to convert them to WAV because Shotcut has some issues with seeking FLAC files.
Meanwhile, I realized that there was a way to ditch the OBS video. If I converted my PDF to a set of PNG pictures, then I could use these as my video track! I would not lose anything: as I already said, my video was just a sequence of static pictures anyway. On the other hand, I would now be able to easily adjust the timing of my slides to match my voiceover without having to edit a video asset. Of course, the PDF-to-PNG conversion was gracefully handled by ImageMagick:
convert -density 300 path/to/slides.pdf slide.png
generates a collection of files named slide-0.png
, slide-1.png
, and so on.
Conclusion
At that point, I was finally able to export a flawless video! But before uploading it, I did a final sanity check by re-watching it in full. Even though a video service worthy of the name should not mangle your video during upload, it does not hurt to also rewatch the uploaded video a final time before making it public/sharing it with the chair of your conference/whatever. That’s in fact what I did! Since audio/video issues are quite glaring, to save a bit of time you can rewatch at 1.5x speed or so.
TLDR
So you want to record a slide presentation. This is what worked for me:
-
Follow the one-slide-per-minute rule of thumb.
-
Do a storyboard of the initial slides and of technical parts; record, time-track and listen back to yourself.
-
Use a non-linear video editing tool: it will allow you to make experiments without altering your assets.
-
If possible, load the slides as picture assets rather than doing a screen recording. This will save disk space, yield a crisp video, and allow you to tweak the display time of each slide.
-
Capture the audio of your slides as separate, uncompressed files, so you can load them in the editor and adjust them to stay within the time limit without redoing the whole talk every time.
-
Export, then rewatch your video (possibly at a slightly higher speed, like 1.5x) to detect any issues. Rinse and repeat until your video is glitch-free.
-
If you need to upload the video to some online service, also rewatch the uploaded video.
-
Bonus bullet point: read this excellent guide by professors Olivier Danvy and Luca Aceto. It is oriented at live talks, but it contains many tips, do’s and don’ts, and examples that hold true for recorded presentations as well.
Disclaimer
I am not affiliated with any of the projects mentioned in this post. I just really, really like them. If you use any of them, especially the open-source ones, please consider donating or contributing to keep them alive!