| Constructor and Description |
|---|
Server()
Creates a Server with a write buffer size of 16384 and an object buffer size of 2048.
|
Server(int writeBufferSize,
int objectBufferSize) |
Server(int writeBufferSize,
int objectBufferSize,
Serialization serialization) |
| Modifier and Type | Method and Description |
|---|---|
void |
addListener(Listener listener)
If the listener already exists, it is not added again.
|
void |
bind(java.net.InetSocketAddress tcpPort,
java.net.InetSocketAddress udpPort) |
void |
bind(int tcpPort)
Opens a TCP only server.
|
void |
bind(int tcpPort,
int udpPort)
Opens a TCP and UDP server.
|
void |
close()
Closes all open connections and the server port(s).
|
Connection[] |
getConnections()
Returns the current connections.
|
Kryo |
getKryo()
Gets the Kryo instance that will be used to serialize and deserialize objects.
|
Serialization |
getSerialization()
Gets the serialization instance that will be used to serialize and deserialize objects.
|
java.lang.Thread |
getUpdateThread()
Returns the last thread that called
EndPoint.update(int) for this end point. |
void |
removeListener(Listener listener) |
void |
run()
Continually updates this end point until
EndPoint.stop() is called. |
void |
sendToAllExceptTCP(int connectionID,
java.lang.Object object) |
void |
sendToAllExceptUDP(int connectionID,
java.lang.Object object) |
void |
sendToAllTCP(java.lang.Object object) |
void |
sendToAllUDP(java.lang.Object object) |
void |
sendToTCP(int connectionID,
java.lang.Object object) |
void |
sendToUDP(int connectionID,
java.lang.Object object) |
void |
start()
Starts a new thread that calls
EndPoint.run() . |
void |
stop()
Closes this end point and causes
EndPoint.run() to return. |
void |
update(int timeout)
Accepts any new connections and reads or writes any pending data for the current connections.
|
public Server()
public Server(int writeBufferSize, int objectBufferSize)
writeBufferSize
- One buffer of this size is allocated for each connected client. Objects are serialized to the write
buffer where the bytes are queued until they can be written to the TCP socket.
Normally the socket is writable and the bytes are written immediately. If the socket cannot be written to and enough serialized objects are queued to overflow the buffer, then the connection will be closed.
The write buffer should be sized at least as large as the largest object that will be sent, plus some head room to allow for some serialized objects to be queued in case the buffer is temporarily not writable. The amount of head room needed is dependent upon the size of objects being sent and how often they are sent.
objectBufferSize
- One (using only TCP) or three (using both TCP and UDP) buffers of this size are allocated. These
buffers are used to hold the bytes for a single object graph until it can be sent over the network or
deserialized.
The object buffers should be sized at least as large as the largest object that will be sent or received.
public Server(int writeBufferSize, int objectBufferSize, Serialization serialization)
public Serialization getSerialization()
EndPoint
getSerialization
in interface EndPoint
public Kryo getKryo()
EndPoint
KryoSerialization
is being used, which is the default.public void bind(int tcpPort) throws java.io.IOException
java.io.IOException
- if the server could not be opened.public void bind(int tcpPort, int udpPort) throws java.io.IOException
java.io.IOException
- if the server could not be opened.public void bind(java.net.InetSocketAddress tcpPort, java.net.InetSocketAddress udpPort) throws java.io.IOException
udpPort
- May be null.java.io.IOException
public void update(int timeout) throws java.io.IOException
update
in interface EndPoint
timeout
- Wait for up to the specified milliseconds for a connection to be ready to process. May be zero to return
immediately if there are no connections to process.java.io.IOException
Client.update(int)
,
update(int)
public void run()
EndPoint
EndPoint.stop()
is called.public void start()
EndPoint
EndPoint.run()
.public void stop()
EndPoint
EndPoint.run()
to return.public void sendToAllTCP(java.lang.Object object)
public void sendToAllExceptTCP(int connectionID, java.lang.Object object)
public void sendToTCP(int connectionID, java.lang.Object object)
public void sendToAllUDP(java.lang.Object object)
public void sendToAllExceptUDP(int connectionID, java.lang.Object object)
public void sendToUDP(int connectionID, java.lang.Object object)
public void addListener(Listener listener)
EndPoint
addListener
in interface EndPoint
public void removeListener(Listener listener)
removeListener
in interface EndPoint
public void close()
public java.lang.Thread getUpdateThread()
EndPoint
EndPoint.update(int)
for this end point. This can be useful to detect when long running
code will be run on the update thread.getUpdateThread
in interface EndPoint
public Connection[] getConnections()


{% extends "index/header.html" %} {% load static %} {% block head %} {% endblock %} {% block content %}
| Location | Certificate Name | Common Name | Expiration Date | Remaining Days | Information |
|---|
| Name | Common Name | Expiration | Remaining Days | Path | Issuer | SAN's |
|---|---|---|---|---|---|---|
| Status | Name | Destination | Port | Bits | Packets | Connections | ||||
|---|---|---|---|---|---|---|---|---|---|---|
| In | Out | In | Out | Current | Maximum | Total |


PROWLER, THE (director: Joseph Losey; screenwriters:From story by Robert Thoeren/ Hans Wilhelm/Hugo Butler/ uncredited Dalton Trumbo; cinematographer: Arthur C. Miller; cast: Van Heflin (Webb Garwood), Evelyn Keyes (Susan Gilvray), John Maxwell (Bud Crocker), Katherine Warren (Mrs. Crocker), Emerson Treacy (William Gilvray), Madge Blake (Martha Gilvray), Robert Osterloh (Coroner), Wheaton Chambers (Dr. James), Louise M. Bates (Doctor's Wife), Sherry Hall (John Gilvray), 1951)
Reviewed by Dennis Schwartz
A neat noir thriller that has a slight variation on the "Double Indemnity" theme, this time it is the guy who is the seducer. This is a Joseph Losey American film, made before his self-exile from the 1950s HUAC witch-hunt days when he fled to England, and as it is the director's want, social issues and class differences will play a major role in the motif, adding to the usual noir ones of dark character and sexual misconduct. Dalton Trumbo, the blacklisted writer, is the uncredited cowriter of the script.
The film opens with a beautiful framing shot of a woman in the window screaming as she sees a prowler. The patrol car partners respond and come to a luxurious Spanish-styled house, in an affluent neighborhood. The caller is an attractive and frightened woman, Susan Gilvray (Keyes), who saw someone peering into her window after she came out from her bath. The two officers, the bespectacled veteran Bud Crocker (Maxwell) and the much younger but less civil cop, Webb Garwood (Van Heflin), question her and give her some safety tips to avoid having the prowler return. There is one arresting shot of Webb peering into the same window the same way the prowler did and eliciting the same response from Mrs. Gilvray as before. This is a sign of what's to come, as Webb will take the place of the prowler, as he slowly manuevers his way into Susan's life and starts an affair that will result in a tragic outcome.
Bud is a married man who has never fired his gun after 20 years on the force, whose interest lies in collecting rocks in the desert and in visiting ghost towns. His wife doesn't care too much for Webb because he isn't proud to be a cop, as he feels that he is a failure after being a high school basketball star in Indiana who came to California on a basketball scholarship, but couldn't catch a break when his coach withdrew that scholarship and he had to take this job, which he considers demeaning. She also senses he is disinterested in hearing what Bud has to say about his hobby.
Finding Susan to be attractive and wealthy, his interest in her is peaked. He goes back to her place and strikes up a cordial conversation, discovering that they are both Hoosiers, though she is from an exclusive neighborhood and he's from the other side of the tracks. He thought that she was single and is disappointed to find out that her husband John (Sherry) is an all-night radio talk show personality, whom she listens to because he questions her about the program afterwards. His trademark signal at the end of his show is, "I'll be seeing you Susan." This is particularly annoying for Webb, as he calls his voice oily.
Webb can't contain himself any longer, realizing that she is a lonely woman who doesn't love her wealthy husband, and becomes sexually aggressive with her, which she resists by slapping him a few times and telling him to never come back. But the resilient Webb comes back in uniform with a seemingly sincere apology and the two get together, and the affair begins, with her boredom replaced with sexual ecstasy. Webb tells her that he wants more than this affair, he wants her as his wife, but he knows he will need money to support someone who is used to living in luxury.
After his vacation in Las Vegas, where he dreams of bettering himself financially in life and becoming a motel owner, he cooks up an ingenuous scheme to get rid of her husband, after having poked around the Gilvray's house and discovered that in his will he has left a small fortune to Susan.
After dropping Bud off when their patrol is over, he will go to Susan's house and cut the screen door, making it appear as if a prowler is there. The Gilvrays call the police and he is sent to investigate that report.
Susan is repelled by him, believing he killed her husband. But in the coroner's jury it is ruled as an accident. There's a great shot at the end of the inquest, when Webb is exonerated and all the men in blue come up to congratulate him. The resilient Webb, quits the police force after that, saying the accident shook him up and he will never handle a gun again. But he is now closed out of Susan's life, so he goes to John's brother, William (Treacy), who is satisfied with the jury's verdict and willing to see Webb, even mentioning that his brother was a tough one to live with and he knows he didn't get along that well with Susan. Webb asks him to give Susan his life savings of $700, to help her out in case she needs some money. This effort to elicit sympathy for himself works, as William pushes them together and they soon decide to get married.
Webb is now as happy as he's ever been in life, he's got his woman, her money, and a motel in Las Vegas. But she tells him that she is four months pregnant and the wheels start to spin in the hard-luck Webb's head. He knows that John is sterile and that they haven't been married long enough for the child to be perceived as his. Fearing that he will be charged with the murder and Susan as his accomplice, he talks her into going to one of Bud's ghost towns in the Mojave Desert and she talks him into being the deliverer of the baby.
The desolation of the desert, where there isn't a neighbor for miles, brings out a certain peace in them, even though they are living in a rundown shack. But by mistake, they hear a recording of John's radio program, including his trademark goodnight to Susan, which breaks the jubilant mood and sets the dismal one to come.
When complications arise in her birth, Webb says he will go into town to get a doctor.
The doctor delivers the baby, but in a conversation with her husband, she gets him to admit that he married her to get the money in the will. Susan is able to warn the doctor of the danger he is in and he flees in his car with the baby.
"The Prowler" shows the underside to the American dream and its all-American antihero, the milk drinking, status seeking Van Heflin, a law enforcer of the establishment but who is himself the abuser of power; and in contrast, his lonely, security seeking bride, Evelyn Keyes, who wants the same material things as he does, but is willing to sacrifice her need for material things for love.
The reason Van Heflin got away with the initial crime, is because he is one of the boys, his image as a clean-cut, white American, the ruling class in the social structure, stops others from questioning his use of power. As for the contemptuous Van Heflin, who really has a disregard for others, his love for Keyes was real but not enough for him, he had to also have the superficial material things of life to satisfy his weak ego. That is the bad break he made for himself and the reason he went over-the-edge. These two stars gave superb performances in this arresting thriller that is scripted with a social conscience and a taut sense of reality.
REVIEWED ON 2/2/2000 GRADE: B+
Dennis Schwartz: "Ozus' World Movie Reviews"
http://www.sover.net/~ozus
<EMAIL_ADDRESS>© ALL RIGHTS RESERVED DENNIS SCHWARTZ
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Google Chrome REST API plugins
Advanced REST client
DHC REST client
Analyze authentication mechanism
Basic HTTP
Access Token
Cookie
Methodology
Create list of all possible endpoints
GET
POST
PUT
DELETE
Test token scope
Create / Read / Update / Delete with unprivileged token
Test Insecure Direct Object Reference
Test if otherwise filtered payloads can be delivered via API


HIVE, A COWORKING SPACE
Welcome to Hive. This is a space where the creative minds can come together and collaborate and get work done. Bring your colony or just bring yourself and pick out a space that suits you best. Whether you’re a pilates teacher, artist, designer, entrepreneur, you name it — we have the perfect space for you.


[gecode-users] Question about IntVar declaration
Christian Schulte
schulte at imit.kth.se
Wed Sep 20 21:44:40 CEST 2006
That's clearly a bug: init should also raise an exception (even the docs say
so). It's called limits because they are the limits ;-)
Thanks for pointing out. I'll fix it tomorrow in the trunk.
Christian
-----Original Message-----
From: users-bounces at gecode.org [mailto:users-bounces at gecode.org] On Behalf
Of Alejandro Arbelaez
Sent: Wednesday, September 20, 2006 8:42 PM
To: users at gecode.org
Subject: [gecode-users] Question about IntVar declaration
Hi all,
Is any different creating variables like
IntVar a(s, 0,Gecode::Limits::Int::int_max+10);
than
IntVar a;
a.init(s,0,Gecode::Limits::Int::int_max+10);
because when I tried to declare a variable with the first one, the program
returns an exception (that is OK because the domain is greater that the
limits), but when I tried with the second one, the program didn't return an
exception.
for example: in the following program, ttt is greater than gecode limits.
I'm working with:
Ubuntu 6.06: g++ 4.0.3 and gecode-1.3.0
#include "gecode/int.hh"
#include "gecode/kernel.hh"
#include <iostream>
using namespace Gecode;
class ZZZ : public Space {
public:
ZZZ(void) {}
virtual Space* copy(bool share) {
return new ZZZ(*this);
}
};
int main() {
ZZZ A;
IntVar ttt;
IntSet bb(Gecode::Limits::Int::int_max+3,Gecode::Limits::Int::int_max+10);
////ttt.init(&A,bb);
ttt.init(&A,0,Gecode::Limits::Int::int_max+3);
std::cout<<"max: "<<Limits::Int::int_max<<std::endl;
std::cout<<"ttt: "<<ttt<<std::endl;
unsigned long pp;
SpaceStatus estado = A.status(pp);
if(estado==SS_FAILED) std::cout<<"FAILED"<<std::endl;
if(estado==SS_SOLVED) std::cout<<"OK"<<std::endl;
return 0;
}
Cheers,
Alejandro
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.ps.uni-sb.de/pipermail/users/attachments/20060920/0a26f44c/attachment.htm>
More information about the gecode-users
mailing list


gain-envelope.js |
|
import Gain from "./gain"
|
|
|
Create a Gain envelope. Any audio source can be connected to an audio envelope. |
export default function GainEnvelope (ac, state) {
const env = Gain(ac)
env.state = Object.assign({}, GainEnvelope.state, state)
|
|
Trigger the envelope. It triggers the attack phase of the envelope at a given time and the release phase if a duration is given. Params
[when=now]
Number
[duration]
Number
Returns
GainEnvelope
this
|
env.trigger = function (time, dur) {
if (!time) time = ac.currentTime
console.log("trigger env", time, dur, env.state)
const release = triggerAdsr(time, env.gain, env.state)
if (dur) release(time + dur)
return release
}
return env
}
GainEnvelope.state = {
attack: 0.01,
release: 0.2
}
export function triggerAdsr (time, param, adsr) {
param.cancelScheduledValues(0)
|
|
attack phase |
const attack = adsr.attack || 0.01
param.setValueAtTime(0, time)
time += attack
param.linearRampToValueAtTime(1, time)
|
|
decay-sustain phase |
const sustain = adsr.sustain || 1
if (sustain !== 1) {
time += (adsr.decay || 0.01)
param.exponentialRampToValueAtTime(sustain, time)
}
const release = time => {
param.exponentialRampToValueAtTime(0.00001, time - 0.01)
param.setValueAtTime(0, time)
}
|
|
only trigger release if hold is defined |
if (adsr.hold !== undefined) {
time += (adsr.hold || 0)
param.setValueAtTime(sustain, time)
release(time + (adsr.release || 0.1))
}
return release
}
|


Written statement to Parliament
David Laws, the Minister of State for Schools, announces the outcome of applications to the Targeted Basic Need programme.
Today I am announcing the outcome of the applications to the Targeted Basic Need programme . The programme was launched in March this year to provide additional funding for school places in areas where they are most needed. Local authorities were invited to bid for funding for new schools, or to expand existing outstanding and good schools.
The Targeted Basic Need funding brings the total amount of funding allocated to local authorities for new school places over the current spending review period to over £5 billion - more than double the £1.9 billion spent by the previous government over an equivalent period. That funding is sufficient to provide the 417,000 places we need by 2015. By September this year, we expect 190,000 extra places will have been created during this parliament, with more still in the pipeline.
Our main basic need allocations - which go directly to local authorities, and are based on projections of their need - were issued in March, and gave authorities funding for the next 2 years, enabling them to plan provision. Those allocations totalled some £1.6 billion and will support local authorities to keep pace with projections of demand.
On top of this, we invited applications from local authorities for additional new places, particularly focused on places in outstanding or good schools, and on creating new academies sponsored by organisations with a good track record in educational success. We are determined that every pupil should not just have a place, but that the growth in the system is, as far as possible, concentrated in schools that parents and pupils really want to go to. So I am delighted to announce that the Targeted Basic Need programme will provide £820 million to fund an additional 74,000 high-quality school places on top of those already created and funded - all in areas that face the greatest pressure on places. These new places will be in 45 new schools and in 333 expanding schools that are rated as outstanding or good.
The number of pupils in England will continue to rise and ensuring that every child is able to attend an outstanding or good school in their local area is at the heart of the government’s comprehensive programme of reform of the school system.
We will continue to set up free schools where there is both demand from parents and where they can make the biggest difference to local provision through addressing basic need and improving the quality of local schools.
Over the longer term, we will also fund a further 500,000 places up to 2020 to 2021, as announced in the recent spending round - again, we judge that this will be sufficient to meet the projected demand for school places.
I will write today to all those MPs with successful projects in their constituencies. A list of successful projects has been placed in the House library today.
Published: 18 July 2013


One thing I have learned about myself, is that I tend to consider myself having a fixed mindset a lot of the
time. Some projects I take on I don’t feel like this but I believe with programming I have struggled to pick up
on a lot of the basics and it has caused me to feel a lot of frustration, and therefore causing myself to feel
unsure a lot.
I’ve also learned that I believe my emotional intelligence is actually quite high, and that comes from previous
jobs and just my personality in general. This actually puts my mind at ease quite a bit as I know that this is
such an important factor when it comes to working and looking for jobs that this is one of the key points
employers look for.
And a third thing would be that I know my strengths and weaknesses well, and I’m willing to work on them. I know
that I’m not the best at picking up things like this but I am great at talking and working with others, so I
have no fear of asking for help and admitting that I’m struggling. It has saved me a lot in foundations, and I’m
sure it will throughout the rest of my journey in programming.
They are all about how you are as a team player. You need to be able to have the skills to work well with people, and to be somebody that is easy and enjoyable to work with. Empathy will give you the ability to understand how others are feeling, and react appropriately to ensure the work is still able to be done without any unnecessary dramas. Self-awareness allows you to be aware of where you currently at in both your head and in your skills, and to be able to admit if you need help. Values is all about what you care about in a working environment. Do you like a happy team? Do you care more about quality or quantity? When it comes to learning and programming, it’s all about how you are willing to apply yourself and how willing you are to work as a great team member.
A lot of this learning has surprised me, but I’d say the biggest one was the whole fixed vs growth mindset study. It made me realise that there has been a lot of situations where I’ve gone to learn a new skill and given up earlier than I should have because I was so focused on believing I couldn’t do it. I’ve felt the same a few times during this foundations course but now I’m just so much more determined to stick to it (I mean I would have anyway) and prove that I can actually get something I find very difficult if I stick to it. It’s also made me more determined to continue working on other skills I have interest in like learning another language or playing the piano.
A lot of this was new territory for me. I’ve never really spent much time focusing on how the mind works, how we can improve our learning, or about the way we learn in general. So, spending a lot of time focusing on this was quite challenging for me, and a big part of that is because I would sometimes feel like I should spend more time practicing coding and improving my programming skills. Sometimes it felt like a distraction which was good, as it was a nice way to take a break from coding every now and then. But when the big core learning exercises took over it felt like I wasn’t using my time as well as I should be.
I reckon it’s because when it comes to getting into programming, it can be really tough for a lot of people. It’s a pretty complicated skill to take on, and having the ability to shape your mind to assist you in any way you can is such a crucial benefit. And it also falls down to understanding the mind, both yours and others. If you can accurately read other people, you can work better with them and for them. The soft skills are just as, if not more important when it comes to being employed, as technical skills can be taught to anybody, but being somebody who is great to work with is a finite skill not everybody knows how to do.
Funnily enough I spoke about this in a previous answer. While I do kind of wish I could have focused more on
programming, I don’t think it was a waste of time. I mainly think that because I struggled quite a bit with the
programming side of things so I would have liked to have spent more time on improving my skills there, but the
core section of foundations has been really interesting and has actually shaped my mind differently.
I’ve learnt a lot about how to think when times get tough, and how I can better a better employee in the eyes of
employers, solely because of thinking about my behaviour, and the way I think. Plus it’s only the beginning now
but these skills will become a lot more apparent as time goes on.
My pathway involves wanting to eventually move overseas and work in somewhere like Europe with my partner. I believe that having the skills I learn from Dev Academy will give me perfect opportunity to be able to find work anywhere in the world once I’m confident enough (Germany is a place we have in mind currently). I love the idea of working on websites and creating things that are pleasing for a user to use, so I definitely have interest in front-end development at the moment, but I will continue to keep all options open.
I think my initial thoughts from sprint two are pretty similar to what they are now. My main concern is that I haven’t picked up as many skills so far as I hoped I would. I want to be the best I can be coming in to bootcamp, so I need to put in a lot of extra miles when the time comes. I haven’t felt as many satisfying moments of completing challenges as I’d hoped because I had to ask for help a lot more often than I would have liked. In saying that, my strengths are still there because I still have the drive to do well, I just need to apply myself and not let myself or anybody else down.
In all honesty I don’t feel like I will have any major non-technical challenges at bootcamp. If I had to pick something though I would say time management might be a slight concern. My commute will take up two hours of each day, and then I want to try and fit in a gym session during the lunch break as well if possible, so it’s just about finding the balance of getting the necessary work in, but also giving myself time to have a mental break from all the stress.
I’ve always said that I would like to develop some leadership skills over this course. Mostly now more than ever because my confidence is lacking a bit after my experience in foundations. But also because I’ve never really worked a job or been in a role that required many leadership qualities so it’s something I don’t have much experience in. I’m pretty confident in my ability to work in a team in general but taking charge especially in something that’s still pretty foreign to me will be pretty interesting.
I expect myself to take full advantage of the people around me. By having a room full of peers and staff around me all the time I want to never have a moment where I choose to not take advantage of learning from other people as much as teaching myself. I want to try and stay on campus as much as possible and make the most of my time, and to gain confidence to admit when I’m feeling really down. I also hope to act professional under the right circumstances. I come from working in radio where I could pretty much act like I was at home each day, so I expect myself to take this seriously when the time comes.


{%extends 'base.html'%} {%load bootstrap3%} {%block title%} User profile {%endblock%} {%block content%}


{% extends "base.html" %} {% block contents %}
This is the home page for this application.
Select a namespace to work with


{% extends "base.html" %} {% block head %} {{ super() }} {% endblock %} {% block title %}Home{% endblock %} {% block content %}
The next portion of this website should serve as a resource for the musicians involved with the event.
If you have a problem with your music being represented here, contact me.


Mike's Mets Player Review Series: Brooks Pounders
by Mike PhillipsNow that the 2019 season is over for the New York Mets, we have been looking back at the year that was. After taking a more general view of the offense, pitching, and coaching staff, it’s time to take a deeper dive into the Mets’ players. This series will take a look at every player on the roster for the Mets at the end of season from A (Pete Alonso) to Z (Daniel Zamora). The review will look at their season statistics, stories, and what role (if any) they will have next season. We continue the series today with a look at relief pitcher Brooks Pounders.
Player Review: Brooks Pounders
Jun 24, 2019; Philadelphia, PA, USA; New York Mets relief pitcher Brooks Pounders (46) throws a pitch against the Philadelphia Phillies at Citizens Bank Park. Mandatory Credit: Eric Hartline-USA TODAY Sports
2019 Stats:
Minor Leagues (2 Teams): 43 Appearances, 1 Start, 56.1 Innings Pitched, 3-3 Won-Loss Record, 4.31 ERA, 1.21 WHIP, 1 Save, 66:20 K:BB Ratio
Major Leagues: 7 Appearances, 7.1 Innings Pitched, 1-0 Won-Loss Record, 6.14 ERA, 1.50 WHIP, 5:2 K:BB Ratio
Story: Brooks Pounders began 2019 in the Cleveland Indians’ organization after signing a minor league deal with the team. The Indians never gave him a shot at the big leagues, waiving Pounders in June before trading him to the Mets for cash considerations. With the Mets hurting for relievers, Pounders got an immediate shot in the big league bullpen and didn’t look too bad, even picking up a win in relief. Pounders only lasted two weeks with the Mets before being sent back to AAA Syracuse in early July. The Mets designated Pounders for assignment in late August, and after he cleared waivers the Mets outrighted Pounders off the 40 man roster to Syracuse, where he finished his year.
Grade: D
Pounders flashed a little bit for the Mets, but it wasn’t enough to earn more than a two week trial at the big league level.
Contract Status: Minor League Free Agent
Odds of Returning: 10%
2020 Role: Middle Reliever
After the season ended Pounders declared free agency. The Mets could look to bring him back on a minor league deal, but odds are that both sides will go their separate ways.
Check back tomorrow as our Player Review Series continues with a look at catcher Wilson Ramos!


Illusory Orb
Puck launches a magic orb that floats in a straight path, damaging enemy units along the way. At any point, Puck may teleport to the orb's location using Ethereal Jaunt.
| Mana Cost: | 150/150/150/150 |
| Cooldown: | 12 |
| ABILITY: | Point Target |
| DAMAGE TYPE: | Magical |
| PIERCES SPELL IMMUNITY: | No |
| DAMAGE: | 70 / 140 / 210 / 280 |
| DISTANCE: | 1800 / 1800 / 1800 / 1800 |
The playful Faerie Dragon delights in confusing others, vanishing and reappearing where unexpected.
Waning Rift
Puck releases a burst of faerie dust that deals damage and silences enemy units nearby.
| Mana Cost: | 100/110/120/130 |
| Cooldown: | 16 |
| ABILITY: | No Target |
| DAMAGE TYPE: | Magical |
| PIERCES SPELL IMMUNITY: | No |
| DAMAGE: | 100 / 160 / 220 / 280 |
| RADIUS: | 400 / 400 / 400 / 400 |
| DURATION: | 0.75 / 1.5 / 2.25 / 3 |
With a mischievous grin, Puck spreads its enchanted powder which disrupts magical flow.
Phase Shift
Puck briefly shifts into another dimension where it is immune from harm.
| Mana Cost: | 0/0/0/0 |
| Cooldown: | 6 |
| ABILITY: | No Target, Channeled |
| DURATION: | 0.75 / 1.5 / 2.25 / 3.25 |
With a quip and flash, Puck returns to the alien dimension from whence it came.
Ethereal Jaunt
Teleports Puck to a flying Illusory Orb.
Dream Coil
Creates a coil of volatile magic that latches onto enemy Heroes, stunning them for .5 seconds and damaging them. If the enemy hero stretches the coil by moving too far away, it snaps, stunning and dealing additional damage. Upgradable by Aghanim's Scepter.
| Mana Cost: | 100/150/200 |
| Cooldown: | 85 |
| ABILITY: | Point Target |
| DAMAGE TYPE: | Magical |
| PIERCES SPELL IMMUNITY: | No |
| COIL DURATION: | 6 / 6 / 6 |
| INITIAL DAMAGE: | 100 / 150 / 200 |
| BREAK RADIUS: | 600 / 600 / 600 |
| BREAK STUN DURATION: | 1.5 / 2.25 / 3 |
| BREAK DAMAGE: | 100 / 150 / 200 |
| SCEPTER COIL DURATION: | 8 |
| SCEPTER BREAK DAMAGE: | 200 / 250 / 300 |
| SCEPTER BREAK STUN DURATION: | 1.5 / 3 / 4.5 |
The Faerie Dragon sows confusion by forcing its enemies to vividly dream about their own mortality.


{% from 'host/common.html' import edit_field %} {% from 'share/select_hosts_by_platform.html' import select_hosts_by_platform %} {% macro conformance_report_dialog(conformance_report_dialog_form) %}


[t]Dear {$name|escape},[/t]
[t]We have some candidates that might be interesting for you. Here you can view them: [/t]{$loginurl}


This item is 50 pixels wide.
Item with flexible width.
This item is 50 pixels wide.
Item with flexible width.
Inflexible item of 100 pixels width.


Hello!
This is just a site for my projects, ongoing and old ones.
- If you want a page like
https://aviotron.github.io/newpage
- first make new repo 'newpage' through github desktop
- make new angular 2 project with name 'newpage'
- copy the content of the project to the local git repository created in the previous steps
- then run this command in cmd in the rot folder(make sure git is installed already)
git remote add origin https://github.com/USERNAME/PROJECT_NAME.git
- then run this command
git push origin master
- there is a utility gh-pages which let your publish github pages easily
- run this to install it
npm install -g gh-pages
- now build the project using
ng build --prod --base-href /PROJECT_NAME/
- and finally to publish
gh-pages -d dist


Nyzo version 573 (commit on GitHub) adds cycle-transaction functionality for blockchain version 2.
This version affects all run modes.
The ApprovedCycleTransaction class, as the comment explains, encapsulates a reduced record of approved cycle transactions. This is stored in the balance list to allow implementation of NTTP-3/3.
BalanceList has two new fields. The pendingCycleTransactions map allows cycle transactions to accumulate votes on the blockchain, and the recentlyApprovedCycleTransactions list assists in implementation of the 10,000-block cumulative cycle transaction limit of ∩100,000.
Before blockchain version 2, these fields are both empty.
In the BalanceList.getPreviousVerifiers() accessor, a new list is no longer created. While creating copies of mutable fields is good object-oriented practice, it can be inefficient. Instead, to only create copies when necessary, the responsibility for creating a copy is typically shifted to the client of the class in the Nyzo codebase. This allows the client to create a copy only when mutating the object.
Accessors for the new BalanceList fields were added.
In BalanceList.fromByteBuffer(), the new fields are read for blockchain versions 2 and above.
In BalanceList.getByteSize(), the new fields are considered.
In BalanceList.getBytes(), the new fields are added. To ensure a consistent binary representation, the pending transactions are sorted on identifier.
In BalanceManager.approvedTransactionForBlock(), a condition was added to accept cycle-signature transactions in blockchain version 2 and above. These transactions allow cycle-transaction signatures to be placed on the blockchain immediately, eliminating the need to bundle the signatures with the transactions.
Later in BalanceManager.approvedTransactionForBlock(), an exception to the µ1 minimum was added for cycle-signature transactions.  In memory, though, the amount field is always 0.
When sorting transactions to limit block size in BalanceManager.approvedTransactionForBlock(), cycle-signature transactions are promoted to the top of the list. Without this modification, these transactions would have been placed at the bottom of the list and at risk of removal from large blocks.
In BalanceManager.enforceCycleTransactionRules(), a condition was added to remove all cycle transactions from out-of-cycle verifiers. Also, conditions were added to ensure that cycle-signature transactions are only accepted from in-cycle verifiers and in the appropriate blockchain versions. These rules are partially or fully redundant with other transaction protections, but having them in this method improves the verifiability and robustness of the code.
Later in BalanceManager.enforceCycleTransactionRules(), a condition was added to only apply the old cycle-transaction rules to blockchain version 1. Cycle transactions are processed differently in blockchain version 2. This code is unchanged aside from the added condition and resulting indentation changes.
Git's unfortunate handling of indentation changes continues. This code is also unchanged.
Bundling of cycle-transaction signatures is neither required nor permitted past blockchain version 1.
The Block class is responsible for deriving balance lists from one block to the next. At the top of this class, constants were added for handling the new ∩100,000 limit on cycle account transfers every 10,000 blocks.
The maximumBlockchainVersion increased from 1 to 2.
In Block.fromByteBuffer(), the call to Transaction.fromByteBuffer() now has another argument. This argument is used to let the Transaction.fromByteBuffer() method know that it is reading a transaction from a balance list.
In Block.balanceListForNextBlock(), the pendingCycleTransactions map and recentlyApprovedCycleTransactions list are retrieved from the previous balance list. When previousBlock is null, for the Genesis block, these are initialized as empty.
In Block.balanceListForNextBlock(), in the loop that updates balances for transactions, cycle transactions are only processed for blockchain version 1. In blockchain version 2, cycle transactions are accepted into the blockchain immediately, but they only result in funds transfer if they are approved by the cycle. This is a single condition added, but it appears to be larger due to indentation changes.
After the block of code that processes version 1 cycle transactions, processing of version 2 cycle transactions has been added. The logic was placed in a separate method to avoid making the already lengthy Block.balanceListForNextBlock() method even longer.
The new pendingCycleTransactions and recentlyApprovedCycleTransactions fields are passed to the BalanceList constructor.
Block.processV2CycleTransactions() starts by updating the pendingCycleTransactions map with transactions from the new block. New cycle transactions are added to the map, and transactions from out-of-cycle verifiers are removed. Cycle-signature transactions are attached to the appropriate cycle transactions, and out-of-cycle signatures are removed.
The recentlyApprovedCycleTransactions list is used to determine how much of the ∩100,000-per-10,000-block limit has been used. Entries are added to the end of this list, so the oldest entries will be at the beginning of the list. Entries that are no longer relevant are removed. The while loop is not actually necessary — an if statement would be satisfactory because no more than one cycle transaction is processed per block — but the while loop is more robust to potential future logic changes.
Next, the recent transactions are summed to determine how much of the limit is still available. This limit, along with the balance of the cycle account, determine the maximum allowable cycle transaction.
The pendingCycleTransactions map is scanned to see if any unprocessed transactions have been approved. To simplify logic, no more than one cycle transaction is processed per block. If a transaction has enough votes is a suitable amount, the number of yes votes is counted. If the number of yes votes meets or exceeds the 50% + 1 threshold, the transaction is selected for processing.
When a cycle transaction is approved, it is removed from the pendingCycleTransactions map and added to the recentlyApprovedCycleTransactions list. Then, the amount of the transaction is deducted from the cycle account and added to the receiver's account.
BlockchainVersionManager was modified to allow multiple activation heights for different versions. A production activation height of 7,000,000 was added for version 2, as specified in the NTTP-3 implementation plan.
In CycleTransactionManager.registerTransaction(), an empty map is passed for the new argument when creating a copy of the transaction without signatures.
In the Transaction, the typeCycleSignature, voteYes, and voteNo constants were added as part of the new transaction-based voting system. The new type of transaction allows storage of the cycleTransactionSignature and a cycleTransactionVote. As transactions are all timestamped, a verifier may vote multiple times for the same cycle transaction, with the newest vote overriding older votes.
The identifierComparator sorts a list of ByteBuffer representations of identifiers. This was previously specified inline for sorting cycle signatures. It was made into a public field to allow reuse.
Methods were added for adding signatures to the map for cycle transactions, removing signatures of verifiers no longer in the cycle, and accessing the new fields.
A static method was added for copying cycle transactions. In derivation of balance lists, the signature maps are modified, so these are copied internally. The arrays are mutable but never mutated, so they are not copied.
The cycleSignatureTransactions field was added to the cycleTransaction() overload used for rebuilding a serialized cycle transaction.
In the cycleTransaction() overload used to create a new cycle transaction, and empty map is created for the cycleSignatureTransactions field.
Methods were created for building cycle-signature transactions. The first overload is for a new transaction, and the second is for rebuilding a serialized transaction.
In the getFee() method, cycle-signature transactions are explicitly excluded from fees. This is unnecessary, because these transactions always have an amount of 0, but it helps to reinforce the idea that these transactions may be freely submitted by in-cycle verifiers.
The Transaction.getByteSize() method now considers cycle transactions for the version-2 blockchain and cycle-signature transactions.
The Transaction.getBytes() method now begins with handling of the special case of cycle-signature transactions, which have only the type and timestamp fields in common with other transaction types.
Later in Transaction.getBytes(), the cases for version 1 and version 2 cycle transactions are handled appropriately. Each cycle transaction contains values in no more than one of the two signature maps. If both maps are empty, the cycle transaction is compatible with both blockchain version 1 and blockchain version 2.
The identifierComparator is now used instead of the inline comparator.
When rebuilding a cycle transaction, the method needs to know whether to rebuild a version-1 or version-2 cycle signature list. Fortunately, version-1 cycle signature lists are only contained in blocks, and version-2 cycle signature lists are only contained in balance lists. To provide this information, a boolean argument, balanceListCycleTransaction, was added to the Transaction.fromByteBuffer() method. Some reads were moved inside conditions to allow cycle signature transactions to be properly read, and instances of recipientIdentifier were replaced with receiverIdentifier to make the code more consistent.
Bundled cycle signatures are read according to whether the transaction is being read from a balance list, and the cycle transaction is assembled.
Reading of and assembly of cycle signature transactions was added.
In Transaction.performInitialValidation(), considerations were added for cycle-signature transactions.
In Transaction.signatureIsValid(), consideration was added for cycle-signature transactions.
In the TransactionResponse constructor, cycle and cycle-signature transactions are added to the transaction pool for blockchain versions 2 and above.


Timing & scheduling
Both realtime and turn-based games need to maintain the notion of a time: to manage events, schedule turns, perform correct timing and related measurements. rot.js offers several helper tools at varying levels of abstraction to help with these tasks. Click on individual sub-chapters to read more detailed information.
- Event queue is the most low-level approach: a simple priority queue that maintains a correct order of time-based data.
- Scheduler maintains a list of entities and picks them repeatedly based on a scheduling strategy. There are three built-in scheduling strategies available.
- Engine takes an existing scheduler and automatically executes scheduled actions. Asynchronous actions are supported via recursive engine locking.


?BOTANICAL
THE
NEW
YORK
BOTANICAL
GARDEN
EXPLORATION
OF
CUBA
Province
of
Pinar
del
Rio
Limestone
Hills,
vicinity
of
Sumidero
/b-flsaZZo\4_
U
'
New
Yorfc
Botanical
Garden
August
2,
4,1912
lbD4207
6
7
8
9
10
.
M
v
The
New
York
copyright
reserved
Botanical
Garden
dtt
T
R
Sšderstršm
A
f
0
Zuloaga.
Aug
1983
1604207
Legend -
Level of confidence that token is an accurately-transcribed word
extremely low
very low
low
undetermined
medium
high
very high


SHADOWLANDS A film review by Michael John Legeros Copyright 1994 Michael John Legeros
Director: Richard Attenborough ("Chaplin," "Gandhi") Writer: William Nicholson, based on his play Cast: Anthony Hopkins Debra Winger MPAA Rating: "PG" Running Time: 130 minutes
----
"I'm afraid I panicked." - C.S. Lewis on why he ordered a gin-and-tonic on his honeymoon.
Richard Attenborough had a good year in '93. He breezed his way through JURASSIC PARK with a warm performance as the didn't-mean-to- be-evil scientist. And, in December, he served up his own movie magic with SHADOWLANDS, the touching, true-life story of how author C. S. Lewis discovered love very late in his life.
The story opens in 1952 at Oxford University. Lewis is already a world-renowned children's author, much to the bemusement of his friends and fellow faculty members. They chide "Jack," as he's called, because they know all too well of his controlled, insulated world --a world with no seeming accommodation for children or child-like behavior.
Into that world steps Joy Gresham, an American poet who has been corresponding with Lewis. Her letters hint of a special awareness into his character. And when she travels to England with her son, Joy discovers a common bond with her favorite author--a bond that is tested by friendship, love, and illness....
SHADOWLANDS is a delightfully unobtrusive film.
Director Attenborough lets his actors act with an uncommon sparsity of intrusive technique. Given the very melodramatic nature of the story, the film's plain-vanilla wrapper is almost staggering. And yet, with hardly any overt manipulation from the filmmaker, the story still makes quite an impact.
(If nothing else, see it for the background music that stays in the background! :-)
Structurally, SHADOWLANDS weakens somewhere in the last third.
The story wanders off-course for a bit as the characters grapple with a host of "heavier" themes. The saturating solemnity--coupled with an already strained running time--results in a story that seems to lose steam before galloping onward to its fine finish.
Despite the weakened final act, SHADOWLANDS is still a very rewarding experience. Credit the combined efforts of a talented cast and an excellent writer.
Playing his second repressed-but-I-like-it character since THE REMAINS OF THE DAY, Hopkins glides through with his role with magical ease. His part is much more expressive, though no more interesting, than his last role of Stevens the Butler. He'll be a front-runner for Best Actor.
 She walks and talks American, but her eyes flash with unexpected intelligence. She's the perfect foil for the stately actor.
The supporting players are tremendous. Standouts include John Wood, Peter Firth, and Edward Hardwicke as "Jack's" droll brother Warnie.
Writer William Nicholson helps the actors along with line after line of quotable dialogue. Though his script is heavy on the meanings of life, love, and loss, humor wins the day for most of the movie. Some of the better bits include Winger's first appearance in a British tea room, a hilarious roundtable discussion on Christmas, and a classic bit of Hopkins ordering room service.
Bottom line: SHADOWLANDS is the touching, true-life story of how C. S. Lewis discovered love very late in his life. Seemingly overlong, due to a weakened third act, this delightful film is a stunning showcase for everyone involved. Grade: A-
.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


let x = 4 in x+3 end foo.sml:1.5 Error: syntax error: inserting VALThis error message indicates how the parser attempted to "repair" the input (from a file foo.sml), and in this case indicates that the parser thinks that val is needed after the let (at line 1, column 5 of foo.sml).
Syntax errors in expressions typed into the interactive system (instead of taken from files) are not repaired very well, since the parser cannot take advantage of lookahead beyond what you have typed.
If a syntax error is found in a program, then semantic errors will not be reported (and the program will not be executed).
For more detailed discussion of syntax errors generated by the parser, see the explanations of errors [76] through [79] below.
Error: Compiler bug:
indicate that an unexpected situation has been encountered by
the compiler. Example:
Error: Compiler bug: ModuleUtil: getStr: bad entitySuch a message indicates a bug in the compiler, and it should be reported to , with self-contained code to reproduce the message if possible.
Most such messages will be secondary error messages, meaning that they occur immediately following a normal (i.e. non "Compiler Bug") error message. Secondary errors typically occur when a primary error disrupts the internal state or data structures of the compiler, and the corrupted state then causes further failures. The SML/NJ compiler is pretty good at recovering from errors and failing gracefully, so secondary Compiler Bug errors are rare.
raise
keyword should
evaluate to an exception value, i.e. a value of type exn
.
In this case, the value has some other, inappropriate type. E.g.:
raise 3; stdIn:16.7 Error: argument of raise is not an exception [literal] raised: int in expression: raise 3
datatype 'a T = A of 'a; datatype 'a T = A of 'a datatype 'a T1 = datatype T; stdIn:18.1-18.28 Error: argument type variables in datatype replication datatype T1 = datatype T; datatype 'a T = A of 'a
fun
declaration, or one of the
formal parameters of an infix function symbol is missing.
fun f = 3; stdIn:1.5 Error: can't find function arguments in clause infix 3 ++; infix 3 ++ fun (x xx) = 3; stdIn:1.5-2.6 Error: can't find function arguments in clause stdIn:1.5-2.6 Error: illegal function symbol in clause
case
keyword. It's type must agree with the type of the lhs patterns in
the rules (pat => exp
) following the
of
keyword. All the patterns of the rules also have
to agree in type, but that is another error.
case 3 of true => 1 | false => 2; stdIn:1.1-25.16 Error: case object and rules don't agree [literal] rule domain: bool object: int in expression: (case 3 of true => 1 | false => 2)
fun
definition, the function name must appear in
each clause. If it is omitted from one or more clauses, this error results.
fun f nil = 1 | (x::y) = x; stdIn:1.5-17.15 Error: clauses don't all have function nameThis error is also reported when the function name in two clauses of the function definition differ, for instance because of a misspelling.
fun test (SOME s) = true | teat (NONE) = false; stdIn:120.5-121.24 Error: clauses don't all have function name
fun
declaration, each clause, or rule, separated by
|
(vertical bar symbol), has to have the same number of
curried arguments.
fun f x y = 3 | f a b c = 4; stdIn:1.5-26.16 Error: clauses don't all have same number of patterns stdIn:24.6-26.16 Error: types of rules don't agree [tycon mismatch] earlier rule(s): 'Z * 'Y -> int this rule: 'X * 'W * 'V -> int in rule: (a,b,c) => 4
nil
can't be applied to an
argument in a pattern.
val nil x = []; stdIn:1.5-24.8 Error: constant constructor applied to argument in pattern:nil
datatype t = A of int; val A true = A 3; stdIn:1.1-26.3 Error: constructor and argument don't agree in pattern [tycon mismatch] constructor: int -> t argument: bool in pattern: A true
datatype t = A of int val A = A 3; stdIn:17.5-17.12 Error: data constructor A used without argument in pattern
signature S = sig datatype t = A of int end; signature S = sig datatype t = A of int end structure A : S = struct datatype t = A of int | B end; stdIn:1.1-27.4 Error: datatype t does not match specification constructors in actual only: B
datatype t = A | B | A of int; stdIn:1.1-26.5 Error: datatype t has duplicate constructor name(s): A
signature S = sig type u datatype s = A of u sharing type u = s end; stdIn:16.1-21.4 Error: dependency cycle in instantiateBy default, every signature is instantiated when it is declared, to detect errors as early as possible. However, signature instantiation is strictly only necessary when a signature is used as a functor parameter signature or in an opaque (
:>
) signature constraint.
signature S = sig datatype t = A of int end; signature S = sig datatype t = A of int end signature T = sig datatype u = A include S end; stdIn:27.3-28.13 Error: duplicate constructor specifications for A caused by include
exception E of int and E of bool; stdIn:17.1-18.14 Error: duplicate exception declaration: ENote that it is ok if the same exception name is declared in different exception declarations, as in the following.
exception E of int; exception E of int exception E of bool; exception E of bool
val rec
declaration, the names of the functions must be distinct.
val rec f = (fn x => x) and f = (fn y => y + 3); stdIn:21.1-22.24 Error: duplicate function name in val rec dec: f
fun
declaration, the names of the functions must be distinct.
fun f x = x and f y = y + 3; stdIn:1.1-23.16 Error: duplicate function names in fun dec: f
{a=3,b=true,a="abc"}; stdIn:1.1-1.21 Error: duplicate label in record: a fun f {a=x,a=y} = 3; stdIn:2.2-2.11 Error: duplicate label in record: a
x
cannot be specified
twice as a value or constructor, but it can be specified as a
value, as a type, as a structure, and as a functor in the same
signature.
signature S = sig val x : int val x : bool end; stdIn:20.3-21.16 Error: duplicate specifications for variable or constructor x in signature signature S = sig type t type t end; stdIn:24.3-25.10 Error: duplicate specifications for type constructor t in signature signature S = sig exception Foo exception Foo of int end; stdIn:28.3-29.24 Error: duplicate specifications for variable or constructor Foo in signature signature S = sig structure A : sig end structure A : sig end end; stdIn:32.3-33.25 Error: duplicate specifications for structure A in signature signature S = sig val x : int datatype t = x end; stdIn:36.3-37.18 Error: duplicate specifications for variable or constructor x in signature signature S = sig val x : int type x structure x : sig end end; signature S = sig val x : int type x structure x : sig end end
include
spec. If the
included functor spec comes first, you get error [19] instead.
signature S1 = sig functor F () : sig end end; signature S1 = sig functor F : (:) : signature S2 = sig include S1 functor F(X: sig val x : int end): sig end end; stdIn:55.3-56.46 Error: duplicate specifications for functor F in signature signature S2 = sig functor F(X: sig val x : int end): sig end include S1 end; stdIn:59.3-60.14 Error: duplicate specifications for functor F caused by includeend
include
spec. If the
included structure spec comes first, you get error [19] instead.
signature S1 = sig structure A : sig end end; signature S1 = sig structure A : sig end end signature S2 = sig structure A : sig val x : int end include S1 end; stdIn:67.3-68.14 Error: duplicate specifications for structure A caused by include signature S3 = sig include S1 structure A : sig val x : int end end; stdIn:71.3-72.37 Error: duplicate specifications for structure A in signature
include
spec. If the
included structure spec comes first, you get error [19] instead.
signature S1 = sig type t end; signature S1 = sig type t end signature S2 = sig type 'a t include S1 end; stdIn:79.3-80.14 Error: duplicate specifications for type t caused by include signature S3 = sig include S1 type 'a t end; stdIn:83.3-84.13 Error: duplicate specifications for type constructor t in signature
and
.
If the simultaneous declaration is split into
separate declarations, there is no error.
type t = int and t = bool; stdIn:17.1-18.13 Error: duplicate type definition: t type t = int; type t = int type t = bool; type t = bool
withtype
part.
datatype t = A and t = B; stdIn:1.1-19.10 Error: duplicate type names in type declaration: t datatype t = A withtype t = int; stdIn:1.1-20.17 Error: duplicate type names in type declaration: t
type ('a,'a) t = 'a * 'a; stdIn:21.4-21.11 Error: duplicate type variable name: a datatype ('a,'a) t = A of 'a; stdIn:1.1-21.15 Error: duplicate type variable name: a fun ('a,'a) f(x:'a) = x; stdIn:1.1-21.10 Error: duplicate type variable name: a
include
spec. If the
included structure spec comes first, you get error [19] instead. It
does not matter whether the multiple value specifications give the
same type or not.
signature S1 = sig val x : int end; signature S1 = sig val x : int end signature S2 = sig val x : bool include S1 end; stdIn:29.3-30.14 Error: duplicate value specifications for x caused by include signature S3 = sig val x : int include S1 end; stdIn:33.3-34.14 Error: duplicate value specifications for x caused by include signature S4 = sig include S1 val x : int end; stdIn:37.3-38.15 Error: duplicate specifications for variable or constructor x in signature
fun f(x,x) = x; stdIn:1.5-2.10 Error: duplicate variable in pattern(s): x fun f x x = x; stdIn:1.5-2.9 Error: duplicate variable in pattern(s): x val (x,x) = (3,3); stdIn:1.1-36.3 Error: duplicate variable in pattern(s): x
val x : 'a list = (fn x => x) nil; stdIn:1.1-37.14 Error: explicit type variable cannot be generalized at its binding declaration: 'a val 'a (x: 'a list) = (fn x => x) nil; stdIn:1.1-38.5 Error: explicit type variable cannot be generalized at its binding declaration: 'a
fun f x = (hd x)+1 handle Empty => true; stdIn:2.6-38.7 Error: expression and handler don't agree [literal] body: int handler range: bool in expression: hd x + 1 handle Empty => true | exn => raise exn
op
keyword.
+(2,3); stdIn:1.1 Error: expression or pattern begins with infix identifier "+" op +(2,3); val it = 5 : int
op
keyword.
2 +; stdIn:40.4 Error: expression or pattern ends with infix identifier "+" stdIn:40.1-40.4 Error: operator is not a function [literal] operator: int in expression: 2 + (fn x => x) +; stdIn:40.3 Error: expression or pattern ends with infix identifier "+" (fn x => x) op +; val it = fn : int * int -> int
infix 10 ++; stdIn:43.7-43.9 Error: fixity precedence must be between 0 and 9 infix ~2 ++; stdIn:2.2-2.4 Error: fixity precedence must be between 0 and 9
exception Foo = nil; stdIn:17.1-17.20 Error: found data constructor instead of exception
val x = 3; val x = 3 : int exception Foo = x; stdIn:18.1-18.18 Error: found variable instead of exception
handler
keyword, the type of the patterns on the left hand side the rule
must be exn
. In the example below, the first error
message is caused by a mismatch with an implicit default rule that
handles exceptions not handled by the explicit rules of the handler.
3 handle nil => 4; stdIn:1.1-18.7 Error: types of rules don't agree [tycon mismatch] earlier rule(s): 'Z list -> int this rule: exn -> 'Y in rule: exn => raise exn stdIn:1.1-18.7 Error: handler domain is not exn [tycon mismatch] handler domain: 'Z list in expression: 3 handle nil => 4 | exn => raise exn
signature S = sig datatype 'a t = datatype bool end; stdIn:26.3-26.33 Error: ill-formed datatype spec
as
keyword can have a type constraint, but only one. This error also
occurs in other circumstances, as illustrated by the second example.
val x : int list : int list as y::z = [1,2]; stdIn:29.5-29.36 Error: illegal (multiple?) type constraints in AS pattern val (x: int list) as (y::z : int list) = [1]; stdIn:1.5-24.10 Error: illegal (multiple?) type constraints in AS pattern stdIn:1.5-24.10 Error: parentheses illegal around variable in AS pattern val x : int list as (y::z) = [1,2]; stdIn:1.1-24.6 Warning: binding not exhaustive x as y :: z = ... val x = [1,2] : int list val y = 1 : int val z = [2] : int list
fun
and the equal sign
must be a well-formed applicative term, and the operator (i.e. the function
part of the top-level application) of this term must be a simple
identifier. If the application has an infix operator, it must
be parenthesized (unless followed immediately by a type constraint
or the equal sign); otherwise it may not be parenthesized.
fun (f x) = 3; (* bad parentheses *) stdIn:1.5-2.5 Error: can't find function arguments in clause stdIn:1.5-2.5 Error: illegal function symbol in clause fun (x+y) = 3; (* ok; redefines infix + operator *) val + = fn : 'a * 'b -> int
signature XSIG = sig datatype ('a, 'b) t = A of 'a | B of 'b end functor F (type u structure X: XSIG sharing type X.t = u) = struct end stdIn:49.11-54.6 Error: inconsistent arities in type sharing t = u : t has arity 2 and u has arity 0.
signature S = sig eqtype t datatype u = U of int -> int (* not an equality type *) sharing type t = u end; stdIn:17.1-22.4 Error: inconsistent equality properties in type sharing
infix foo; infix foo fun foo (x,y) = x + y; stdIn:34.5-34.8 Error: infix operator "foo" used without "op" in fun decThe correct definition is:
fun op foo(x,y) = x +y; val foo = fn : int * int -> int
fun
in
a function declaration is a parenthesized application, implying an
infix application, but the middle subterm is not an infix symbol.
fun (x f y) = (); (* would work if "f" were infix *) stdIn:18.8 Error: infix operator required, or delete parentheses fun x f y = (); (* ok, but maybe not what was intended *) val x = fn : 'a -> 'b -> unit
val rec
declaration, the if the
identifier being declared (on the left hand side of the declaration) is
an infix symbol, it must be preceeded by the op
keyword.
infix ++; infix ++ val rec ++ = (fn x => x); stdIn:17.9-17.11 Error: infix symbol "++" used where a nonfix identifier was expected val rec op ++ = (fn x => x); val ++ = fn : 'a -> 'a
Compiler.PPTable.install_pp
installs a
user-defined pretty printer function (the second argument) for a
generative (i.e. datatype or abstype) designated by the first
argument, which must be a nonempty list of strings that can be
interpreted as a symbolic path (longTyCon) naming a
datatype or abstract type in the current environment.
This function should only be called at top level.
Compiler.PPTable.install_pp [] (fn x => fn y => ()); Error: install_pp: empty path
Compiler.PPTable.install_pp
installs a
user-defined pretty printer function (the second argument) for a
generative (i.e. datatype or abstype) designated by the first
argument, which must be a nonempty list of strings that can be
interpreted as a symbolic path (longTyCon) naming a datatype
or abstype in the current environment. This function should only
be called at top level.
Compiler.PPTable.install_pp ["t"] (fn x => fn y => ()); Error: install_pp: nongenerative type constructor
Option.valOf(Int.minInt) to Option.valOf(Int.maxInt)
val x =<PHONE_NUMBER>; val x =<PHONE_NUMBER> : int val x =<PHONE_NUMBER>; stdIn:2.4-22.7 Error: int constant too large val x = ~1073741824; val x = ~1073741824 : int val x = ~1073741825; stdIn:30.10-30.21 Error: int constant too large
Compiler.Control.MC.matchNonExhaustiveError
is set to true (the default is false), otherwise it is a warning if
Compiler.Control.MC.matchNonExhaustiveWarn
is set to true. If neither of these flags is true, then
the compiler does not complain about nonexhaustive matches.
fun f 0 = 1 | f 1 = 1; stdIn:1.1-22.12 Error: match nonexhaustive 0 => ... 1 => ... val f = fn : int -> int
Compiler.Control.MC.matchRedundantError
is set to false (default is true), only a warning message
is given. If
Compiler.Control.MC.matchRedundantWarn
is also false (default is true), no message is generated.
fun f (0, true) = 1 | f (0, false) = 2 | f (0, _) = 3 | f _ = 4; stdIn:24.1-27.14 Error: match redundant (0,true) => ... (0,false) => ... --> (0,_) => ... _ => ...
Example:Compiler.Control.MC.matchNonExhaustiveError
Compiler.Control.MC.matchNonExhaustiveWarn
Compiler.Control.MC.matchRedundantError
Compiler.Control.MC.matchRedundantWarn
fun f 1 = 1 | f 2 = 3 | f 1 = 4 ; stdIn:1.1-24.12 Error: match redundant and nonexhaustive 1 => ... 2 => ... --> 1 => ...
signature S = sig type t end where type t = int and type t = bool; stdIn:1.1-72.20 Error: multiple where defs for tor even:
signature S = sig type t end where type t = int and type t = int; stdIn:1.1-76.19 Error: multiple where defs for t
fun f (0 0) = true; stdIn:17.5-17.19 Error: non-constructor applied to argument in pattern
val a = 0; val a = 0 : int fun f (a 0) = true; stdIn:18.5-18.19 Error: non-constructor applied to argument in pattern: a
signature S = sig structure A : sig end sharing A = B.C end; stdIn:41.11-41.18 Error: nonlocal path in structure sharing: B.C
signature S = sig type t sharing type t = B.t end; stdIn:44.16-44.23 Error: nonlocal path in type sharing: B.t
fun f true = 0 | f false = 1; val f = fn : bool -> int f 3; stdIn:25.1-25.4 Error: operator and operand don't agree [literal] operator domain: bool operand: int in expression: f 3
3 true; stdIn:1.1-19.6 Error: operator is not a function [literal] operator: int in expression: 3 true
|
), the type
of all the subpatterns must agree.
fun f (0 | 1 | true) = 0; stdIn:1.1-21.4 Error: or-patterns don't agree [literal] expected: int found: bool in pattern: (1 | true)
fun f 0w100000000000 = 0 | f _ = 1; stdIn:1.1-27.12 Error: out-of-range word literal in pattern: 0w100000000000
true + true; stdIn:19.5 Error: overloaded variable not defined at type symbol: + type: bool
fun
declaration, each clause, or rule, separated by
|
(vertical bar symbol), has to have the same type (both
in the type accepted by the clauses, and the type returned by the clauses).
datatype typeA = A; datatype typeA = A datatype typeB = B; datatype typeB = B fun f A = 0 | f B = 0; stdIn:36.1-37.12 Error: parameter or result constraints of clauses don't agree [tycon mismatch] this clause: typeB -> 'Z previous clauses: typeA -> 'Z in declaration: f = (fn A => 0 | B => 0)
pat as pat
, where the pattern to the left
of the "as" is a simple variable, the variable must not be wrapped in parentheses.
val ((a) as (b,c)) = (4,5); stdIn:19.5-31.2 Error: parentheses illegal around variable in AS pattern
fun f (0:bool)=0; stdIn:38.1-38.17 Error: pattern and constraint don't agree [literal] pattern: int constraint: bool in pattern: 0 : bool
val pat = exp
, the type of
pat must match the type of exp.
val s:string = 6; stdIn:1.1-18.6 Error: pattern and expression in val dec don't agree [literal] pattern: string expression: int in declaration: s : string = 6
val pat = exp
, the type of
pat
must match the type of exp
.
val s:string = 6; stdIn:1.1-18.6 Error: pattern and expression in val dec don't agree [literal] pattern: string expression: int in declaration: s : string = 6
pat as pat
, the first pattern
must be a simple variable, not a more complex pattern using tuples
or data constructors.
val (a,_) as (_,b) = (7,5); stdIn:1.5-18.8 Error: pattern to left of AS must be variable
val (a,_) as (_,b) = (7,5); stdIn:1.5-18.8 Error: pattern to left of AS must be variable
signature SIG = sig structure A : sig end structure B : sig structure Z : sig end end where Z = A structure C : sig structure Z : sig end end where Z = A sharing B = C end; stdIn:1.1-38.4 Error: possibly inconsistent structure definitions at: B.Z
2e309; uncaught exception BadReal raised at: bignums/realconst.sml:228.54-228.63At present, a bug in the compiler raises an exception instead of printing the appropriate error message.
fun nil x = x; stdIn:1.5-2.9 Error: rebinding data constructor "nil" as variable
4 handle Match => 5 | e => 6 | Bind => 7; stdIn:1.1-20.15 Error: redundant patterns in match Match => ... e => ... --> Bind => ...
signature S1 = sig structure A : sig type t end end where A=Int and A=Real; stdIn:32.1-36.23 Error: redundant where definitions
datatype id1 = datatype id2that binds the name id1 to the existing datatype id2, requires that id2 must be a datatype, and not an ordinary type.
datatype myint = datatype int; stdIn:38.1-38.30 Error: rhs of datatype replication not a datatype
datatype id1 = datatype id2that binds the name
id1
to the existing datatype
id2
, requires that id2
must be
a datatype, and not an ordinary type.
signature S = sig type t datatype d = datatype t end; stdIn:37.18-40.17 Error: rhs of datatype replication spec not a datatype
fun f(x) : int = "hello"; stdIn:1.1-37.24 Error: right-hand-side of clause doesn't agree with function result type [tycon mismatch] expression: string result type: int in declaration: f = (fn x => "hello": int)
signature S = sig structure A : sig structure B : sig end end sharing A = A.B end; stdIn:1.1-44.20 Error: Sharing structure with a descendent substructure
functor F()() = struct end; functor F :structure S = F(); stdIn:45.15-45.18 Error: structure S defined by partially applied functor
x andalso val y orelse z; stdIn:1.6 Error: syntax error found at VALNote: Error correction in the parser relies on lookahead. Different amounts of lookahead are used depending on whether input is taken from the interactive toplevel or from a source file. Therefore, error messages for the same program can vary depending on circumstances. (See also the note on error [78].)
For example, let's assume that file delete.sml contains the following code:
structure 99 X = struct val x = 1 endCompiling this file produces:
- use "delete.sml"; [opening delete.sml] delete.sml:1.11-1.13 Error: syntax error: deleting INTNote: Error correction in the parser relies on lookahead. Different amounts of lookahead are used depending on whether input is taken from the interactive toplevel or from a source file. Therefore, error messages for the same program can vary depending on circumstances. (See also the note on error [78].)
For example, let's assume that file insert.sml contains the following code:
let val x = 1; y = x + x in x * y endCompiling this file produces:
- use "insert.sml"; [opening insert.sml] insert.sml:2.16 Error: syntax error: inserting VALNote: Error correction in the parser relies on lookahead. Since the interactive parser cannot use lookahead, it is likely that its syntax error messages differ from those that are generated when compiling files. For example, typing the contents of insert.sml directly into the interactive toplevel produces:
let val x = 1; y = x + x in x * y end; stdIn:2.14-2.19 Error: syntax error: deleting ID EQUALOP ID stdIn:2.20-3.3 Error: syntax error: deleting ID ID IN stdIn:4.3-4.8 Error: syntax error: deleting ID ASTERISK ID
For example, let's assume that file replace.sml contains the following code:
fn x = xCompiling this file produces:
- use "replace.sml"; [opening replace.sml] replace.sml:1.6 Error: syntax error: replacing EQUALOP with DARROWNote: Error correction in the parser relies on lookahead. Different amounts of lookahead are used depending on whether input is taken from the interactive toplevel or from a source file. Therefore, error messages for the same program can vary depending on circumstances. (See also the note on error [78].)
Example:
signature S = sig type ('a, 'b) t end; signature S = sig type ('a,'b) t end structure S : S = struct type 'a t = 'a list end; stdIn:75.1-77.4 Error: tycon arity for t does not match specified arity
Example:
signature S = sig datatype t = A | B end; signature S = sig datatype t = A | B end structure S : S = struct type t = int end; stdIn:80.1-82.4 Error: type t must be a datatype stdIn:80.1-82.4 Error: unmatched constructor specification: A stdIn:80.1-82.4 Error: unmatched constructor specification: B
Example:
signature S = sig eqtype t end; signature S = sig eqtype t end structure S : S = struct type t = int -> int end; stdIn:86.1-88.4 Error: type t must be an equality type
Example:
val rec f : int = fn x => x; stdIn:1.1-79.26 Error: type constraint of val rec dec is not a function type [tycon mismatch] constraint: int in declaration: f = (fn x => x)
val rec id : ty1 = exp : ty2and the types
ty1
and ty2
disagree.
val rec f : int -> int = (fn x => x) : bool -> bool; stdIn:1.1-29.30 Error: type constraints on val rec declaraction disagree [tycon mismatch] this constraint: bool -> bool outer constraints: int -> int in declaration: f = (fn x => x): bool -> bool
Example:
type ('a, 'b) t = 'a * 'b; type ('a,'b) t = 'a * 'b type u = (int, bool, real) t; stdIn:103.28 Error: type constructor t given 3 arguments, wants 2
Example:
fun f (x: 'a, y: ''a) = (x, y); stdIn:118.2-119.12 Error: type variable a occurs with different equality properties in the same scopeBut:
fun 'a f (x: 'a) = let fun ''a g (y: ''a) = y = y in x end; val f = fn : 'a -> 'a
Example:
signature S = sig exception E of 'a list end; stdIn:135.3-135.26 Error: type variable in exception spec: E
Example:
exception E of 'a list; stdIn:1.1-135.4 Error: type variable in top level exception type
case
- and in
fn
-expressions.
Examples:
fn true => false | false => 1; stdIn:144.1-144.30 Error: types of rules don't agree [literal] earlier rule(s): bool -> bool this rule: bool -> int in rule: false => 1 fn x => case x of true => false | false => 1; stdIn:144.6-144.42 Error: types of rules don't agree [literal] earlier rule(s): bool -> bool this rule: bool -> int in rule: false => 1
Example:
signature S = sig functor F: FS end; stdIn:145.3-145.17 Error: unbound functor signature: FS
Example:
structure S = F (); stdIn:147.15-147.19 Error: unbound functor: F
Example:
structure A = struct end; structure A : sig end signature S = sig end; signature S = sig end signature S' = S where B = A; stdIn:158.1-158.29 Error: unbound left hand side in where (structure): BBut:
signature S = sig structure B : sig end end; signature S = sig structure B : sig end end signature S' = S where B = A; signature S' = sig structure B : sig end end
where type
specification refers to a type inside a
signature that was not declared there.
Example:
type t = int; type t = int signature S = sig end; signature S = sig end signature S' = S where type u = t; stdIn:169.1-169.34 Error: unbound left hand side in where type: uBut:
signature S = sig type u end; signature S = sig type u end signature S' = S where type u = t; signature S' = sig type u = t end
S
in the following example:
structure A : S = struct end; stdIn:16.15 Error: unbound signature: S
B
in the following example:
- structure A = B; stdIn:2.10 Error: unbound structure: B
t
in the following example:
val x : t = (); stdIn:2.4 Error: unbound type constructor: t
type t = 'a list; stdIn:2.5-2.12 Error: unbound type variable in type declaration: 'a datatype 'a t = A of 'b; stdIn:1.1-18.2 Error: unbound type variable in type declaration: 'b
x; stdIn:1.1 Error: unbound variable or constructor: x fun f x = x+y; stdIn:2.8 Error: unbound variable or constructor: y
...
)
is used, the context must provide enough type information to determine
what all the fields are (though not necessarily their types).
fun f {x,...} = x; stdIn:37.1-37.18 Error: unresolved flex record (can't tell what fields there are besides #x) fun f ({x,...} : {x: int, y:bool}) = x; val f = fn : {x:int, y:bool} -> intIf more than one field occurs in the flexible record pattern, then a different variant of this error message is generated. See error [100].
fun f {x,y,...} = (x,y); stdIn:118.1-118.24 Error: unresolved flex record (need to know the names of ALL the fields in this context) type: {x:'Y, y:'X; 'Z}
signature S = sig val x : int end; signature S = sig val x : int end structure A : S = struct val x = true end; stdIn:21.1-24.4 Error: value type in structure doesn't match signature spec name: x spec: int actual: bool
|
symbol. The
component patterns of an or-pattern are required to have exactly the
same variables with the same types.
fun f(nil | x::_) = 1; stdIn:1.5-2.18 Error: variable x does not occur in all branches of or-patternHere the component patterns are
nil
and
x::_
, and the variable x
doesn't
occur in the first pattern.
fun f(Int.+) = 3; stdIn:1.5-2.12 Error: variable found where constructor is required: Int.+
#[exp1,exp2,...]
,
all the vector element expressions must be of the same type.
#[1,true]; stdIn:1.1-2.5 Error: vector expression type failure [literal] fun f(x:int) = #[x,true]; stdIn:2.11-2.20 Error: vector expression type failure [tycon mismatch]
#[pat1,pat2,...]
,
all the vector element patterns must be of the same type.
fun f(#[x:int,y:bool]) = (x + 1; not y); stdIn:1.1-2.35 Error: vector pattern type failure [tycon mismatch]
where
clause).
structure A = struct end; structure A : sig end signature S = sig structure X : sig end = A end where X = A; stdIn:27.1-31.12 Error: where defn applied to definitional spec
where type
definition must agree with the arity in type specification that
it applies to.
signature S = sig type 'a t end where type t = int; stdIn:1.1-26.19 Error: where type definition has wrong arity: t
where type
clause).
signature S = sig type t = int end where type t = int; stdIn:1.1-22.19 Error: where type defn applied to definitional spec: t
withtype
clause to a
datatype replication declaration or specification.
datatype t = A; datatype t = A datatype s = datatype t withtype u = s list; stdIn:37.1-38.20 Error: withtype not allowed in datatype replication
0w2147483648
(0wx80000000
).  If neither of these flags is true, then
the compiler does not complain about nonexhaustive matches.
fun f 0 = 1 | f 1 = 1; stdIn:1.1-22.12 Warning: match nonexhaustive 0 => ... 1 => ... val f = fn : int -> int
Compiler.Control.MC.matchRedundantError
is set to false (default is true) and
Compiler.Control.MC.matchRedundantWarn
is true
(the default).
fun f (0, true) = 1 | f (0, false) = 2 | f (0, _) = 3 | f _ = 4; stdIn:24.1-27.14 Warning: match redundant (0,true) => ... (0,false) => ... --> (0,_) => ... _ => ...
If the first two are set to false and the latter two are set to true, then this warning is generated.Compiler.Control.MC.matchNonExhaustiveError
Compiler.Control.MC.matchNonExhaustiveWarn
Compiler.Control.MC.matchRedundantError
Compiler.Control.MC.matchRedundantWarn
fun f 1 = 1 | f 2 = 3 | f 1 = 4 ; stdIn:1.1-24.12 Warning: match redundant and nonexhaustive 1 => ... 2 => ... --> 1 => ...
aexp id1 aexp id2 aexpinvolves two infix operators
id1
and
id2
of the same precedence but opposite
associativity, the SML '97 Definition states that the expression is illegal.
But SML/NJ only issues this warning message and associates the
two operators to the left.
- infix 4 <<; infix 4 << - infixr 4 >>; infixr 4 >> - fun (x>>y) = "right"; val >> = fn : 'a * 'b -> string - fun (x<<y) = "left"; val << = fn : 'a * 'b -> string - 1 << 2 >> 3; stdIn:21.8-21.10 Warning: mixed left- and right-associative operators of same precedence val it = "right" : string - 1 >> 2 << 3; stdIn:22.8-22.10 Warning: mixed left- and right-associative operators of same precedence val it = "left" : string
val x = (fn x => x) nil; stdIn:17.1-17.24 Warning: type vars not generalized because of value restriction are instantiated to dummy types (X1,X2,...) val x = [] : ?.X1 listIn this example, the right hand side of the declaration of
x
has type 'X list
, where 'X
is a free type
variable. This type variable cannot be generalized to form a
polymorphic type for x
because the right hand expression
is expansive (a function call in this case). So the compiler
eliminates the free type variable 'X
be inventing a new
dummy type named X1
and instantiates 'X
to
X1
. Since X1
won't match any other type,
there is little one can do with x
now (one could take
its lenght (0), but one cannot cons any values onto x
).


Contact us
Are you going to hold an event - everything from weddings, christenings, meetings or private dining? Do you want to know more about Svalegaarden Mest and our menus? Then you will find our contact information on this page, and you are more than welcome to contact us to find out more about the information below.


Around 4,000,000 at risk of asthma attacks triggered by flu and colds in winter
Around 4,000,000 people are at risk of suffering asthma attacks triggered by flu and colds this winter, a charity estimates.
A survey by Asthma UK found that three quarters of sufferers said their conditions worsened when they became ill over the colder months.
They are now urging anyone with the condition to get vaccinated this winter, after one man was left in a coma due to a flu-related asthma attack.
Adam Blackman, 47, had been struggling to breathe, stating that it felt as though someone had his hands around his neck.
He ended up spending over a month in hospital, where doctors put him in a coma for a week due to complications which led to pneumonia and a collapsed lung.
Adam said: ‘It was nearly catastrophic for me, but my friends and family were also at risk. My brother-in-law who has asthma got ill shortly afterwards and ended up in hospital too.
Advertisement Advertisement
‘Given how contagious flu can be I would urge everyone to get the flu vaccine, so they don’t have to go through the hell I’ve been through.
‘I’m not risking it again and have already got the flu vaccine. I am urging everyone with asthma to get it as soon as possible, it could save your life.’
Flu viruses can increase inflammation in the airways, causing people to cough and wheeze for breath.
The narrowing of airway then has the potential to trigger a bronchospasm, otherwise known as an asthma attack.
Asthma attacks can be fatal, with around three people dying in the UK every day.
Yet only half of people with chronic respiratory disease, including asthma, received their free jab last year, Public Health England reports.
The vaccine is available for free to asthmatics who use preventer medicine, have been on a course of oral or systemic steroids or who have been previously hospitalised because of their condition.
Anyone who is not eligible can be assessed on a case-by-case basis by their GP or pay privately for a jab from their local surgery or pharmacy.
Previous research by Asthma UK suggests people put off getting the vaccine because they are worried about side effects or are sceptical about its effectiveness.
Dr Andy Whittamore, a GP and the clinical lead at Asthma UK, said: ‘Asthma and flu can be a potentially lethal combination, and the flu vaccine is the best way to prevent someone falling ill.
Advertisement Advertisement
‘Flu can make people’s asthma symptoms worse and trigger a life-threatening asthma attack.
‘People with asthma are also at higher risk of developing other serious flu-related complications as the flu can make their asthma symptoms worse.’
Got a story for Metro.co.uk?
Get in touch with our news team by emailing us at<EMAIL_ADDRESS>For more stories like this, check our news page.