text:
Company News
COLUMBIA, MO (Feb. 18, 2016)— U.S. Cellular continued to invest in the wireless experience for its customers in 2015 with upgrades to its network and store environment throughout Missouri. Nationwide, the wireless company now covers 99 percent of its customers with a 4G LTE network to help consumers and businesses stay connected. Here in Missouri, U.S. Cellular invested $9.5 million in network enhancements in a combination of 4G LTE additions and improvements along with ongoing advancements to the company's existing network.
Last year, U.S. Cellular launched several devices and introduced hundreds of new accessories in its stores, and nine retail locations in Missouri were opened or redesigned to provide shoppers with a great in-store experience. To continue to innovate in its retail stores, in 2015 the company invested $1.4 million to ensure that they are an easy and fun place to shop.
"At U.S. Cellular, we know that the phone, tablet or machine-to-machine device you have is only as good as the network that backs it up, so we will continue to invest in our technology to ensure that whether you live in the city or a rural area, you have a strong signal when and where you need it," said Dorsey Ragland director of sales for U.S. Cellular in Missouri. "We also want every interaction you have with us to be a positive one, so when you visit us in the store, call us on the phone or see us out in the community, know that we are constantly striving to provide you with a great wireless experience."
In addition to network and store enhancements, U.S. Cellular focused its philanthropic efforts on STEM-focused education and donated $1.35 million to local Boys and Girls Clubs and 4-H Clubs across its markets in 2015. These donations supported the clubs' STEM programming and provided Missouri U.S. Cellular associates with several volunteer opportunities to interact with the clubs' members and staff. Locally, the company made a total donation of $52,500 to eight clubs in Missouri.
4G LTE service may be provided through King Street Wireless, a partner of U.S. Cellular. LTE is a trademark of ETSI.
About King Street Wireless, L.P.
King Street Wireless, L.P. currently holds 700 MHz wireless spectrum in 27 states and is partnering with Chicago-based U.S. Cellular to deliver high-speed 4G LTE service to U.S. Cellular's customers in several of the carrier's markets. King Street Wireless is headquartered in Alexandria, Virginia where it is recognized for its involvement in its community both through its economic development and philanthropic efforts. To learn more about King Street Wireless, visit www.kingstreetwireless.com.
About U.S. Cellular
U.S. Cellular is the fifth-largest full-service wireless carrier in the United States, providing national network coverage and industry-leading innovations designed to elevate the customer experience. The Chicago-based carrier has a strong line-up of cutting-edge devices that are all backed by a high-quality network in big and small cities and rural communities, and currently, 99 percent of customers have access to 4G LTE speeds. U.S. Cellular was named a J.D. Power and Associates Customer Champion in 2014 for the third time in four years. To learn more about U.S. Cellular, visit one of its retail stores or uscellular.com. To get the latest news, promos and videos, connect with U.S. Cellular on Facebook.com/uscellular, Twitter.com/uscellular and YouTube.com/uscellularcorp.
For more information, contact:
Kelly Harris
Public Relations Counsel
Office: 314-436-9090
Iman Jefferson-Riedel
Media Relations, U.S. Cellular
Office: 773-355-3737


text:
Accessibility tools
Service tools
Language selector
Navigation path
Left navigation
Additional tools
Strasbourg, 5 April 2011
European Commission calls on Member States to set national strategies for Roma integration
Europe's 10-12 million Roma continue to face discrimination, exclusion and the denial of their rights, while governments lose out on increased revenue and productivity because potential talent could go wasted. Better economic and social integration is an imperative – but to be effective, concerted action is needed at all levels to address the multiple causes of exclusion. The European Commission is therefore today putting forward a European Framework for National Roma Integration Strategies. This EU Framework will help guide national Roma policies and mobilise funds available at EU level to support inclusion efforts. The Framework focuses on four pillars: access to education, jobs, healthcare and housing. Member States should set individual national Roma integration goals in proportion to the population on their territory and depending on their starting point.
"Despite some good intentions from national politicians, too little has changed in the lives of most Roma over the last few years," said Vice-President Viviane Reding, the EU's Justice Commissioner. "Member States have a joint responsibility to put an end to Roma exclusion – from schools, jobs, healthcare and housing. This is a serious challenge. That is why we are setting goals for Roma integration and why we now need a clear commitment from all capitals, regions and cities in Europe to put them into practice. Now is the time to move beyond good intentions and to take concrete actions. Most important to me is that Member States help ensure that all Roma children complete at least primary school."
Roma people in Europe live in considerably worse socio-economic conditions than the population at large. A survey in six EU countries1 found that only 42% of Roma children complete primary school, compared to an EU average of 97.5%. For secondary education, Roma attendance is estimated at only 10%. In the job market, they face lower employment rates and higher rates of discrimination. In housing, they often lack access to essential services such as running water or electricity. They also face a health gap: life expectancy for Roma is 10 years less than the EU average of 76 for men and 82 for women.
EU Commissioner for Employment, Social Affairs and Inclusion, László Andor, declared: "The persistent exclusion of Roma people is unacceptable in 21st Europe built on principles of equality, democracy and the rule of law. The living conditions of the majority of Roma and their relations with mainstream society have just worsened in recent years."
He further underlined: "For some countries it will be simply impossible to achieve the Europe 2020 targets without a breakthrough in Roma integration."
Roma integration could mean considerable economic benefits. Roma represent a growing share of the working age population, with an average age of 25 compared to the EU average of 40. They make up one in five new labour market entrants in Bulgaria and Romania. Research by the World Bank suggests full Roma integration could be worth around €0.5 billion a year to the economies of some countries by improving productivity, cutting welfare bills and boosting tax receipts.
In the past, the EU has repeatedly stressed the need for better integration of Roma, most recently with a report in April 2010 (IP/10/407). EU legislation (the Race Equality Directive) already obliges Member States to give equal access to ethnic minorities, such as the Roma, to education, housing, health and employment. In December 2010, the Commission's Roma Task Force found that strong and proportionate measures are still not in place to tackle the social and economic problems of a large part of the EU's Roma population (MEMO/10/701). It is now crucial to step up a gear and ensure that national, regional and local integration policies focus on Roma in a clear and specific way.
Building on these findings, the EU Framework develops a targeted approach for Roma inclusion by setting goals in:
Member States will have to submit national Roma strategies by the end of 2011 specifying how they will contribute to the achievement of these goals. The Framework is in line with the EU's broader Europe 2020 targets for employment, social inclusion and education. The achievement of these goals is important to help Member States reach the overall targets of the Europe 2020 strategy.
The Commission is also proposing solutions to make sure that EU funds that can support Roma integration are more effectively used. Member States are invited to amend their operational programmes co-financed by Structural Funds and the European Agricultural Fund for Rural Development to better support Roma targeted projects.
Finally, to make sure the EU Framework for national strategies makes a tangible difference to Roma on the ground, the Commission wants to put a robust monitoring mechanism in place to measure results. The EU's Fundamental Rights Agency has a key role to play, by collecting data on the social and economic situation of Roma, in cooperation with other organisations. Member States are asked to appoint national contact points to manage, monitor and report the implementation of their national Roma integration strategy. The European Commission will report back annually on the progress made in the Member States.
The Roma – Europe's largest ethnic minority – have been part of Europe for centuries, but frequently face prejudice, intolerance, discrimination and exclusion.
Many of the areas for improving Roma integration – such as education, employment, health and housing – are primarily national or regional responsibilities. However, the EU has an important role in coordinating action by Member States and helping with financial tools.
In summer 2010, the European Commission publicly took the position that Roma are EU citizens and should fully benefit from their rights and fully comply with their obligations under EU law (SPEECH/10/428 and MEMO/10/502).
Further information
DG Justice Newsroom:
The EU and Roma:
Homepage of Vice-President Viviane Reding, EU Justice Commissioner:
Homepage of László Andor: EU Employment, Social Affairs and Inclusion Commissioner:
ANNEX : Roma Population Estimates
Bulgaria, Hungary, Latvia, Lithuania, Romania and Slovakia
Side Bar

subset: commoncrawl


text:
ADDISON COUNTY — Social service agencies are alerting area residents that there is still time to apply for federal assistance if they were affected by Tropical Storm Irene. And they say those who are unsure if they qualify for financial assistance should file now and let the agencies decide later if aid is forthcoming.
"It's possible that insurance will not cover the damage," said Beth Diamond, regional resource specialist with Vermont 2-1-1, a project of the Vermont United Ways. "Renters should still file.


text:
Funnymen Seth Rogen and Paul Rudd are starring in Samsung's two-minute long Super Bowl ad called "The Big Pitch," reports Mashable's Todd Wasserman.
A spokesperson told Mashable that the ad "shows Rogen and Rudd on a quest to become the Next Big Thing."
This, of course, alludes to Samsung's insanely popular, Apple-bashing spot titled "The Next Big Thing Is Already Here," which was 2012's most popular tech ad.
While you might expect Judd Apatow to direct his regulars in the commercial, "Iron Man" director Jon Farveau actually took the lead.
A 30-second Super Bowl commercial slot averaged at $3.8 million, so Samsung has invested heavily in the 72andSunny-created ad.
Tune in February 3 to see if it meets expectations — and to compare it to competitor Blackberry's first-ever Super Bowl ad.


text:
For starters Hit It Rich! Slots can be attained for free. As a result, you shouldn't worry about any concealed charges. Alternative versions are readily available for either Android and iPhone, thus this is one more concern that you can put off your shoulders.
The next point that must astonish you about Hit It Rich! Slots is that it is rather safe. There's no need to fear about your private info being leaked if this is the game that you opt for.
Furthermore, it presents you a vast range of Free Coins, and thus you would be spoilt for options. It is very unlikely that you won't be able to discover a little something that would fit your need as the possibility of Free Coins is also available.
If you do not have fun with a particular game, you have all opportunities to jump onto yet another one.
By the way, make sure to check our Facebook.


text:
This article is also available in Japanese.
I am about to break a promise. Almost three years ago, I promised myself that I would never write an article about monads. There are too many such articles already; so many, in fact, that people are often confused by the sheer proliferation. Everyone seems to have a different take on the subject, meaning that those attempting to learn the concept for the first time are stuck trying to reason out the commonalities between burritos, space suits, elephants and desert Bedouins.
I'm not going to add to this menagerie of confusing analogies. The fact is that none of these parallels are entirely accurate. None of them convey the whole picture, and some of them are blatantly misleading in important respects. You will never come to understand monads by pondering Mexican food and the Final Frontier. The only way to understand monads is to see them for what they are: a mathematical construct.
Math (or not)
Here's the thing about monads which is hard to grasp: monads are a pattern, not a specific type. Monads are a shape, they are an abstract interface (not in the Java sense) more than they are a concrete data structure. As a result, any example-driven tutorial is doomed to incompleteness and failure. The only way to really understand is to take a step back and look at what monads mean in the abstract rather than the concrete. Take a look at the following Ruby snippet:
def foo(bar) puts bar bar.size end
Just as a quick Ruby refresher, we can rewrite this code in the following way:
def foo(bar) puts bar; bar.size end
Ruby has this neat convention (which is shared by most modern languages) which causes the final expression in a method to be turned into the implicit return statement. Thus, the
foo method will take a parameter, print it to standard out and then return its
size. Fairly simple, right?
Here's the puzzler: what is the semicolon (
;) doing? It's tempting to say that it's just a separator, but theoretically speaking, there's something much more interesting going on here. Let's switch to Scala and add some Christmas trimmings:
def foo(bar: String) = { ({ () => println(bar) })() ({ () => bar.length })() }
Just in case you're unfamiliar with Scala, I'd like to make it clear that we are not required to enclose every statement inside its own lambda (anonymous function). I'm just doing that to make a point.
This function does exactly the same thing as the Ruby version. Well, the parameter is a bit more constrained since we require a
String rather than accepting anything defines
size, but moving past that… The major difference from what we had previously is that each statement is wrapped inside its own anonymous function, which we immediately call. We can again play the same semicolon trick that we used in Ruby. However, because the statements are actually functions, we can go a step further:
def foo(bar: String) = { ({ () => println(bar) } andThen { () => bar.length })() }
(note: the
andThen method isn't defined for functions of 0-arity, but we're going to pretend that it is and that it works the same as it does for functions of one argument. If it makes you feel better, you can pretend that these are both one-argument functions taking
Unit as a parameter, the theoretical implications are the same, it just requires more syntax)
Notice that we haven't actually used the semicolon (although we could have). Instead, we're combining two functions together and invoking them at the very end. The semantics we're using to do the combination are such that the first function will be evaluated, then its result (
()) discarded and the second function evaluated with its result returned. For those following along at home, we could easily define
andThen in the following way:
def funcSyntax[A](f1: () => A) = new { def andThen[B](f2: () => B) = f1(); f2() }
In a way, we have defined a method which literally encapsulates the effect of the semicolon "operator", allowing us to apply it directly to functions, rather than dealing with it indirectly at the level of statements. That's kind of a cool thought, but the important point is that we are first executing the first function, discarding its result and then executing the second function, returning its result.
It should be clear that we could extend this to any number of functions. For example:
def foo(bar: String) = { ({ () => println("Executing foo") } andThen { () => println(bar) } andThen { () => bar.length })() }
Still with me? Congratulations, you've seen your first monad.
You Could Have Invented Monads! (and maybe you already have)
This certainly isn't a monad in the traditional sense, but if we worked at it, we could show that the monadic axioms do hold. The significant point here is what this monad is doing: combining one thing together with another in sequence. In fact, this is what all monads do, deep down. You start out with Thing One, and you have a function which will (given One) will give you Thing Two. Monads let you combine Thing One and your function together, producing a final resultant Thing. Let's look at some more code:
case class Thing[+A](value: A)
This is about the simplest container imaginable (in fact, it is precisely the simplest container imaginable, but that's not relevant now). We can wrap up values inside of
Thing, but that's about it:
val a = Thing(1) val b = Thing(2)
Now, let's switch into design mode for a moment. Imagine that we find ourselves writing a lot of code which looks like this:
def foo(i: Int) = Thing(i + 1) val a = Thing(1) val b = foo(a.value) // => Thing(2)
We're starting with a
Thing, and then we're using the value inside of that
Thing to call a function which gives us a new
Thing. If you think about it, this is actually a very common pattern. We have a value, and then we use that value to compute a new value. Mathematically, this is pretty much the same as the following:
def foo(i: Int) = i + 1 val a = 1 val b = foo(a) // => 2
The only difference between these is that the first version wraps everything in
Thing, while the second version is using "bare" values.
Now, let's extend our imagine just a bit and assume that we have a good reason for wrapping everything inside of
Thing. There could of course be any number of reasons for this, but basically it boils down to the notion that
Thing might have some extra logic which does interesting things with its value. Here's the question: can we come up with a nicer way of going from
a to
b? Basically, we want to encapsulate this pattern as a more general tool.
What we want is a function which pulls the value out of
Thing and then calls another function with that value, returning the result of that function call (which will be a new
Thing). Since we're good object-oriented programmers, we will define this as a method on class
case class Thing[+A](value: A) { def bind[B](f: A => Thing[B]) = f(value) }
So if we have a
Thing, we can pull its value out and use it to compute a new
Thing, all in one convenient step:
def foo(i: Int) = Thing(i + 1) val a = Thing(1) val b = a bind foo // => Thing(2)
Notice that this is a lot cleaner that our original version, while still performing exactly the same function.
Thing is a monad.
The Monad Pattern
Any time you start with something which you pull apart and use to compute a new something of that same type, you have a monad. It's really as simple as that. If it sounds like I'm describing almost all of your code, then good, that means you're starting to catch on. Monads are everywhere. And by "everywhere", I do mean everywhere.
To understand why this is, let's look at what it is that makes
Thing a monad:
val a = Thing(1)
The first thing is that I can wrap up a value inside of a new
Thing. Object-oriented developers might call this a "constructor". Monads call it "the
unit function". Haskell calls it "
return" (maybe we shouldn't try to figure out that one just yet). Whatever you call it though, it comes to the same thing. We have a function of type
A => Thing; a function which takes some value and wraps it up inside a new
a bind { i => Thing(i + 1) }
We also have this fancy
bind function, which digs inside our
Thing and allows a function which we supply to use that value to create a new
Thing. Scala calls this function "
flatMap". Haskell calls it "
>>=". Again, the name doesn't matter. What's interesting here is the fact that
bind is how you combine two things together in sequence. We start with one thing and use its value to compute a new thing.
It's as simple as that! If you're like me, then you're likely asking the following question: if it's so simple, what's all the fuss about? Why not just call this the "using one thing to compute another" pattern? Well, for one thing, that's far too verbose. For another, monads were first defined by mathematicians, and mathematicians love to name things. Mathematics is all about finding patterns, and it's hard to find patterns if you can't affix labels once you've found them.
More Examples
I said that monads are everywhere (they are!), but we've only looked at two examples so far. Let's see a few more.
This might be the most famous monad of all, quite possibly because it's one of the easiest to understand and by far the easiest to motivate. Consider the following code:
def firstName(id: Int): String = ... // fetch from database def lastName(id: Int): String = ... def fullName(id: Int): String = { val fname = firstName(id) if (fname != null) { val lname = lastName(id) if (lname != null) fname + " " + lname else null } else { null } }
Here again, we have a fairly common pattern. We have two functions (
firstName and
lastName) which are responsible for producing some data which may or may not be available. If the data is available, then it is returned. Otherwise, the result of these functions will be
null. We then use these functions to do something interest (in this case, compute a full name). Unfortunately, the fact that
firstName and
lastName may or may not produce a useful value needs to be handled explicitly with a set of nested
At first blush, it seems this is the best that we can do. However, if you look very closely, you can find the monad pattern buried in this code. It's a little more complicated than last time, but it's still there. Let's try wrapping everything in
Thing to make it clear:
def firstName(id: Int): Thing[String] = ... // fetch from database def lastName(id: Int): Thing[String] = ... def fullName(id: Int): Thing[String] = { firstName(id) bind { fname => if (fname != null) { lastName(id) bind { lname => if (lname != null) Thing(fname + " " + lname) else Thing(null) } } else { Thing(null) } } }
See it now? As I said, monads are everywhere. Here's the really useful bit though: every time we
bind, the very first thing we do inside the function is test the value to see if it is
null, why not move that logic into
bind? Of course, we can't really do that without changing
Thing into something different, so we will define a new monad called
sealed trait Option[+A] { def bind[B](f: A => Option[B]): Option[B] } case class Some[+A](value: A) extends Option[A] { def bind[B](f: A => Option[B]) = f(value) } case object None extends Option[Nothing] { def bind[B](f: Nothing => Option[B]) = None }
If you block out everything except
Some, this looks a lot like our old friend,
Thing. The main difference is that
Option has two different instantiations:
Some, which contains a value, and
None, which doesn't contain a value. Think of
None as being just an easier way of writing
What's interesting is that
Some and
None need to have two different definitions of
bind. The definition of
bind in
Some looks a lot like the definition in
Thing, which makes sense as
Some and
Thing are almost identical. However,
None defines
bind to always return
None, ignoring the specified function. How does this help us? Well, let's return to our
fullName example:
def firstName(id: Int): Option[String] = ... // fetch from database def lastName(id: Int): Option[String] = ... def fullName(id: Int): Option[String] = { firstName(id) bind { fname => lastName(id) bind { lname => Some(fname + " " + lname) } } }
All of those nasty
if statements have disappeared. This works because
firstName and
lastName now return
None when they fail to fetch the database record, rather than
Thing(null). Of course, if we try to
bind on
None, the result will always be
None. Thus, the
fullName function returns the combination of
firstName and
lastName inside of a
Some instance only if neither
firstName nor
lastName return
None. If either one returns
None, then the result of the whole thing will be
For those keeping score at home, we have "accidentally" stumbled upon Groovy's safe-dereference operator (
?.), Raganwald's
andand for Ruby and many, many more. See? Monads are everywhere.
Anyone trying to understand monads will inevitably run into Haskell's
IO monad, and the results are almost always the same: bewilderment, confusion, anger, and ultimately Perl. The fact is that
IO is a rather odd monad. It is fundamentally in the same category as
Thing and
Option, but it solves a very different problem.
Here's the deal: Haskell doesn't allow side-effects. At all. Functions take parameters and return values; you can't just "change" something outside the function. As an example of what this means, let's return to our earlier Ruby code:
def foo(bar) puts bar bar.size end
This function takes a value, calls its
size method and returns the result. However, it also changes the standard output stream. This is pretty much the same as if we had a global array hanging around which we just mutated in-place:
STDOUT = [] def foo(bar) STDOUT += [bar] bar.size end
Haskell doesn't have variables of any sort (imagine if Scala didn't have
var, or if every variable in Java were
final). Since we don't have any variables, we can't change anything in-place. Since we can't change anything in-place, there's no way we can define a
puts function. At least, not the
puts we're used to.
Let's switch back to Scala. Our goal here is to define a
println function which doesn't rely on any sort of mutable state (ignoring for the moment the fact that the standard output stream is always going to be mutable, since there's no way we can "change" the user's screen by cloning the physical display). One thing we could do is wrap up our standard output stream as a
Vector which we carry along with our functions:
def foo(bar: String, stdout: Vector[String]) = { val stdout2 = println(bar, stdout) (bar.length, stdout2) } def println(str: String, stdout: Vector[String]) = stdout + str
Theoretically, we could write all of our
println-enabled functions in this way, passing in the current
stdout and receiving the new state as a result. At the end of the day, the entire program would produce a result in addition to the final state of
stdout, which could be printed to the screen by the language runtime.
This works (at least for
println), but it's ridiculously ugly. I would hate it if I had to write code like this, and early Haskell adopters felt exactly the same way. Unfortunately, things only get worse from there. Our trick with
Vector[String] may work for the standard output stream, but what about standard in? At first blush, it seems as if the
readLine function wouldn't be as bad as
println, after all, we aren't changing anything! Unfortunately, something is clearly being changed at some level, otherwise repeated calls to
readLine would yield the same result (clearly not the case).
Graphics updates, networking, the list goes on. It turns out that any useful program is going to need to have side-effects, otherwise there's no way for all of that usefulness to get outside the program where we can see it. So, Haskell's designers (more specifically, Phillip Wadler) needed to come up with a way to solve this problem not only for standard out, but for all side-effects.
The solution is actually quite simple. To solve the standard out problem with
println, we just passed a
Vector[String] around, "modifying" it by returning the new state along with our regular return value. Here's the inspiration: what if we did that for the entire universe? Instead of passing around just a plain
Vector[String], we pass around
def foo(bar: String, everything: Universe) = { val everything2 = println(bar, everything) (bar.length, everything2) } def println(str: String, everything: Universe) = everything.println(str)
As long as the language runtime is able to somehow give us an instance of
Universe which behaves the way we would expect, then this code will work just fine. Obviously, the runtime can't really package up the entire cosmos and allow us to get new versions of it, but it can cheat a bit and pretend to give us the entire universe. The language runtime is allowed to implement the
println function on the
Universe object in whatever way it deems best (hopefully by actually appending to standard out). Thus, we let the runtime perform whatever magic is necessary while we remain blissfully ignorant of any and all side-effects.
This solves our problems alright, but it's horrible in almost every other respect. We have this manual threading of the
Universe, which is both verbose and painful. Even worse, this sort of thing is very error prone (i.e. what happens if we "modify" the universe and then go back and change an older version of it? do we get two, parallel universes?). The heart of our problem now is that we are using the old version of the universe to compute a new version of the universe, and we're doing that manually. We're taking something (in this case, the universe) and using its value to compute a new something (the new version of the universe). Sound familiar?
Phillip Wadler's inspiration was to take advantage of the monad pattern to solve this problem. The result is the
IO monad:
def foo(bar: String): IO[Int] = { println(bar) bind { _ => IO(bar.length) } } def println(str: String): IO[Unit] = { // TODO insert magic incantations }
Of course, we can't actually implement
println, since this fake language isn't allowed to involve itself in side-effects. However, the language runtime could provide a native (read: cheat code) implementation of
println which performs its side-effects and then conjures a new version of
IO (i.e. the modified universe).
The only catch with this design is that we can never get anything out of
IO. Once you start down the dark path, forever will it dominate your destiny. The reason for this is one of language purity. Haskell wants to disallow side-effects, but if it were to allow us to pull values out of
IO, then we could very easily bypass its safe-guards:
def readLine(): IO[String] = { // TODO insert magic incantations } def fakeReadLine(str: String): String = { val back: IO[String] = readLine() back.get // whew! doesn't work }
As you can see, if we could pull values out of
IO, then the whole exercise would become a waste of time, since it would be trivially easy to hide side-effects within wrapper functions.
Of course, none of this is particularly relevant to Scala or Ruby, much less Java! Scala doesn't restrict side-effects. It allows you to call
println whenever you feel like it, and it provides a way of declaring mutable variables (
var). In a sense, Scala is hiding a hypothetical
IO monad. It's as if all Scala code is implicitly inside of
IO, and thus implicitly threading the state of the universe from one moment to the next. In light of this fact, why should we care at all about how
IO works? Mostly because it's a monad which is very different from
Thing and
Option. I briefly considered using
State, but that's too much ancillary complexity when we're trying to focus on the core idea of using the value from one thing to compute another thing.
Now What?
So, we've identified the monad pattern. We can spot it in code and employ it in an impressive range of situations, but why are we bothering with all the ceremony? If we're already using monads all over the place without realizing it (e.g. semicolon), then why do we have to bother futzing with all of this nomenclature? Simply put: why do we care that
Option is a monad so long as it just "does the right thing"?
Well, the first answer to that lies in the nature of mathematics, and by extension, computer programming. As I said, before, mathematics is all about identifying patterns (well, you also play with those patterns to generate larger, more intricate patterns, but that's really just a means to an end). Once you identify a pattern, you name it. That's just what mathematicians do. Imagine if Newton hadn't named the "derivative", and he simply insisted on calling it "an expression for the line tangent to a given line relative to a particular value of x, where x is some variable in the expression for the given line." For one thing, calculus textbooks everywhere would be about 50 times longer. For another, we probably never would have been able to see "the derivative" as an abstract entity. Partial derivation would have never been devised. Integrals, differential equations, infinite series, and almost all of physics might never have happened. None of these consequences have anything to do with the name, that's just a label. Rather, it was the fact that Newton was able to see (and represent) the derivative in the abstract, as a mathematical shape to be manipulated and applied in novel ways.
If you understand the
Option monad, then you can use the
Option monad. You can see places in your code where it can be applied, and you will reap enormous benefits as a result. However, if you understand monads as an abstraction, then you will not only understand
Option, but also
STM, the list goes on. Or at least, you will understand the fundamental properties of these constructs (the rest is details). You will begin to see places where you are doing monadic things even when those things don't fit exactly into the restricted mold of
Option or
State. This is where the true utility can be found.
Besides the (vast) improvements in your thought process, there's also a more immediate practical upshot. It's possible to define functions which work on monads in the generic sense, rather than specializing in one or the other. Just as Swing programming would be impossible if you had to rewrite every function for each specific instance of
Component, there are many things which would be impossible (or at least, very very impractical) if you had to rewrite them for each specific monad. One such function is
trait Monad[+M[_]] { def unit[A](a: A): M[A] def bind[A, B](m: M[A])(f: A => M[B]): M[B] } implicit object ThingMonad extends Monad[Thing] { def unit[A](a: A) = Thing(a) def bind[A, B](thing: Thing[A])(f: A => Thing[B]) = thing bind f } implicit object OptionMonad extends Monad[Option] { def unit[A](a: A) = Some(a) def bind[A, B](opt: Option[A])(f: A => Option[B]) = opt bind f } def sequence[M[_], A](ms: List[M[A]])(implicit tc: Monad[M]) = { ms.foldRight(tc.unit(List[A]())) { (m, acc) => tc.bind(m) { a => tc.bind(acc) { tail => tc.unit(a :: tail) } } } }
There are a lot of ways to pretty this up, but I wanted to be as explicit as possible for the sake of illustration. The general function of
sequence is to take a
List of monad instances and return a monad instance of a
List of those elements. For example:
val nums = List(Some(1), Some(2), Some(3)) val nums2 = sequence(nums) // Some(List(1, 2, 3))
The magic is that this function works on any monad:
val nums = List(Thing(1), Thing(2), Thing(3)) val nums2 = sequence(nums) // Thing(List(1, 2, 3))
In this case,
Monad (the trait) is an example of a typeclass. Basically, we're saying that there is this general idea of a monad, and any monad will define two functions:
unit and
bind. In this way, define functions which operate on monads without knowing which specific monad we're manipulating. Think of it like the adapter pattern on steroids (sprinkled with a goodly portion of Scala's implicit magic).
This is reason number two for understanding the general concept of a monad, rather than just the specific: you suddenly become able to define tons of nifty utility functions. For more examples of this, you need look no further than Haskell's standard library.
Those Pesky Axioms
Congratulations! You just made it through an entire monad tutorial without ever having to worry about the monadic axioms or what they mean. Now that you've got the concept down (hopefully), you can graduate to the axioms themselves.
As it turns out, the monadic axioms are really quite intuitive. We've actually been assuming them all along without ever really saying so. The axioms define how the
unit (constructor) and
bind (composition) functions are supposed to behave under certain situations. Think of them a bit like the laws governing integer addition (commutativity, associativity, etc). They don't tell you everything about monads (actually, they don't tell you much at all from an intuitive standpoint), but they do give you the basic, mathematical underpinnings.
Excited yet? No, I didn't think so. Well, here they are anyway, defined in terms of the
Monad typeclass we used earlier:
def axioms[M[_]](implicit tc: Monad[M]) { // identity 1 def identity1[A, B](a: A, f: A => M[B]) { val ma: M[A] = tc.unit(a) assert(tc.bind(ma)(f) == f(a)) } forAll { (x, f) => identity1(a, f) } // sort-of ScalaCheck // identity 2 def identity2[A](ma: M[A]) { assert(tc.bind(ma)(tc.unit) == ma) } forAll { m => identity2(m) } // associativity def associativity[A, B, C](m: M[A], f: A => M[B], g: B => M[C]) { val mf: M[B] = tc.bind(m)(f) val mg: M[C] = tc.bind(mf)(g) val mg2: M[C] = tc.bind(m) { a => tc.bind(f(a))(g) } assert(mg == mg2) } forAll { (m, f, g) => associativity(m, f, g) } }
The first two axioms (the "identity" ones) are basically saying that the
unit function is a simple constructor with respect to the
bind function. Thus, when
bind "pulls apart" the monad and passes the value to its function parameter, that value will be precisely the value that
unit puts into the monad. Likewise, if the function parameter given to
bind simply takes the value and wraps it back up inside the monad, then the final result is exactly the same as if we had left the monad alone.
The third axiom is the most complicated to express, but I think it's actually the most intuitive. Basically, this axiom is saying that if you first
bind with one function, then you
bind the result against another function, that's the same as applying the first function to the value inside the monad and then calling
bind on the result of that application. This isn't exactly associativity in the classical sense, but you can sort of think about it in that way.
One of the useful consequences of the second law comes up (quite frequently) when you have one
bind nested inside the another. Whenever you find yourself in that situation, you can move the nested
bind outside of the outer
bind, flattening your code slightly. Like so:
val opt: Option[String] = Some("string") opt bind { str => val innerOpt = Some("Head: " + str) innerOpt bind { str => Some(str + " :Tail") } } // is the same as... opt bind { str => Some("Head: " + str) } bind { str => Some(str + " :Tail") }
The rewritten code has a much more "sequential" feel (the essence of monads!) and is almost always shorter than the nested form.
As I said before, the axioms are very, very intuitive once you understand the abstract concept of a monad. They may not be intuitive to express, but their consequences are very easy to understand and quite natural in practice. So, don't spend a lot of time trying to memorize the axioms. Your time will be better spent contemplating the way that semicolon works.
Monads are not scary. They are not complex, academic or esoteric. Monads are an abstract, mathematical label affixed to a pattern found in almost all code. We all use monads every day. The hardest part in understanding monads is recognizing that the hardest part isn't so hard after all.
I sincerely hope that this latest, dubious venture down the well-trod path of monad exposition has proven a fruitful one. I can say without hesitation that the understanding and perspective which comes from a solid grasp of monads is invaluable in very practical, down-to-earth coding (even in staid languages like Java!). Monads impart an understanding of the very fabric of sequential computation and composability, and if that isn't sufficient motivation to learn, I don't know what is.


text:
- Health
Patient Care
I Want To...
I Want To...
Find Research Faculty
Enter the last name, specialty or keyword for your search below.
School of Medicine
I Want to...
Apply for Admission
Or find a doctor at another Johns Hopkins Medicine Member Hospital:
Amita Gupta, M.D.
Deputy Director, Johns Hopkins University Center for Clinical Global Health Education
Professor of Medicine
Languages: English, French, Hindi, Spanish
Expertise: HIV/AIDS, Infectious Disease, Infectious Diseases, Tuberculosis
Research Interests: HIV and co-infection care and treatment clinical trials in India and other resource-constrained countries; Mother-to-child transmission prevention; Diarrheal diseases epidemiology; Malnutrition and TB-HIV coinfection in adults and children ...read more
The Johns Hopkins Hospital
600 N Wolfe Street Outpatient Moore Clinic, Suite 384 Baltimore, MD 21287
Phone: 410-502-7696
Dr. Gupta is Deputy Director of the Johns Hopkins (JH) Center for Clinical Global Health Education (CCGHE), and Associate Professor of Infectious Diseases at the JH School of Medicine, with a joint appointment in International Health at the JH Bloomberg School of Public Health.
Board certified by the American Board of Internal Medicine in infectious diseases, Dr. Gupta specializes in international public health, clinical research, and education in infectious diseases, HIV/AIDS, and tuberculosis (TB). Since 2002, her work has been focused primarily on India, where she leads several Indo-JHU research collaborations, including the C-TRIUMPH and RePORT consortium for tuberculosis (TB) research funded by the US National Institutes of Health (NIH) and the government of India. Dr. Gupta is also Co-principal Investigator of the NIH-funded Baltimore-Washington-India (BWI) HIV and Infectious Diseases Clinical Trials Unit (CTU), and she is an active clinical investigator in multi-country HIV/TB trials conducted by the AIDS Clinical Trials Group (ACTG) and the International Maternal Pediatric Adolescent AIDS Trials Network (IMPAACT). Additionally, she has been awarded research grants from the NIH, CDC, and several philanthropic foundations to investigate TB in children and pregnant women, malnutrition, infection and inflammation, HIV treatment outcomes, and antibiotic resistance.
Dr. Gupta is an author of more than 90 peer-reviewed research publications and 7 book chapters, primarily on prevention and treatment of HIV, TB, and other infectious diseases, predominantly in low- and middle-income settings. She has also mentored more than 30 junior scientists in India and the US to run research studies and submit their own scientific findings to peer-reviewed publications.
From 2000–2002, Dr. Gupta worked for the US Centers for Disease Control and Prevention (CDC), where she was engaged in global public health projects in the US, Guatemala, Vietnam, and Micronesia.
Dr. Gupta received an undergraduate degree from MIT, a Doctor of Medicine from Harvard Medical School, and a Master of Health Sciences in clinical investigation from JH Bloomberg School of Public Health. She completed her internal medicine training at San Francisco General Hospital-University of California, San Francisco, followed by a post-doctoral fellowships with the Epidemic Intelligence Service at the US Centers for Disease Control and Prevention and at the JHU School of Medicine.
- Deputy Director, Johns Hopkins University Center for Clinical Global Health Education
- Professor of Medicine
Departments / Divisions
Centers & Institutes
- MD, Harvard Medical School (1997)
- University of California San Francisco School of Medicine / Internal Medicine (2000)
- Centers for Disease Control and Prevention / Epidemiology (2002)
- Johns Hopkins University School of Medicine / Infectious Diseases (2005)
Research & Publications
Lab Website: Amita Gupta Lab
Clinical Trial Keywordstuberculosis, HIV, PMTCT, breastfeeding, antiretroviral, MDR-TB
Clinical Trials
ACTG 5273: Multicenter Study of Options for Second-Line Effective Combination Therapy (SELECT)
ACTG 5274: Phase IV, Open Label Strategy Trial: REMEMBER: Reducing Early Mortality and Early Morbidity by Empiric Tuberculosis Treatment Regimens
ACTG 5282: A Randomized, Phase II Trial to Compare an HPV Test-and-Treat Strategy to a Cytology-Based Strategy for Prevention of CIN 2+ in HIV-Infected Women
ACTG 5288: Management Using the Latest Technologies in Resource-limited Settings to Optimize Combination Therapy After Viral Failure
ACTG 5300/IMPAACT 2003: Phase III, Open Label, Multi-center Trial: Protecting Households on Exposure to Newly Diagnosed Index Multidrug-Resistant Tuberculosis Patients
IMPAACT 1026: Pharmacokinetic Properties of Antiretroviral Drugs During Pregnancy
IMPAACT 1077B/1077FF: Promoting Maternal and Infant Survival Everywhere (PROMISE): Breastfeeding and Formula Feeding Versions
IMPAACT 1078: Phase IV Randomized Double-Blind Placebo-Controlled Trial to Evaluate the Safety of Immediate (Antepartum-Initiated) Versus Deferred (Postpartum-Initiated) Isoniazid Preventive Therapy Among HIV-Infected Women in High TB Incidence Settings
Selected Publications
Nishi Suryavanshi; Vidya Mave; Nikhil Gupte; Ramesh Bhosale; Pradeep Sambarey; Sandesh Patil; Jayagowri Sastry; Robert Bollinger; Amita Gupta; Anita Shankar. "Contraceptive use and factors associated with postpartum surgical sterilization among HIV-infected women in Pune, India." Journal of HIV/AIDS and Social Services. 2015;14(3):359-370.
Mave V, Chandanwale A, Bhosale R, Shere D, Gupte N, Suryavanshi N, Kulkarni V, Kagal A, Bharadwaj R, Joshi S, Bollinger RC, Gupta A; SWEN (Six Weeks Extended Nevirapine India) and Byramjee-Jeejeebhoy Medical College Clinical Trials Unit Study team. "Vitamin D deficiency and risk of postpartum tuberculosis among HIV-infected breastfeeding mothers in India." Int J Tuberc Lung Dis. 2015 Mar;19(3):302-4. doi: 10.5588/ijtld.14.0658.
Tenforde MW, Gupte N, Dowdy DW, Asmuth DM, Balagopal A, Pollard RB, Sugandhavesa P, Lama JR, Pillay S, Cardoso SW, Pawar J, Santos B, Riviere C, Mwelase N, Kanyama C, Kumwenda J, Hakim JG, Kumarasamy N, Bollinger R, Semba RD, Campbell TB, Gupta A; ACTG PEARLS and NWCS 319 Study Group. "C-reactive protein (CRP), interferon gamma-inducible protein 10 (IP-10), and lipopolysaccharide (LPS) are associated with risk of tuberculosis after initiation of antiretroviral therapy in resource-limited settings." PLoS One. 2015 Feb 26;10(2):e0117424. doi: 10.1371/journal.pone.0117424. eCollection 2015.
Havers FP, Detrick B, Cardoso SW, Berendes S, Lama JR, Sugandhavesa P, Mwelase NH, Campbell TB, Gupta A; ACTG A5175 PEARLS and NWCS319 Study Teams. "Change in vitamin D levels occurs early after antiretroviral therapy initiation and depends on treatment regimen in resource-limited settings." PLoS One. 2014 Apr 21;9(4):e95164. doi: 10.1371/journal.pone.0095164. eCollection 2014.
Gupta A, Mathad JS, Yang WT, Singh HK, Gupte N, Mave V, Bharadwaj R, Zaman K, Roy E, Bollinger RC, Bhosale R, Steinhoff MC. "Maternal pneumococcal capsular IgG antibodies and transplacental transfer are low in South Asian HIV-infected mother-infant pairs." Vaccine. 2014 Mar 14;32(13):1466-72. doi: 10.1016/j.vaccine.2014.01.033. Epub 2014 Jan 30.
Savic R, Ruslami R, Hibma J, Hessling A, Ramachandran G, Gamiem AR, Swaminathan S, Mcilleron H, Gupta A, Thakur K, vanCrevel R, Aarnoutse R, Dooley K. Pediatric tuberculous meningitis: model-based approach to determining optimal does of anti-tuberculosis drugs for children. Clin Pharmacol Ther. 2015 Oct 22. doi:10.1002/cpt.202. [Epub ahead of print]
Maddali MV, Dowdy DW, Gupta A, Shah M. Economic and epidemiological impact of early antiretroviral therapy initiation in India. Journal of the International AIDS Society. 2015;18:20217.
Balagopal A, Asmuth DM, Yang W-T, Campbell T, Gupte N, Smeaton L, Kanyama C, Grinsztejn B, Santos B, Supparatpinyo K, Badal-Faesen S, Lama JR, Lalloo U, Zulu F, Pawar JS, Riviere C, Kumarasamy N, Hakim J, Li X-D, Pollard RB, Semba RD, Thomas DL, Bollinger RC, Gupta A. Pre-cART elevation of CRP and CD4+ T-cell immune activation associated with HIV clinical progression in m Multinational case-cohort study. J Acquir Immune Def Syndr 2015 Oct 1.
Hamilton CD, Swaminathan S, Christopher DJ, Ellner J, Gupta A, Sterling TR, Rolla V, Srinivasan S, Karyana M, Siddiqui S, Stoszek SK, Kim P. RePORT International: advancing tuberculosis biomarker research through global collaboration. Clinical Infectious Diseases. 2015;61(suppl 3):S155-S159 doi: 10.1093/cid/civ611.
Podany AT, Bao Y, Swindells S, Chaisson RE, Andersen JW, Mwelase T, Supparatpinyo K, Mohapi L, Gupta A, Benson Cam, Kim P, Fletcher CV on behalf of the ACTG A5279 Study Team. Efavirenz pharmacokinetics in HIV-infected persons receiving rifapentine and isoniazid for tuberculosis prevention. Clin Infect Dis. 2015;16 Jun. pii: civ464. [Epub ahead of print]
Gandhi BS, Kulkarni K, Godbole M, Dole SS, Kapur S, Satpathy P, Khatri AM, Deshpande PS, Azad F, Gupte N, Bharadwaj R, Bollinger RC, Gupta A. Dengue and chikungunya co-infection associated with more severe clinical disease than mono-infection. International J. of Healthcare and Biomedical Research. 2015 Apr;3(3)
Shivakoti R, Yang WT, Gupte N, Berendes S, Rose A, Cardoso SW, Mwelase N, Kanyama C, Pillay S, Samaneka W, Riviere C, Sugandhavesa P, Santos B, Poongulali S, Tripathy S, Bollinger RC, Currier JS, Tang AM, Semba RD, Christian P, Campbell TB, Gupta A; NWCS 319 and PEARLS Study Team. Concurrent anemia and elevated CRP predicts HIV clinical treatment failure, including TB, post-antiretroviral therapy initiation. Clin Infect Dis. 2015 Mar 31. doi: 10.1093/cid/civ265. [Epub ahead of print]
Academic Affiliations & Courses
Graduate Program Affiliation
Activities & Honors
- Infectious Diseases Society of America
- American Medical Association
- American Society of Tropical Medicine and Hygiene
Professional Activities
- Vice Chair, IMPAACT TB Scientific Committee
- Member, ACTG TB transformative Science Group
- Co-Chair, NIH/Indian Government TB Research Consortium (RePORT)
Patient Ratings & Comments
The Patient Rating score is an average of all responses to physician related questions on the national CG-CAHPS Medical Practice patient experience survey through Press Ganey. Responses are measured on a scale of 1 to 5, with 5 being the best score. Comments are also gathered from our CG-CAHPS Medical Practice Survey through Press Ganey and displayed in their entirety. Patients are de-identified for confidentiality and patient privacy.
- ...Loading ratings...
- ...
- ...
- ...
- ...
- ...


text:
MU Extension > calendar
Professional development events
Missouri 4-H events
Missouri Business Development Program calendar
Nursing Outreach Conferences
CAFNR events calendar
University of Missouri calendar
St. Louis Labor Law Breakfast Series May 2014
When: Wednesday, May 14, 2014, 8 a.m. to 9:30 a.m.
A monthly labor education program targeted to union officers and staff in the St. Louis area. The program offers information on current issues impacting members and working families. Meetings are held the 2nd Wednesday.
8:00 a.m. breakfast buffet, 8:30-9:30 program presentation. Checks payable to: St. Louis County Extension Council. Mail to: University of Missouri Extension, 10650 Gateway Blvd., St Louis, MO 63132.
Class size:
Event full:
Robert A Russell, firstname.lastname@example.com Development Program, MU Extensionphone: 573-882-0061
St. Clair County Grazing School
When: Wednesday, May 14, 2014, 8 a.m. to Thursday, May 15, 2014, 4:30 p.m.
Topics to be covered at the class are basic grazing concepts, livestock nutrition, forage quality and availability, plant growth, extending the grazing season, grazing economics, grazing calculations, evaluation of resources, fencing and water installation and equipment, grazing system layout and design, managing the total system and soil health, and NRCS cost share programs.
Contact Margie Best at the St. Clair County NRCS/SWCD office at 417-646-8108 ext. 101
Patrick Davis, email@example.com Extension in Cedar Countyphone: 417-276-3313
Doing Business with the Government
When: Wednesday, May 14, 2014, 9 a.m. to noon
This basic 3 hour seminar will cover selling to the government, what does the government require from businesses; basic questions for doing business with the government; required registrations; benefits of federal and state certifications; socio-economic benefits; and becoming a qualified government contractor and win government contracts. The seminar will give an overview of MO PTAC services available to assist Missouri businesses in all aspects of government contracting.
Session topic:
This basic 3 hour seminar will cover selling to the government, basic questions for doing business with the government; required registrations; benefits of federal and state certifications. The seminar will give an overview of MO PTAC services available.
St. Charles Economic Development CenterSSM Conference Room5988 Mid Rivers Mall Dr,St. Charles MO 63304
Character Critters-Weaubleau (Session 5 of 5)
When: Wednesday, May 14, 2014, 9:30 a.m. to 11 a.m.
Character Education for pre-school and kindergarten
Cindy the Citizenship Crab
Stay Strong, Stay Healthy(Harrisonville) (Session 10 of 21)
When: Wednesday, May 14, 2014, 9:30 a.m. to 10:30 a.m.
$40.002nd person from household is $20
Susan Mills-Gray, email@example.com and Exercise Physiology, MU Extensionphone: 816-506-3338
Cooking Matters for Adults (Session 2 of 6)
When: Wednesday, May 14, 2014, 10 a.m. to noon
Topics covered include: •Cooking tips and techniques•Tips for proper food safety, storage and sanitation•Nutrition information to keep your family healthy •Budgeting—Stretch your food $$ and maximize your resources!!•Tips to get your family to try new foods •Shopping healthfully on a limited budget•A bag of FREE groceries for one of the lesson's recipe each week for you to prepare the recipe at home.•Six weekly lessons feature hands-on learning and include group discussion with instructors. •Graduation certificate, recipe book and other freebies provided upon completion of the program.•FOOD —prepared by you...the class participants!
Please call the Camden County MU Extension Office at 573-346-2644 or email email@example.com to register.
Eat Well Be Well with Diabetes: John C. Murphy Health Center (Session 1 of 4)
A four-session series that provides people with type 2 diabetes, their family and friends, with tools for the self-management of diabetes. The series focuses on nutrition, the cornerstone of diabetes management, but also reviews other self-management strategies that can help individuals avoid diabetes complications. Food demonstrations and tasting are included.
Introduction to Diabetes Self-Management
To register: Call Mary Hart @314-615-0505
$0.00Program is free due to grant funding.
Damaris Karanja, firstname.lastname@example.com Extension in St. Louis Countyphone: 314-400-7298
Focus on Kids - Pulaski
When: Wednesday, May 14, 2014, 10 a.m. to 12:30 p.m.
To register for this program please call the Pulaski County Extension Office at 573-774-6177.
Sarah M. Traub, firstname.lastname@example.com Operations and Council Developmentphone: 573-882-2151
Relatives As Parents--Northland Grandfamilies (Session 20 of 23)
The Northland Grandfamilies program serves grandparents in Clay and Platte Counties who are raising their grandchildren. The program also serves aunts/uncles and other relatives who are raising children under the age of 18. The program seeks to raise awareness of the issues facing grandparents/aunts/uncles who are filling the parenting role. Advocacy, education and referral services are important aspects of the program. Support group meetings are scheduled twice a month, with guest speakers on topics of interest. The program is made possible by a partnership of the Clay County Extension Council, the Platte County Senior Fund and Clay County Senior Services.
The topic for this month's daytime group meeting will be announced in late April.
Any grandparent who is raising grandchildren age 18 or younger is welcome to participate in Northland Grandfamilies. The program is also open to aunts/uncles and other adult relatives who are raising children. The program is free of charge. If attending a Northland Grandfamilies support group meeting for the first time, please call in advance for more information: 816-407-3490
Chair Tai Chi for Arthritis - Hidden Lake (Session 1 of 5)
When: Wednesday, May 14, 2014, 10:30 a.m. to 11 a.m.
Chair Tai Chi for Arthritis is a gentle, slow and safe exercise to help strengthen balance, relieve pain, promote flexibility, relax mind and body, and enhance overall health. The exercise program is easy to learn and ideal for people with physical challenges, chronic diseases or those undergoing rehab or physical therapy.
Stay Strong, Stay Healthy(Kingsville) (Session 9 of 20)
When: Wednesday, May 14, 2014, 11:30 a.m. to 12:30 p.m.
$50.002nd person from same household is $25
Stay Strong, Stay Healthy - St. Louis County Extension Center (Session 1 of 8)
Session 1 and pre-assessment
Please contact the St. Louis County Extension Center at 314-400-2115 or firstname.lastname@example.com
$40.00If you attend 7 out of 8 classes and both the pre- and post-assessment, you will receive a $5 refund.
Exporting Other Programs
When: Wednesday, May 14, 2014, 1 p.m. to 3:30 p.m.
A seminar to teach the importance in market research for those businesses new to market or new to exporting.
To show attendees the importance of export market research to new to market and new to export companies.
Call the University of Missouri Extension-Monroe County at 660-327-4158 or Moberly Area Economic Development Corporation at 660-263-8811
Charles Holland, firstname.lastname@example.com Extension in Monroe Countyphone: 660-327-4158
Focus On Kids, Circuit Court 11 - St. Charles
Focus on Kids, developed by the University of Missouri, is a court-approved educational program for parents with minor children, who are seeking divorce, legal separation, motion to modify, annulment or paternity. The educational session will increase awareness of the effects marriage dissolution and/or custody has on children.
Focus on Kids is for parents to better understand how divorce affects children, and how their actions during and after the divorce can have long-term affects on the children involved.
Call 636-970-3000 to register or for more information. VISA, Master Card or Discover accepted. Not open to the public - court ordered, call 636-970-3000 for more information. more...
$45.00One week is required prior to the date of the session you have registered to attend.
Eating from the Garden (Session 2 of 6)
When: Wednesday, May 14, 2014, 1:30 p.m. to 3 p.m.
school year ending with radishes in garden and will plants sweet potato and tomato plants
picking radishes and pulling weeds
Stay Strong, Stay Healthy, St. Luke's Plaza (Session 7 of 10)
When: Wednesday, May 14, 2014, 2 p.m. to 3 p.m.
A strength training program for middle-aged and older adults. The programs goal is to improve health and quality of life. Exercise sessions to improve strength and balance include warm-up exercises, strengthening exercises and cool-down stretches. An orientation and pre-assessment precede nine weeks of exercise sessions, and the program concludes with a post-assessment.
Call Jean @ (314) 361-3962
$0.00Class funded by St. Luke's Plaza
Intergenerational Science (Session 12 of 12)
When: Wednesday, May 14, 2014, 4 p.m. to 5 p.m.
Help youth learn and explore natural resources in Missouri. Missouri Master Naturalists will teach a variety of workshops about forest, fish, and wildlife resources with hands-on activities to engage youth learning and sharing.
Manage Your Financials - Don't Let Them Manage You
When: Wednesday, May 14, 2014, 5:30 p.m. to 8:30 p.m.
Manage Your Financials—Don't Let Them Manage You is designed for business owners, managers, accountants, bankers and consultants who need to know how to turn financial statements into useful management tools. During this course, you will learn to identify key business information that is captured on the income statement and balance sheet. You will learn to calculate several ratios and understand what those ratios mean in terms of business productivity and success. You will leave this session with a greater understanding of how to read and interpret financial documents and how to use that information to drive business decisions.
Attend this course and Command Your Cash on May 21, 2014 for $349 (a $50 savings).
Carmen DeHart, firstname.lastname@example.com SBDC at University of Missouri-Kansas City (UMKC)phone: 816-235-6428
Manage Your Financials - Don't Let Them Manage You & Command Your Cash (Session 1 of 2)
This is the combined discounted registration for Manage Your Financials - Don't Let Them Manage You (May 14, 2014) and Command Your Cash (May 21, 2014).
View our Registration and Cancellation Policies here: http://info.umkc.edu/sbtdc/registration-policy/.
2014 Focus on Kids (Session 3 of 7)
When: Wednesday, May 14, 2014, 6 p.m. to 8:30 p.m.
An educational program for divorcing parents. The purpose of this workshop is to help parents learn how to nurture and support their children during and after their divorce.
University of Missouri Extension at 816-252-5051
Master Gardener Level 1 Training (Session 11 of 15)
When: Wednesday, May 14, 2014, 6 p.m. to 9 p.m.
Native Plants
Call 636-970-3000. Visa, Master Card and Discover accepted.
Focus on Kids--Responsibilities As Parents
When: Wednesday, May 14, 2014, 6 p.m. to 8 p.m.
Responsibilities As Parents (RAP) is a court-mandated program in Platte County for never-married parents and for parents involved in paternity establishment cases.
Responsibilities As Parents is a court-mandated program in Platte County for never-married parents and for parents involved in paternity establishment cases.
Parents whose cases are filed in Platte County must contact the Circuit Clerk's office at 816-858-1986 for information on how to register for the RAP class.Parents whose cases are filed in another county or out-of-state, but wish to take the RAP class must contact the University of Missouri Extension Center at 816-407-3490 for more information.
Mineral Creek 4-H Club (Session 1 of 12)
When: Wednesday, May 14, 2014, 6:30 p.m. to 8 p.m.
monthly 4-H club meeting
Pleasant Grove 4-H Club meeting (Session 3 of 8)
When: Wednesday, May 14, 2014, 7 p.m. to 9 p.m.
Pleasant Grove 4-H meeting
Katherine Hogan, email@example.com Extension in Clark Countyphone: 660-727-3339
Ten Mile 4-H club meeting (Session 3 of 10)
Ten Mile 4-H club meeting
© 1993
to 2015 Curators of the University
of Missouri, all rights reserved, DMCA
and other copyright information
University of Missouri Extension is an equal opportunity/ADA institution.
University of Missouri Extension
© 1993
to 2015 Curators of the University of Missouri, all rights reserved


text:
Your Neetu Kapoor favorites?
Let's start with Neetu [Singh] Kapoor at a Christmas party. Here are a couple of pictures. The kid to the left (wearing the Goofy mask) is yours truly :o) The pictures are dated 23 December 1987. The event was about a mile away from home, at an outdoor complex adjacent to The Oberoi [hotel] at Nariman Point in Bombay. Wonder if Ranbir Kapoor was at the party. Perhaps that was who she was searching for in the second picture [right]? Oh, and special thanks to my sibling for holding on to these. I can hardly believe we still have them 20 years and four moves later.
Turns out my favorite Rishi Kapoor song is also my favorite Neetu Singh song: Parda Hai Parda from Amar Akbar Anthony (discussed the song in this post).
Ought to check out more of her works. Which leads to the question: Any recommendations? Which is/are your favorite Neetu Singh film(s)?
8 comments:
Love it! When I first glanced at the post I thought it was a current picture of Neetu Kapoor and thought "Wow, she looks fantastic!" Then I actually read the post and the pic was from '87. I like your mask, sort of makes it look like you're a very young celebrity stalker. :)
And you probably played with Ranbir, but just can't remember it because that party was so long ago.
I also Love Parda Hai Parda from Amar Akbar Anthony and did a post with 4 versions, including one where Neetu is sitting on the judging panel along with Rishi, And she still looks fantastic.
- Saturday, May 10, 2008
- Filmi Girl said...
Is it too cheezy to love Neetu in Amar Akbar Anthony? I love her character in that - although she is quite secondary to the men, you get much more of a sense of personality from her than the other women in the film. A sign of her superior talent, I think!
- Saturday, May 10, 2008
- Shweta Mehrotra Gahlawat said...
I think she rocked Kabhi Kabhi with so many people in that movie, she still held her space. I also love her in Rafoo Chakkar and Khel Khel Mein (all Rishi- natch)
- Saturday, May 10, 2008
- theBollywoodFan said...
Sita-ji: ROTFL at the young celebrity stalker comment!!!
Agreed that she still looks fantastic. She was at the Filmfare awards this year, and as I watched her on stage and stand beside Dimple, I couldn't help but think that she would be great in a role like that of Dimple in Dil Chahta Hai. Dimple was fantastic, and Neetu-ji wouldn't act again anyway...
Filmi Girl: Superior talent and excellent presence. I think she had a great role too, although Shabana Azmi and Parveen Babi were excellent as well.
Shweta: Thank you for your recommendations!
- Saturday, May 10, 2008
- Beth said...
Parvarish is one of my favorites. But I love her in anything, really!
- Saturday, May 10, 2008
- theBollywoodFan said...
Thank you Beth. I'll look forward to checking it out.
Excited about my to-watch list starting to look very appealing!
- Saturday, May 10, 2008
- memsaab said...
She and Shabana Azmi totally stole the show (from Amitabh and Vinod K!) in Parvarish. They are hilarious. She was great in Duniya Meri Jeb Mein too (opposite Rishi).
I like her in everything she did; even if it was a bad film she was always a bright spot. She's beautiful too, and just seems to get more beautiful as she ages. Inspiration!
- Sunday, May 11, 2008
- theBollywoodFan said...
Thank you Memsaab. Noticed you had Parvarish in your Top 5 Heroine roles post as well. Cannot wait to check it out! And the others too.
- Sunday, May 11, 2008


text:
Each school year, every individual interested in volunteering in Osseo Area Schools must complete a Volunteer Application. This form lets us know where you are interested in volunteering and what opportunities interest you. By completing the application, you are not committing to volunteering; rather, it starts a conversation with us about potential volunteer opportunities.
If you know the school where you would like to volunteer, request an application from the volunteer coordinator at that school.
If you would like to volunteer at a school in your neighborhood, find a school near you. Then contact the volunteer coordinator and complete the application for that school.
Upon receipt of your application, the volunteer coordinator will contact you to discuss placement opportunities and training.
Carrie Larson, Coordinator


text:
The American Heart Association covers many areas when it comes to heart disease and stroke (see list at right). The current priority is for public funding for research and prevention efforts, essential to achieve our health impact goal of improving the cardiovascular health of all Americans by 20 percent while reducing deaths from cardiovascular diseases and stroke by 20 percent by 2020.
Promote Public Funding for Heart Disease and Stroke Prevention Programs
- Secure and protect dedicated state appropriations for Heart Disease and Stroke Prevention Programs in state health departments.
- In those states without Heart Disease and Stroke Prevention Programs, secure the establishment of new programs, which have priorities consistent with the priorities of the CDC's National Heart Disease and Stroke Prevention Program, and secure dedicated state appropriations to support program implementation.
- Explore opportunities to generate and direct additional fiscal resources for these programs and initiatives and support efforts to leverage new and existing federal funds and grant opportunities to supplement these efforts.
- Support other public health initiatives and evaluation targeted at heart disease, stroke and related risk factors, and the disparities that exist in these areas.
For more information about the policies on this page, please contact Ashley Bell, 214.706.1241


text:
July 31, 2012
Collaborating is Fun.....
3 comments:
- Kimberli Johnson said...
Wonderful drawing, and painting!!! and what is that?
- July 31, 2012 at 10:25 PM
- Stephen Sitton said...
Thanks! I have no idea what it is but I call it a goat ferret. Or Garret.
- July 31, 2012 at 10:41 PM
- As said...
I have always found amazing this kind of artwork. But how do you do it? do you use only traditional techniques, like oils, pastels, pencils, maybe even airbrush, or do you do it all in photoshop or another??? this was always my big question
- August 26, 2012 at 11:42 PM
Subscribe to: Post Comments (Atom)


text:
WARNING: This blog entry was imported from my old blog on blogs.sun.com (which used different blogging software), so formatting and links may not be correct.
I like unit tests - but running them can be painful. Commit-validation tests
which bring up UI are obviously annoying, but even simple unit tests that
get in the way. Does this look familiar?
The above menubar should look familiar to anyone on a Mac who's run unit tests for client side
Java code. Not necessarily GUI tests, just any test where GUI libraries are loaded.
For every testcase, the test runner fires up a new process, which tells
OSX that "I'm graphical, give me focus!", and this steals the focus from the user.
The test finishes quickly thereafter, the process quits - and then the test runner
goes to the next test and the whole cycle starts over.
This is really painful because I like to have lots of tests. The Python editor support
for Netbeans had 600+ tests;
the counts for the JavaScript support was higher, and
the Ruby support even higher than that. Whenever I run tests, I basically have to
fight with my computer to get focus. Forget trying to write anything - every second
or so my keystrokes get stolen as the next test grabs focus - so I've gotten in
the habit of using the time for browsing, since I'm mostly reading, and I can handle
clicking a link a second time if the first click got lost. But every now and then
somebody will ping me on instant messaging - and it's maddening trying to respond while
this is going on.
If this is sounding painfully familiar to you, I have good news. I've finally figured
out a setup where this is no longer a problem!
The key discovery was that I can run my tests from another account on the system.
With OSX' fast user switching, I can switch to the alternate account, launch the
unit tests, and return back to my regular account where the tests won't interfere
with display focus. In order to let me run my tests from that other account, I
just open a terminal there and
su -l tor in the shell to run all the
commands (or NetBeans) as myself.
This was a huge improvement since it removes the 10-30 minutes testrun downtime.
But it had some disadvantages - first, I don't like running tests from a shell, and second,
it's hard to know when things finish - and switching back and forth to check is annoying
since I always have passwords on my accounts so the machine isn't open.
So the second step was to set up Hudson (a
continuous integration server that is trivial to setup, and has a huge number of
plugins which makes
graphing code coverage, unit tests, findbugs results, integrating with version control
systems etc trivial. And it's
not just for Java developers.)
Instead of logging into the other account
for each test run, I log into the other account once, and start up Glassfish
with Hudson running. From now on I can access, configure and launch builds right
from my own browser in my primary account. The key step here is that Glassfish was
started from the secondary account, so its primary display is associated with the builder account.
When my build in Glassfish gets to the test stage, it's actually doing the display
connection just as before, and if I log into the secondary account, I get the annoying
focus flashing just as before. Look - the tested process is a user visible application in the dock:
Another improvement which really helped is the "File System" version control plugin for Hudson.
I want my Hudson builds to build my current working copy. I don't want to
check my code into Mercurial (even a local repository) just so that Hudson can
grab the code and build it. I want Hudson to build my current changes - my current
edits. After all, I'm trying to test them before checking in! And I discovered that
there is a plugin which will let me do that - it's just
a "file system" version control wrapper - which means you just point Hudson to your local
directory, and off it goes. When the build starts, it makes a quick disk-copy of the
source tree. Even though Mercurial cloning is pretty fast, this is even faster.
The disk copy also lets me specify a filter of files to exclude, so I had it ignore
*.class files. The diskcopy only takes 10 seconds or so before the build kicks
off, and it's building a snapshot of my current in-progress, edited working copy!
(It can also just update the copy based on changed filestamps - that's even faster,
but it didn't seem to correctly delete removed files, so I let it start from scratch
each time.)
(Note - this plugin isn't in the catalog that you can browse right from within the
Manage Plugins page within Hudson; I downloaded the .hpi file from
and installed it in the Advanced tab.)
The final ingredient is the new Hudson support in NetBeans 6.7. I don't even have
to go to the browser to kick off build jobs. I just point NetBeans to my Hudson
server once, and from then on I have full Hudson integration. When I want to
run my tests I just select Launch job:
I get notified if there's a problem:
I can look at failures and logs:
I can see build logs etc. directly in the output window, and hyperlinks warp to directly to files - to the files as they were in the build, not the current state:
So to recap - with this setup, as I'm editing my code and I want to check the tests,
I just right click on a node and say "Start Job" - and off it goes without bothering
me at all - no more focus interruptions, and no more GUI windows popping up from
interactive tests. It's trivial to check the results. And it's even added one more
level of convenience: I have multiple projects, each with unit tests, and from the
IDE I couldn't have them all run with a single gesture. My build job does that.
I'm really stoked! I was at one point able to do this when I was working on Linux
and Solaris by setting my $DISPLAY variable and doing tricks with VNC. But that
still required my tests to run in a console - which made interpreting the results sucky.
If you haven't played with Hudson, try it - it's unbelievably easy to set up. Just download
the Glassfish appserver and install it, download the Hudson .war file, and drop the hudson.war
into the autodeploy directory of the appserver, and browse to
Once you're there you can install
plugins (under Manage hudson), point to your local installations of the JDK, ant,
etc., and configure your build jobs by running scripts, launching maven scripts, writing
ruby scripts, or obviously running ant scripts.
Some final miscellaneous tips:
- I don't want Time Machine to back up my builds trees, or Spotlight to
index data in these directories, so I went to the TimeMachine preferences and had it
exclude the
- I did the same thing for Spotlight - but unlike
the Time Machine preferences, there was no checkbox to "Display Invisible Files" (e.g.
files that start with a dot, such as
.hudson) in its file chooser. Here's a tip I didn't
learn until recently: When a Mac filechooser has focus, you can press slash (/) - and this
will open a text field where you can directly type the path it should jump to. I typed
/Users/tor/.hudsonand from there I was able to select the jobs directory to exclude.
- You might be tempted to skip the "filesystem version control" plugin and just have
your build symlink to your working copy. Be careful; if Hudson is configured to delete
older builds you might find yourself without your source code. I'm not saying it will
follow your symlinks - Java has support for symlinks now - but I haven't tried it, and
I have been bitten by
antin the past where it decided to follow symlinks in its
zeal to delete recursively!
I recently discovered that you can reorder the build steps in a Hudson job. The little
graphic to the left of a build task is a handle you can just drag to reorder!