text:
Mortal Kombat Trilogy Remastered potentially coming?
15th December 2018	Off	By thatretrovideogamer
Ahhh The Game Awards 2018, usually a miss for those of us tired out from all the E3 coverage, EGX, CES, PAX, Play Expo, and my personal local favourite Revival. Okay the last couple cater for the retro enthusiasts, but you get the idea.. by this point in the year, no-one is really looking towards announcements at the awards and we're more working out how many hours in November can be spent completing the onslaught of new releases before the new year starts the cycle all over again!
However it was during this years event NetherRealm Studios Creative Director Ed Boone took to the stage to confirm that the highly anticipated Mortal Kombat 11 was officially in production, with its release date currently scheduled for April of next year. Queue the whooping of fans salivating at the prospect of digging out more info as to which fighters and guest characters could be hitting the roster. Meanwhile in the background, many fans are still questioning given the series resurgence, why the earlier games haven't been given their much needed HD polish to capitalise on the success.
Well one such YouTuber ('Doctre81') has made a compelling case that a Mortal Kombat Trilogy could be receiving a remastered edition on major platforms sooner rather than later. First off, pointing to evidence that Blind Squirrel Games is working on an "unannounced fighting game remaster" of "three fighting games" from the 1990s, Doctre81 speculates that the project could be Mortal Kombat Trilogy.
The video really does do some digging into multiple sources, highlighting work done on the Blind Squirrel Games project in question, containing a "progression system tying together 3 separate titles into one meta-experience", Which indicates a trilogy pack for certain, and that level design and gameplay scripting has been done in Unreal Engine 4.
The most interesting part for me was that "documentation and creative writing for back story and environment descriptions for levels" has already been done for the project, indicating a potential rewrite of the narrative to tie in with later games in the franchise. Which given Blind Squirrel was the company behind BioShock: The Collection, also shows they've had experience in this act before, but hopefully this time without the bugs and issues the latter title launched with.
As with all rumours, never take this as gospel until we see an official announcement, after all we could be barking up the wrong tree and this could well turn out to be a Streets of Rage Trilogy remake (Would Sega even consider that?). But with Mortal Kombat 11 being made available on the Switch as well, this could very well be true given the portability of the system and many of the owners being like myself, the right age range to remember the games first hand, but wanting an easy way to play the classics and reminisce that the games always looked this good, ignoring the HD improvements.
That Retro Video Gamer -14th Dec Roundup
Crash! Aaaahhhhhhhhhhhhhhh Saviour of the Retroverse!


Transport Services is a simulation video game developed and published by Hammer Games.It was released on 24 Jan, 2019 for PC.Played about an hour so far i love the design of it , it has the charm and simplicity of the older transport sim games and its very easy to pick up. Its fun in its current state but needs much improvement and more content overall i can see this game being a gem if the Hammer Games puts the work into it.we provided Transport Services PC Game with pro account of mediafire(without ads, direct link) under 200 MB.Is this game is free and for Pc? Yes this game is free video game and for Computer. Please see below screenshots and system requirements to understand you, Can you able to play this game on pc? so after check out download , Install, play and Enjoy!.Now Check Out Below Download link ,download game and enjoy!.According to me Download >>Install>>Play>>Enjoy!.
Check given below minimum system requirements of Transport Services PC Game.
How to Download and Install Transport Services For PC?
First Download Transport Services by click on download link.
Open "Transport Services.CheckGamingZone" >>> Game Folder.
Click on "Transport Services" icon to play the game.


text:
Star Sightings - 11/9/2010
Nov. 8, 2010 Updated: Oct. 12, 2020 12:19 p.m.
Getty ImagesActress Malin Akerman attends the People's Choice Awards 2011 Press Conference in West Hollywood, California.
Getty ImagesColombian singer Shakira performs during the 2010 European MTV Awards at the Caja Magica in Madrid.
Getty ImagesActress Goldie Hawn and honoree Youssou NDour talk at the 2010 Malaria No More Benefit at The IAC Building in New York City.
Getty ImagesActress Gwyneth Paltrow attends the "Country Strong" Premiere at Regal Green Hills in Nashville, Tennessee.
Getty ImagesActress AnnaLynne McCord attends the Cheetah Vision, Hannibal Pictures & Emmett/Furla Films AFM party at Pier59 Studios West in Santa Monica, California.

redpajama_set_name: RedPajamaCommonCrawl


The Connection class contains methods related to connections. A connection is a drawing object derived from a model object. It represents a drawing connection that has a reference to the actual connection in the model database.
Deletes the drawing connection from the current drawing database.
Selects the drawing connection from the current drawing database.


AC MILAN coach Carlo Ancelotti is looking forward to David Beckham boosting his injury-depleted squad in the new year.
England midfielder Beckham will join Milan on a loan deal in January, but will return to Los Angeles Galaxy for the start of the 2009 Major League Soccer season in March.
His arrival could come at the perfect time for the Italians, who were without injured midfielders Gennaro Gattuso and Kaka for Sunday's 4-2 defeat at Juventus. Gattuso is out for the season with a knee injury.
"At this point, Beckham becomes even more useful and important to us – though he doesn't have the characteristics of Gattuso," " said Ancelotti.
AC may also consider strengthening their defence in January with their performance against Juve undermined by some sloppy individual errors.
"We are too vulnerable in defence and concede too many opportunities," said Ancelotti.
Beckham will watch Milan's final game of the year against struggling Udinese on Sunday.


text:
Q: Getting signature for vimeo api This is my code to get the oauth tokens and authorize my app for vimeo. This works fine:
WebView webview = new WebView(this);
        webview.getSettings().setJavaScriptEnabled(true);
        webview.setVisibility(View.VISIBLE);
        setContentView(webview);

        Log.i(TAG, "Retrieving request token from Vimeo servers");

        try {

            final OAuthHmacSigner signer = new OAuthHmacSigner();
            signer.clientSharedSecret = Constants.CONSUMER_SECRET_VIMEO;

            OAuthGetTemporaryToken temporaryToken = new OAuthGetTemporaryToken(Constants.REQUEST_URL_VIMEO);
            temporaryToken.transport = new ApacheHttpTransport();
            temporaryToken.signer = signer;
            temporaryToken.consumerKey = Constants.CONSUMER_KEY_VIMEO;
            temporaryToken.callback = Constants.OAUTH_CALLBACK_URL;
            OAuthCredentialsResponse tempCredentials = temporaryToken.execute();
            signer.tokenSharedSecret = tempCredentials.tokenSecret;

            OAuthAuthorizeTemporaryTokenUrl authorizeUrl = new OAuthAuthorizeTemporaryTokenUrl(Constants.AUTHORIZE_URL_VIMEO);
            authorizeUrl.temporaryToken = tempCredentials.token;
            String authorizationUrl = authorizeUrl.build();
            Log.d("urlop", authorizationUrl);

            /* WebViewClient must be set BEFORE calling loadUrl! */
            webview.setWebViewClient(new WebViewClient() {

                @Override
                public void onPageStarted(WebView view, String url,Bitmap bitmap)  {
                    System.out.println("onPageStarted : " + url);
                }
                @Override
                public void onPageFinished(WebView view, String url)
                {
                    Log.d("url", url);
                    if (url.startsWith(Constants.OAUTH_CALLBACK_URL)) {
                        try {

                            if (url.indexOf("oauth_token=")!=-1) {

                                String requestToken  = extractParamFromUrl(url,"oauth_token");
                                String verifier= extractParamFromUrl(url,"oauth_verifier");

                                signer.clientSharedSecret = Constants.CONSUMER_SECRET;

                                OAuthGetAccessToken accessToken = new OAuthGetAccessToken(Constants.ACCESS_URL);
                                accessToken.transport = new ApacheHttpTransport();
                                Log.d("abc", "");
                                accessToken.temporaryToken = requestToken;
                                Log.d("abc", accessToken.temporaryToken);
                                accessToken.signer = signer;

                                accessToken.consumerKey = Constants.CONSUMER_KEY;
                                accessToken.verifier = verifier;
                                Log.d("abc", accessToken.verifier);

                                OAuthCredentialsResponse credentials = accessToken.execute();

                                signer.tokenSharedSecret = credentials.tokenSecret;
                                Log.d("abc", signer.tokenSharedSecret);
                                CredentialStore credentialStore = new SharedPreferencesCredentialStore(prefs);
                                credentialStore.write(new String[] {credentials.token,credentials.tokenSecret});
                                view.setVisibility(View.INVISIBLE);
                                performApiCall();
                               // startActivity(new Intent(OAuthAccessTokenActivityVimeo.this,Vimeo.class));
                            }
                            else if (url.indexOf("error=")!=-1)
                            {
                                view.setVisibility(View.INVISIBLE);
                                new SharedPreferencesCredentialStore(prefs).clearCredentials();
                                startActivity(new Intent(OAuthAccessTokenActivityVimeo.this,MainMenu.class));
                            }

                        } catch (IOException e) {
                            e.printStackTrace();
                        }

                    }
                    System.out.println("onPageFinished : " + url);

                }
                private String extractParamFromUrl(String url,String paramName)
                {
                    String queryString = url.substring(url.indexOf("?", 0)+1,url.length());
                    QueryStringParser queryStringParser = new QueryStringParser(queryString);
                    return queryStringParser.getQueryParamValue(paramName);
                }

            });

            webview.loadUrl(authorizationUrl);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

However, in performApiCall() I need to do this:
String url = String.format("http://vimeo.com/api/rest/v2&format=json&full_response=1&method=vimeo.videos.search&oauth_consumer_key=%s&oauth_nonce=fb86e833df995307290763917343ae19&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1350908218&oauth_version=1.0&per_page=20&query=umar&sort=newest&summary_response=1",
                                            Constants.CONSUMER_KEY

                                            );

How can I get oauth_nonce, oauth_timestamp and oauth_signature?

A: *

*Re oauth_timestamp: AFAIK, you set the timestamp yourself to the current timestamp. If you run into problems (vimeo expects the timestamp to not differ more than a few seconds before or after what it thinks is the current timestamp, cf. the vimeo forum thread here), try fiddling with the system time you use (e.g., server time).

*Re oauth_nonce: The nonce value is a "random string, uniquely generated by the client to allow the server to verify that a request has never been made before" (The OAuth 1.0 Protocol).

*Re oath_signature: The client generates its own signature. From The OAuth 1.0 Protocol:

The client declares which signature method is used via the
"oauth_signature_method" parameter.  It then generates a signature (or
a string of an equivalent value) and includes it in the
"oauth_signature" parameter.  The server verifies the signature as
specified for each method.

In short: you don't "GET" these values from somewhere, you'll have to create them.
I'd really like to refer you to The OAuth 1.0 Protocol once again, it's fairly easy to read and should get you sorted for most of the queries you might have :).
Hope this helps.

A: From http://developer.vimeo.com/apis/advanced

If you're totally unfamiliar with OAuth, we recommend that you read
  hueniverse's OAuth 1.0 Guide before you continue. OAuth is
  complicated, and he does a great job of explaining the process.
  Twitter's guide is also very good.

Also watch the following resources (may help you)

*

*http://developer.vimeo.com/apis/advanced#official-libraries

*http://developer.vimeo.com/apis/advanced

*http://vimeoapi.tumblr.com/

*http://speckyboy.com/2012/10/31/coding-a-vimeo-api-instant-search-app-with-jquery/

redpajama_set_name: RedPajamaStackExchange


Nanny Available was established to help nannies, babysitters and child care providers just like you find the best babysitter and nanny jobs currently available in Tampa, Florida FL. We currently have many employers throughout Tampa looking for babysitters and nannies to begin working for them.
Whether you are looking to enhance your child care skills or are already an established babysitter or nanny, simply register at NannyAvailable.com and complete your child care profile to let the thousands of employers in Tampa, Florida FL looking for a babysitter or nanny find you.
Posted February 11 by Ashley C.
Posted October 29 by Jennifer D.


text:
Kristian Eidnes Andersen (born 2 July 1966) is a Danish film audio engineer and composer. He heads the department of sound design at the National Film School of Denmark.

Eidnes Andersen got a degree from the National Film School of Denmark, and has been sound designer on more than 80 films. He has worked with Lars von Trier on e.g. Dancer in the Dark, Breaking the Waves, Manderlay, and Antichrist. For his sound in Antichrist, Eidnes Andersen received a Bodil Special Award.

As a score composer, Eidnes Andersen has credit for more than 20 titles including von Triers Antichrist, Thomas Vinterberg's Submarino, and Per Fly's The Woman That Dreamed About a Man.

Filmography

References

External links

Danish film score composers
1966 births
Living people
Place of birth missing (living people)
Bodil Special Award recipients

redpajama_set_name: RedPajamaWikipedia


text:
#include <cetty/handler/codec/http/HttpPackage.h>

namespace cetty {
namespace handler {
namespace codec {
namespace http {

class HttpPackageEmptyVisitor : public boost::static_visitor<bool> {
public:
    bool operator()(const HttpRequestPtr& value) const { return !!value; }
    bool operator()(const HttpResponsePtr& value) const { return !!value; }
    bool operator()(const HttpChunkPtr& value) const { return !!value; }
    bool operator()(const HttpChunkTrailerPtr& value) const { return !!value; }

    template <typename T>
    bool operator()(const T& t) const { return false; }
};

HttpPackage::operator bool() const {
    static HttpPackageEmptyVisitor visitor;
    return variant.apply_visitor(visitor);
}

class HttpPackageHeadersVisitor : public boost::static_visitor<HttpHeaders*> {
public:
    HttpHeaders* operator()(const HttpRequestPtr& value) {
        return &(value->headers());
    }
    HttpHeaders* operator()(const HttpResponsePtr& value) {
        return &(value->headers());
    }
    HttpHeaders* operator()(const HttpChunkTrailerPtr& value) {
        return &(value->headers());
    }

    template <typename T>
    HttpHeaders* operator()(const T& t) { return NULL; }
};

HttpHeaders* HttpPackage::headers() {
    static HttpPackageHeadersVisitor visitor;
    return variant.apply_visitor(visitor);
}

class HttpPackageContentLengthVisitor : public boost::static_visitor<int> {
public:
    int operator()(const HttpRequestPtr& value, int defaultValue) const {
        return value->contentLength(defaultValue);
    }
    int operator()(const HttpResponsePtr& value, int defaultValue) const {
        return value->contentLength(defaultValue);
    }

    template <typename T>
    int operator()(const T& t, int defaultValue) const { return defaultValue; }
};

int HttpPackage::contentLength(int defaultValue) const {
    static HttpPackageContentLengthVisitor visitor;
    boost::variant<int> value(defaultValue);
    return boost::apply_visitor(visitor,
                                variant,
                                value);
}

class HttpPackage100ContinueExpectedVisitor : public boost::static_visitor<bool> {
public:
    bool operator()(const HttpRequestPtr& value) const {
        return value->is100ContinueExpected();
    }

    template <typename T>
    bool operator()(const T& t) const { return false; }
};

bool HttpPackage::is100ContinueExpected() const {
    static HttpPackage100ContinueExpectedVisitor visitor;
    return variant.apply_visitor(visitor);
}

class HttpPackageTransferEncodingVisitor
        : public boost::static_visitor<const HttpTransferEncoding&> {
public:
    const HttpTransferEncoding& operator()(const HttpRequestPtr& value) const {
        return value->transferEncoding();
    }
    const HttpTransferEncoding& operator()(const HttpResponsePtr& value) const {
        return value->transferEncoding();
    }

    template <typename T>
    const HttpTransferEncoding& operator()(const T& t) const {
        return HttpTransferEncoding::SINGLE;
    }
};

const HttpTransferEncoding& HttpPackage::transferEncoding() const {
    static HttpPackageTransferEncodingVisitor visitor;
    return variant.apply_visitor(visitor);
}

class HttpPackageSetTransferEncodingVisitor
        : public boost::static_visitor<void> {
public:
    void operator()(const HttpRequestPtr& value,
                    const HttpTransferEncoding& te) const {
        value->setTransferEncoding(te);
    }
    void operator()(const HttpResponsePtr& value,
                    const HttpTransferEncoding& te) const {
        value->setTransferEncoding(te);
    }

    template <typename T>
    void operator()(const T& t, const HttpTransferEncoding& te) const {}
};

void HttpPackage::setTransferEncoding(const HttpTransferEncoding& te) {
    static HttpPackageSetTransferEncodingVisitor visitor;
    boost::variant<HttpTransferEncoding> transferEncoding(te);
    boost::apply_visitor(visitor,
                         variant,
                         transferEncoding);
}

class HttpPackageSetContentVisitor : public boost::static_visitor<> {
public:
    void operator()(const HttpRequestPtr& value,
                    const ChannelBufferPtr& content) {
        return value->setContent(content);
    }
    void operator()(const HttpResponsePtr& value,
                    const ChannelBufferPtr& content) {
        return value->setContent(content);
    }
    void operator()(const HttpChunkPtr& value,
                    const ChannelBufferPtr& content) {
        return value->setContent(content);
    }
    void operator()(const HttpChunkTrailerPtr& value,
                    const ChannelBufferPtr& content) {
        return value->setContent(content);
    }

    template <typename T>
    void operator()(const T& t, const ChannelBufferPtr& content) {}
};

void HttpPackage::setContent(const ChannelBufferPtr& content) {
    static HttpPackageSetContentVisitor visitor;
    boost::variant<ChannelBufferPtr> buffer(content);
    boost::apply_visitor(visitor,
                         variant,
                         buffer);
}

}
}
}
}

redpajama_set_name: RedPajamaGithub


text:
class DatasetsController < ApplicationController
  layout false, only: %i[edit clone not_found]
  format 'js', only: %i(edit :clone)

  before_action :authenticate_user!, only: %i[download clone]
  before_action :find_dataset, only: %i(validate edit download clone)

  # GET index
  def index
    @datasets = Dataset.all

    render layout: 'map'
  end

  # GET edit.js
  def edit
    @dataset_edit_form = DatasetEditForm.new(
      @dataset.editable_attributes.as_json
    )

    @dataset_clones = policy_scope(Dataset).clones(@dataset, current_user)
  end

  # GET show.json
  def show
    dataset = Dataset.find_by(geo_id: params[:id], user: User.robot)

    respond_to do |format|
      format.json { render json: dataset }
      format.html { render 'datasets/index', layout: 'map'}
    end
  end

  # GET not_found.js
  def not_found
    @geo_id = params[:geo_id]
  end

  # GET search.json
  def search
    results = Dataset.fuzzy_search(params[:query], params[:country])
      .map { |d| { id: d.geo_id, name: d.name, group: I18n.t("groups.#{d.group}") } }
      .uniq
    render json: results
  end

  # POST download
  def download
    @dataset_downloader = DatasetDownloader.new(@dataset)

    authorize @dataset

    begin
      send_data @dataset_downloader.download,
        filename: @dataset_downloader.zip_filename
    rescue Refinery::IncalculableGraphError,
           Refinery::FailedValidationError,
           Atlas::QueryError,
           ArgumentError => error
      render json: { error: error }
    ensure
      @dataset_downloader.prune!
    end
  end

  # POST clone
  def clone
    authorize @dataset

    @cloned_dataset = DatasetCloner.clone!(@dataset, current_user)
  end

  # Renders an HTML partial containing information about the requested file.
  #
  # This requires the interface element key so that we can verify that the requested file really is
  # one of the files for which history available.
  #
  # GET /files/:interface_element_key/*file_key
  def git_file_info
    request.format = 'html'

    @dataset = Dataset.find_by!(geo_id: params[:id])
    element = InterfaceElement.find(params[:interface_element_key])

    authorize(@dataset)

    raise ActiveRecord::RecordNotFound, "Couldn't find InterfaceElement" unless element

    files = element.groups
      .select { |group| group.type == :files && group.paths.present? }
      .flat_map { |group| GitFiles.glob(@dataset.atlas_dataset, group.paths) }

    @file = files.find { |entry| entry.relative_path.to_s == params[:file_key] }

    raise ActiveRecord::RecordNotFound, "Couldn't find file" unless @file

    respond_to do |format|
      format.html { render layout: nil }
    end
  end
end


Oh and by the way, NICE BIKE.
It's still running badly, but re-doing the points has helped a lot, and the flat-spot's not half as bad as it was, plus it starts on the button too, so we're getting there. Now I have a jerky misfire from 1,000 up to 4,000, but only under light load, if I nail it, it's fine, so I'll put that out here to the knowledgeable ones and see if this situation rings any bells. As it seems like all four pots are missing (as if you were twatting around with the kill switch really quickly).
Given that 2 pots are firing together, I'm leaning towards the coil-to-ht-lead connections, as I've had the cam cover off and probably disturbed a connection.
Are the HT leads permanently attached to the coil at the coil end? Looks like they're glued in.
HT leads and coils are one piece. Check your wiring connections ?
and Points / condensor wiring.


text:
I Couldn't Be Your Friend
by Tegan and Sara
Album: Heartthrob (2013)
This was originally a completely different song. Tegan explained to Under The Radar: "We have a big panel of people whose advice we'll consider on songs, like my mom, and our producer, and our manager, our A&R friends, and music collaborators, and this was a song that nobody had originally picked except for our A&R and our art director, Emy [Storey]. They both really liked just one specific part of it, which happened to be the chorus in the original version. This was, like, a re-do. I just become obsessed with the idea that I could make it a better song, so I'm really excited that it made the record."
Sara co-wrote the chorus with Tegan. "It's definitely one of the really poppy ones on the record," said Tegan to Under The Radar. "I think that the [idea] behind it is really dark and depressing, too, which is exciting because it is so poppy. I like the juxtaposition of really depressing lyrics with a really poppy, bright production."
This is one of eight tracks on Hearthrob that was produced by Greg Kurstin, who has also worked with such pop acts as Lily Allen and Kesha. "I hate stereotypes," Tegan told UK newspaper The Guardian, "but I had this horrible fear that because he'd made all these pop records, the process wouldn't feel so creative ... so organic or emotional. But the album we've made is just as wild and funny as any of our records."
"We had lunch with him," Sara continued, "and he said to us that people think that pop music is contrived and simplistic, but it can be nothing like that ... and I came out of the restaurant thinking 'this sounds great!'"
More songs from Tegan and Sara
Lyrics to I Couldn't Be Your Friend
Hip To Be SquareHuey Lewis & the News
Members of the San Francisco 49ers, including Dwight Clark, Joe Montana and Ronnie Lott, sang backup on "Hip to Be Square" by Huey Lewis and the News.
Dust In The WindKansas
The philosophical Kansas song "Dust In The Wind" is inspired by a line of Native American poetry: "For all we are is dust in the wind."
RhiannonFleetwood Mac
"Rhiannon" is a Welch goddess. Stevie Nicks wrote the song, and it was a huge influence on her image, inspiring her flowing shawls and black outfits she began wearing on stage.
Cradle Of LoveBilly Idol
When singing "Cradle Of Love," Billy Idol typically changes a line to, "This song is so cheesy."
Bad RomanceLady Gaga
The French part in Lady Gaga's "Bad Romance" translates to: "I want your love and I want your revenge."
Rush: Album by Album - A Conversation With Martin PopoffSong Writing
A talk with Martin Popoff about his latest book on Rush and how he assessed the thousands of albums he reviewed.
P.F. SloanSongwriter Interviews
P.F. was a teenager writing hits and playing on tracks for Jan & Dean when he wrote a #1 hit that got him blackballed.
Dar WilliamsSongwriter Interviews
A popular contemporary folk singer, Williams still remembers the sticky note that changed her life in college.
Janet JacksonFact or Fiction
Was Janet secretly married at 18? Did she gain 60 pounds for a movie role that went to Mariah Carey? See what you know about Ms. Jackson.
Reverend Horton HeatSongwriter Interviews
The Reverend rants on psychobilly and the egghead academics he bashes in one of his more popular songs.
Gary LewisSongwriter Interviews
Gary Lewis and the Playboys had seven Top 10 hits despite competition from The Beatles. Gary talks about the hits, his famous father, and getting drafted.


text:
You are here: Home / Gear Reviews / Performance Gear Reviews / Six Moon Designs Lunar Solo Review
by Mark Wetherington on November 9, 2019 New Features, Performance Gear Reviews
Enjoy this free preview of Members-only content.
Login or Subscribe to see it all.
The Six Moon Designs Lunar Solo is a one-person, single-wall, three-season, trekking pole supported shelter. It weighs 26 oz (737 g), has an MSRP of $230, and is reasonably considered an entry-level shelter for backpackers on a budget who'd like to experiment with a non-traditional, lightweight shelter.
Photo: Six Moon Designs
If you browse the likes of Reddit and YouTube, you'll note that the Six Moon Designs Lunar Solo is a somewhat popular shelter in the lightweight hiking community. Its relatively light weight and modest price makes it an appealing option for thru-hikers or backpackers looking to move away from traditional double-wall tents and drop some weight from their pack without spending a lot of money.
Its design attempts to check all the boxes backpackers are looking for: ventilation, bug protection, shelter from the elements, minimal weight, and livability. Its silicone-coated polyester canopy fabric requires seam sealing to be completely waterproof, which is a service available from Six Moon Designs for an additional fee of $30.
Receiving accolades from Backpacker Magazine, The Trek, ISPO, and Garage Grown Gear, this is a shelter that has been on the market for several years, seen various upgrades during that time, and is one of the flagship pieces from Six Moon Designs. This review describes the most recent version of the shelter (a model that was shipped to us by Six Moon Designs in July 2019).
Single-entry (side)
Asymmetrical pyramid shape
Apex vent
Trekking pole supported (or optional straight pole)
Interior pockets for organization
Large mesh door for ventilation
Floor design minimizes tension and helps prevent punctures
Total weight, excluding stakes or optional pole: 26 oz claimed (737 g), 26.2 oz measured (742 g)
Material: Silicone coated polyester - 20D canopy and 40D floor
Packed size: 11 in x 4.5 in (28 cm x 11 cm)
Floor area: 26.25 sq ft (2.4 sq m)
Vestibule: 8.5 sq ft (0.8 sq m)
Apex: 48 in (122 cm)
Stakes needed: 6 (min), 8 (max)
Stakes included: 0 (I used six MSR Groundhogs and two Nemo Airpins for the optional guylines during testing) - here's why a lightweight Y-stake like the MSR Groundhog and Groundhog Mini offers the best tent stake holding power for its weight and size)
An optional 49 in (124 cm) pole is available in carbon fiber (1.8 oz / 51 g) or aluminum (3.2 oz / 90 g)
Review Context
I've primarily used an MSR Hubba for three-season backpacking and occasionally used a tarp or tarp with a bivy sack for fast-and-light trips or trips where the weather forecast was favorable for a minimalist shelter. I've used a Black Diamond Firstlight for winter trips and ski touring. This test was my first experience with a trekking pole supported shelter and a pyramidal design. My experience with single-wall shelters was limited to the Firstlight, which I used in temperatures below freezing, with snow being the only precipitation. At an affordable $230 and appealingly low weight of 26 oz (740 g), I was eager to see how this shelter performed during summer conditions in the Northern Rockies.
Field testing the Six Moon Designs Lunar Solo.
My first excursion with the Six Moon Designs Lunar Solo, a five-night trip in Glacier National Park, provided perfect conditions to test its wind and weather resistance. Three of the five nights featured rain showers, including some heavy downpours that lasted nearly the entire night. Two separate afternoon thunderstorms forced me inside to seek shelter and wait for the storms to pass before emerging during breaks in the storms to cook dinner. On one particularly stormy evening, I was in the tent from approximately 3 p.m. to 5:30 p.m., then from 6:15 p.m. until 8 a.m. the next morning. I was able to spend a lot of time evaluating the livability and spaciousness of the tent on that trip.
Additional testing included a short trip to Yellowstone National Park, a trip in the subalpine high-country of the Bitterroot National Forest, and a three-day trek in the Pioneer Mountains of Montana.
In the Bitterroot National Forest, I experienced pitching the tent in less-than-ideal conditions due to rocky ground. The Pioneer Mountains had near-constant evening and nighttime winds in the 10-15 mph range (16-24 kph) with gusts up to 25 mph (40 kph).
In addition to my experience as described above, some of Ryan Jordan's (Backpacking Light's Publisher) experiences are described herein as well, since Ryan used the shelter in more inclement environments (higher winds and snow).
Member's Only Content
Login as a Premium or Unlimited Member to read the comprehensive Performance Assessment and Author Commentary sections of this review:
Performance Assesment: Wind & Weather Resistance, Ease of Use, Condensation Management, Durability, Livability, and Compressability & Weight
Product Strengths & Limitations
Compared To: Tarptent Aeon Li, ZPacks Plexamid, Six Moon Designs Skyscape Trekker, Durston X-Mid 1, 3F UL Gear Lanshan 2, Tarptent ProTrail
Member's only version is 4800 words and includes 17 photographs.
Review Rating: Average
In 2005, Backpacking Light awarded the Six Moon Designs Lunar solo with a best-in-class award at Outdoor Retailer. At that time, we wrote:
The Six Moon Designs Lunar Solo requires only a single trekking pole for setup, with good ventilation, insect protection, exceptional views, room to stretch out - and sit up - and a cavernous vestibule for storing gear or cooking a meal, all in a 23-ounce package unmatched by any solo tent on the market. - Backpacking Light, August 12, 2005
Not much has changed about what we wrote about the Lunar Solo in terms of its overall design and features, but the Lunar Solo has certainly changed:
It's now heavier by a few ounces;
It's made with a silpoly canopy instead of a silnylon canopy (you can debate that choice in the forums below);
Its manufacturing country of origin has changed from the US to China;
Its quality of materials and construction has decreased.
Even with these compromises, I wouldn't hesitate to recommend this tent to backpackers looking for a lightweight, economical, single-wall shelter. That the Lunar Solo is one of the cheaper solo tent options on the US market in this weight range makes it worth evaluating. While you could certainly spend 1.5-2.0 times as much on higher quality and lighter shelters, if you are looking to build up your lightweight kit from scratch, the Lunar Solo may be a better initial investment. The money you will save can easily buy you a great three-season sleeping bag, like the REI Magma 30, for example.
The Lunar Solo, however, misses some essential performance marks that we could have overlooked when it was first introduced in the 2000s, but now suffers from comparison to more competition. Improvements to the Lunar Solo could be made in the following areas:
Engineering redesign of panel geometry that could result in a tighter pitch and better wind performance)
Improvement in manufacturing quality
Buy the Six Moon Designs Lunar Solo here.
The Tarptent Aeon Li, which is a (kind of) similar half-pyramid design, executed in Dyneema Composite Fabrics (DCF) and carbon fiber. If you like the Lunar Solo's design but have some more cash to spare, read Ryan's Tarptent Aeon Li review here.
For more interior floor space and weather resistance, read our review of the Hyperlite Mountain Gear Dirigo 2, another side-entry, trekking-pole supported, single- (hybrid-) wall shelter.
Product(s) discussed in this article may have been purchased by the author(s) from a retailer or direct from a manufacturer, or by Backpacking Light for the author. The purchase price may have been discounted as a result of our industry professional status with the seller. However, these discounts came with no obligation to provide media coverage or a product review. Backpacking Light does not accept compensation or donated/discounted products in exchange for guaranteed media placement or product review coverage.
Some (but not all) of the links in this review may be "affiliate" links. If you click on one of these links and visit one of our affiliate partners (usually a retailer site), and subsequently place an order with that retailer, we receive a small commission. These commissions help us provide authors with honoraria, fund our editorial projects, podcasts, instructional webinars, and more, and we appreciate it a lot! Thank you for supporting Backpacking Light!
Read about our approach to journalistic integrity, product reviews, and affiliate marketing here.
--- end of free preview ---
To read the rest of the article, please Login or Subscribe.
Access to the rest of the content on this page
requires either a Premium or Unlimited Membership.
Your membership fees have helped sustain the creation and curation of quality information, education, and community at backpackinglight.com since 2001.
Get ultralight backpacking skills, gear info, philosophy, news, and more.
Today's Gear Deals
Find out what gear our guides recommend if you want lightweight gear that is durable and versatile.


This weekend, I went on a quilt retreat with some friends to Sturbridge Quilting and Sewing Center.
The retreat started with a little hiccup.
I kind of need these to sew (and drive and see in general). I had a 3-year-outdated pair of glasses with me, so I managed to get through the weekend, but guess where I'll be this morning as soon as the office opens?
My quilt was on the right (I made two identical ones). I used Moda Dandi Annie and Grunge. My friend is taking my class and made the one on the left.
Saturday I made a quilt for my daughter-in-law's mother.
The pattern is from On A Roll and the fabric is a Moda line from 2008ish.
While making this one, I experimented with an alternate corner technique.
When you see this absolutely everywhere next year, remember that you saw it here first. I'm a trendsetter.
Sunday I finished two very old (circa 2000) identical UFOs.
This quilt was from Open a Can of Worms and the block fabric is from "I have absolutely no idea." The setting fabrics and borders were purchased from Sturbridge Quilting and Sewing Center and I also have no idea what lines they were. I wanted this eighteen year old project finished and I bought whatever would make it so.
Quilt retreats are about friends, and we enjoyed each other thoroughly.
Quilt retreats are also about learning about new gadgets from the other retreat attendees. My two great finds for the weekend were a storage container for small quilt squares and a fine-mist spray bottles for pressing.
I tried to schedule another retreat before I left, but I don't have a spare weekend until June and I couldn't make it happen. I can't wait to go again!
Do you have a quilt retreat scheduled on your calendar for 2019? What is your favorite part of quilt retreats?
Sounds like you had a very productive and enjoyable quilt retreat!
I'm totally jealous that you were sewing with Gina this weekend. Love those ladies. Always a lot of laughs. Luckily, I have a retreat in Maine scheduled for MLK weekend and another retreat in Maine with my new quilt guild.
Wow! You are on a roll. I hope you got your glasses repaired or new ones!
Wow - getting through the old but pretty ones and having sewing fun is even better with friends. I went and bought myself one of those misty sprays a while back - it has been so useful for all sorts - even misting the orchids rather than waste the water! Orchids take a lot of neglect with me so they are well happy now! LOL! And oops with the glasses. I never get rid of my previous pair or the one before that. Then it's just a matter of rotation. The oldest stays in the house but the middle one stays in the car for the just in case the "oops I sat on my specs again" happens!


The new US Congress convened on Thursday with Democrats controlling the House of Representatives, marking a dramatic power shift on Capitol Hill less than two years before President Donald Trump's 2020 re-election bid.
The opening ushered in a new era of divided government in Washington, with Democrats intent on checking the Republican's turbulent presidency nearly two years into his term.
The clerk of the House rapped the gavel to signal the chamber was into session, with 235 Democrats and 199 Republicans reciting the Pledge of Allegiance and being sworn in, ahead of a vote to elect Nancy Pelosi as speaker of the House.
One seat in the 435-member House remains in dispute two months after the election.
Several beaming new lawmakers were seen hugging and shaking hands with veteran members and each other.
Vice President Mike Pence swore in the new members of the US Senate, where 53 Republicans hold the majority over 45 Democrats and two independents who align with Democrats.
Pelosi was poised to take over as speaker for the second time in her career, a remarkable revival for a battle-tested politician who is so far the only woman to head the House.
Her first task will be to help end a partial federal government shutdown over Trump's insistence that lawmakers fund a US-Mexico border wall.
In excerpts of the speech she delivers to the House later Thursday, Pelosi vowed the new Congress would be "bipartisan and unifying" and "will debate and advance good ideas no matter where they come from." "In that spirit, Democrats will be offering the Senate Republican appropriations legislation to re-open government later today — to meet the needs of the American people, and to protect our borders," she said.
But such cooperation across the political aisle appeared unlikely as Trump continued to dig in over his demand that Congress approve a $5 billion plan to construct a border wall aimed at thwarting illegal immigration — with Democrats unlikely to appease him.
After saying he remained "ready and willing to work with Democrats" late Wednesday, Trump lashed out Thursday. "The Shutdown is only because of the 2020 Presidential Election," he tweeted.
Indeed, progressives will be eager to push back with greater effect against an administration they believe has overstepped its authority and abused power in the nearly two years since Trump's inauguration.
They will have that opportunity, as congressional panels will be led by chairmen who have pledged to probe topics such as Trump's income taxes, his firing of attorney general Jeff Sessions, and the president's ties to Russian leader Vladimir Putin.
That expected barrage of investigations could bog down a White House already besieged by Special Counsel Robert Mueller's Russia collusion probe.
But while the "blue wave" swept dozens of House Republicans out of Congress last November, Trump's party managed to modestly expand its majority in the Senate, meaning Washington gridlock is almost certain to deepen.
Among the first tasks of the 116th Congress will be ending the shutdown, now in its 13th day and which has left one quarter of federal agencies shuttered due to lapsed funding.
But compromise was still elusive.
"Democrats will have to get serious about border security so that a government funding agreement may be reached that can pass the House, earn 60 votes here in the Senate, and receive a presidential signature," Senate Majority Leader Mitch McConnell said.
Pelosi will preside over the most diverse Congress in history.
One hundred House freshmen took the oath of office, including trailblasers like New York's Alexandria Ocasio-Cortez, who at 29 is the youngest woman ever elected to Congress.
The first two Native American women and first two Muslim women were also elected.
"It's a new day in America," tweeted Ilhan Omar, a Somali refugee elected from Minnesota.
The House and Senate will each have a record number of female members.
The House's number two Republican, Steve Scalise, said he would be watching closely to see how Pelosi and the Democrats will handle the changing of the political guard.
"She's been very clear about what her agenda is, and it's far left of centre," Scalise told AFP. Hovering in the background in Washington will be the threat of impeachment.
While it is almost certain that some Democrats will introduce proceedings to remove Trump from office, Pelosi has downplayed the idea.


text:
Colin Powell Is Right: Our Foreign Policy Is in Shambles
Charles Haynes/Flickr
On Sunday, Fareed Zakaria interviewed two former secretaries of state: Colin Powell and Madeline Albright. The moment that stood out was when the former called out his colleagues in the Republican Party.
"The Republican party has got to get a grip on itself," Former Secy. of State Colin Powell on the state of the current GOP. "Republican leaders and members of the Congress… are holding back because they're terrified of what will happen [to] any one of them if they speak out." pic.twitter.com/zkCScy8uA1
— CNN (@CNN) October 6, 2019
Powell defined himself as a "moderate Republican who believes that we should have a strong foreign policy, a strong defense policy, but we have to look out for our people." While Powell sacrificed his ability to be a bipartisan leader by kowtowing to the Bush administration on the invasion of Iraq—something he later called a lasting blot on his record—he still maintains some gravitas with the GOP. That is why his statement on Sunday should carry some weight.
In calling on Republican members of Congress to "get a grip" and say something when they see things that aren't right, Powell stated that our foreign policy is in shambles. That is a major problem for a party that has typically identified itself with the idea that the primary purpose of the federal government is defense.
Regardless of what party you belong to, it is impossible to argue with Powell's point that our foreign policy is in shambles. The latest news on two fronts put an exclamation point on that reality. As Martin Longman has already noted, the president is pulling U.S. troops out of northern Syria, while Turkey begins a military offensive in the area. In doing so, he is basically abandoning our longtime allies, the Kurds.
But the problem with the Trump administration isn't merely that the president makes bad decisions. He also creates chaos in the way he makes decisions. For example, at this point, Fox News is reporting that the announcement about Syria "completely blindsided" the Pentagon. That appears to be true, given that several congressional Republicans were hesitant to believe the news. Notice that on Monday morning, both Senators Lindsey Graham and Marco Rubio tweeted that "if press reports are true." But the White House had already issued a public statement on Sunday night.
I don't know all the details regarding President Trump's decision in northern Syria. In process of setting up phone call with Secretary Pompeo.
If press reports are accurate this is a disaster in the making.
— Lindsey Graham (@LindseyGrahamSC) October 7, 2019
If reports about US retreat in #Syria are accurate, the Trump administration has made a grave mistake that will have implications far beyond Syria.
— Marco Rubio (@marcorubio) October 7, 2019
It appears that Trump didn't consult with the Pentagon or Republican leaders in Congress, but made an impulsive decision immediately after a telephone call with Turkish Prime Minister Erdogan.
The other place our foreign policy is in shambles is something many of us could have predicted when Trump embraced Kim Jong Un. Days before negotiations were to begin again in Stockholm last week, the North Korean dictator tested a new submarine-launched ballistic missile. According to the Washington Post, the talks didn't last long.
North Korea on Sunday gave the Trump administration until the end of the year to change its approach to nuclear negotiations if it wants the talks to continue…
The statement came a day after the sides met in Stockholm to restart the talks after an eight-month stalemate — and then disagreed publicly over how they went. The Trump administration described the working-level talks as "good discussions." The Foreign Ministry called them "sickening."…
"Ahead of what is likely to be a bumpy election campaign for Trump in 2020, it appears that the North may be hoping that the combined effect of the ticking clock and American fears of long-range missile and nuclear tests in the year ahead will stimulate a significant shift in U.S. strategy at the eleventh hour," O'Carroll [chief executive of the Korea Risk Group] said in an analysis posted on the NK Pro website.
The president's phone call with the Ukrainian president, along with his suggestion that China should investigate the Biden's, has broadcast to every country around the globe that his foreign policy has been captured by his own political interests. It is hardly surprising that other leaders will step up to the plate to capitalize on that reality in pursuit of their own interests.
Meanwhile, we have the attorney general traveling the globe to pressure our allies into signing on to conspiracy theories to undermine our intelligence services and the secretary of state is engaged in yet another probe of Hillary Clinton's emails.
Colin Powell is right. Our foreign policy is in shambles, primarily because this president is incapable of assessing what is in our country's national interests due to his obsession with his own personal interests. To the extent that congressional Republicans stand by while that continues, they will demonstrate that they join the president in caring more about their own power than they do about a strong foreign policy. The result will be that yet another pillar of the GOP will go up in flames.
Nancy LeTourneau
Beyond Our Crises at Home, A Dangerous World Looms
by Markos Kounalakis
Jobs, pandemics, peace: Foreign policy is increasingly important to everyday life in the United ...read more
The Only Place In the World Not Yet Rocked By the Virus
Antarctica may look barren, but it is free of the disease—for now.
The Whitet House/Flickr
There's No Way Trump Didn't Know About the Russian Bounties
by James Bruno
I worked at the State Department for decades. The president's story doesn't pass the laugh test.


Fans of "The Five" know that co-host Dana Perino previously served as the White House press secretary under George W. Bush. And you're probably all well-acquainted with her four-legged friend — and America's dog — Jasper. But you may not know which fellow Fox News host led her to find Jasper or what happened to Dana in the infamous Iraq shoe-throw.
Fox News Insider caught up with Dana, and here are five fun stories she shared with us.


When I first began doing biblical counseling, me and those like me were known as nouthetic counselors. Nouthetic is a word that means to admonish or instruct with an eye toward change. The problem with the word, is that no one outside of biblical counseling had a clue what it meant! So, we adopted the user friendly term of biblical counselor instead.
I've been thinking about the importance of the word noutheteo over the past few days, and I once again am reminded of its importance. Noutheteo is what sets me and my colleagues apart from therapists and other forms of spiritual counselors. Noutheteo has the particular emphasis on internal change that leads to changes in outward living.
This understanding is very important to me, and it becomes crucial to the women and men we meet with in our ministry. So many of our counselees come looking for changes in their marriages, in their relationships with their kids and parents; and they are initially wanting us to provide steps or methods they can use to make their circumstances better. Ironically, most have already tried that through other counseling or therapeutic relationships. They have come to us because what they learned lasted as long as their willpower to keep doing it.
With nouthetic counseling they come to understand that when the goal is merely external change or alteration of circumstances, their aim is wrong and they will continue to miss the mark. I have seen this over and over in marriage counseling cases where one spouse grasps the idea that the goal must be to glorify God by how they live their life, and the other spouse wants to fix the visible problem with God's help. There is a distinct difference in how the counseling proceeds in such situations. The spouse that understands that nouthetic counseling is a complete and total overhaul of the inner man makes tremendous progress! Homework is welcomed and thoughtfully done. The discussion in the session is Christ-centered and Spirit-led, with the counselee experiencing breakthrough after breakthrough. It is a joy to meet with such people because their problems are no longer their only focus; what God is doing in their problems is more important. They understand and are amazed at how He is using their trials and disagreements to reveal the contents of their heart and shape and conform them into women and men who desire to love, honor, serve, and worship Him more than anything else in life.
You don't get this result with any other kind of counseling.


What did you think of Writing Decimals in Words and their Expanded Notation ?
Expanded form is a way of writing a number that shows the sum of values of each digit of a number.
Consider the decimal number 68.549.
Now let's write 68.549 in words.
To write a decimal in words, first, read the digits to the left of the decimal point as a whole number.
Then write decimal point as 'and'.
Now write the digits to the right of the decimal point as a whole number and add the place value of the last digit at the end.
So, 68.549 is written as Sixty eight and five hundred forty nine thousandths in words.


Alan Carr throws open the doors to a brand new series where celebrity guests, stand-up comedy, variety acts and live music are all on the bill. Filmed at a social club in front of a specially invited audience, Happy Hour is Alan's own club night packed full of big laughs, amazing audience surprises and exclusive performances. Brought together by Alan's trademark humour and charm, it's the best night out you can have, without ever leaving home.


Pasta with pan-fried mushrooms and garlic is already a crowd-pleasing combination. Add in the sweet-savoury nutty flavours of Pariani hazelnut oil and you've got an irresistible meal that's effortless in its execution.
Melt the butter in a large, heavy bottomed pan. When small bubbles appear around the edges of the butter, add the mushrooms and fry on a high heat for around 30 seconds.
Add just enough water to cover the mushrooms and cover the pan. Cook for 5 mins or until the mushrooms are soft.
Remove the lid and reduce the liquid.
Add the garlic and season with salt & pepper. Roughly stir then remove from the heat and set aside.
Cook the pasta until al dente. Drain and add straight to the pan with the mushrooms.
Add the chopped parsley and hazelnut oil. Stir to combine.
Serve immediately with a scattering of chopped hazelnuts, and a sprinkling of parmesan if you like.


よくある質問 2 - What is your greatest strength?
よくある質問 3 - What is your greatest weakness?
よくある質問 4 - Why are you leaving your job?
よくある質問 5 - What You Have Been Doing Since Your Last Job?
もし貴方が前の会社を辞めてからしばらの間が経っていた場合に訊かれる質問です。 理由は様々だと思われますが解答は正直にまた、辞めてから現在まで、ボランティア、フリーランスなどし何かの活動をていた場合、その活動から学んだことを付け加えどう企業に貢献出来るかを説明すると良いでしょう。 サンプル解答は下記の通りです。 * I worked on several freelance projects, while actively job seeking. * I volunteered for a literacy program that assists disadvantaged children. * My aging parents needed a temporary caregiver and I spent time looking after them. * I spent time being a stay-at-home mom and volunteering at my daughter's school. * I took some continuing education classes and seminars.
よくある質問 6 - Is There Anything Else We Should Know About You?
この質問は外資系企業面接の最後に訊かれることの多い質問です。また、面接官に最も強い印象を与えるチャンスでもあります。 この時点では既に面接官にはほとんど貴方の全てを話していると思われますが、ここでもう一言付け加えてさらに強い印象をあたえましょう。いわば裁判の最終弁論の様に面接中に言った貴方のすべてをもう一度まとめて、"なぜ、企業が貴方を採用しなければならないか"を付け加えて下さい。 サンプル解答は下記の通りです。 "You have done a very thorough job of getting at my strengths. We have discussed my writing, presentation, and computer skills, but I haven't had the opportunity to tell you about my persuasive abilities. I was able to convince seven local businesses to sponsor the charity run which I organized for my fraternity, and I successfully placed several stories in the local media about a client during my public relations internship."


What is your role at MK?
How did you find out about MK Decision and what drew you to the company initially?
I was introduced to MK Decision through my coding boot-camp LEARN. Because of my accounting background, MK provided a place to combine my previous knowledge with my new coding skills.
What motivates you to get up and go to work?
I work with a great team of people. This place is run with fun, driven people. I also love to help build something greater than I could achieve on my own.
How would you describe the culture at MK?
MK is full of young professionals who are incredibly respectful of each others ideas and contributions. It is genuinely a pleasure to collaborate with kind, intelligent people.
How has MK Decision helped you in your career development?
MK has given me the opportunity to wear multiple hats and to see the world of technology from many different angles. I am definitely not pigeonholed into one task.
What has been your favorite project while working with MK Decision?
My favorite project has been our Fraudtrack service. I got to experience the world of big data first hand and began an algorithm to sift through applications looking for fraud. I hope this service saves a lot of people from becoming victims of identity theft.
How do you like to balance your life at home and life at work?
When I'm not at work, I am probably watching or reading about baseball and keeping up with the New York Mets. I also enjoy going to the movies and playing video games with my friends.
It is always a fun conversation when someone finds out I am colorblind. It tough to explain to them and it's fun to see the questions they ask. At this point, I think I've heard them all.
What advice do you have for prospective MK candidates?
I would tell them not to be afraid of not knowing the answer to everything. Dive head first into unknown waters and at the end of the day you will feel accomplished.


I met Alex at a gallery opening in Soho. He said he wanted to paint my eyes. And so we spent some time talking and then soon I was sitting in his studio on Prince Street. First is a sketch, then comes a small version painting. He told me wonderful stories of New-York in the 60s and how his career had all begun. A jolly hard painter, a living master with a hint of flirtation. Working ten canvases at a time, his palette and style, the scale and use of space, cinematic crops and subjects are just wonderful-powerful.


text:
import os, sys
import json

from django.db.models import Count
from django.http import HttpResponse, HttpResponseForbidden
from django.http import HttpResponseRedirect
from django.shortcuts import render, get_object_or_404, render_to_response
from django.http import Http404
from django.views.decorators.http import require_POST
from django.template.context import RequestContext
from django.contrib.auth.decorators import login_required
from django.utils.translation import ugettext as _
from django.contrib.syndication.views import Feed
from django.utils.feedgenerator import Atom1Feed
from django.contrib import messages
from django.conf import settings
from django.views.generic.detail import SingleObjectTemplateResponseMixin, BaseDetailView
from django.core.urlresolvers import reverse
from django.contrib.sites.models import Site
from django.core.cache import cache

from entities.models import Entity
from taggit.models import Tag
from actstream import follow, unfollow

from user.models import Profile, Membership
from qa.forms import AnswerForm, QuestionForm
from qa.models import *
from qa.tasks import publish_question_to_facebook, publish_upvote_to_facebook,\
    publish_answer
from qa.mixins import JSONResponseMixin

from polyorg.models import CandidateList

# the order options for the list views
ORDER_OPTIONS = {'date': '-created_at', 'rating': '-rating', 'flagcount': '-flags_count'}
# CBS locality stats
CBS_STATS = json.load(open(os.path.join(settings.STATICFILES_ROOT, 'js/entity_stats.js')))

def need_editors(entity):
   return entity and Membership.objects.filter(entity=entity).count() < settings.MIN_EDITORS_PER_LOCALITY

class JsonpResponse(HttpResponse):
    def __init__(self, data, callback, *args, **kwargs):
        jsonp = "%s(%s)" % (callback, json.dumps(data))
        super(JsonpResponse, self).__init__(
            content=jsonp,
            content_type='application/javascript',
            *args, **kwargs)

def entity_home(request, entity_slug=None, entity_id=None, tags=None,
        template="qa/question_list.html"):
    """
    A home page for an entity including questions and candidates
    """
    if request.user.is_anonymous() and not tags and not request.GET:
        ret = cache.get(entity_home_key(entity_id))
        if ret:
            return ret
    context = RequestContext(request)
    entity = context.get('entity', None)
    if not entity:
        raise Http404(_("Bad Entity"))

    if request.user.is_authenticated() and not request.user.profile.locality:
        messages.error(request,_('Please update your locality in your user profile to use the site'))
        return HttpResponseRedirect(reverse('edit_profile'))

    questions = Question.objects.select_related('author', 'entity').prefetch_related('answers__author').filter(entity=entity, is_deleted=False)

    only_flagged = request.GET.get('filter', False) == 'flagged'
    if only_flagged:
        questions = questions.filter(flags_count__gte = 1)
        order_opt = False
        order = 'flags_count'
    else:
        order_opt = request.GET.get('order', 'rating')
        try:
            order = ORDER_OPTIONS[order_opt]
        except KeyError:
            order = ORDER_OPTIONS['rating']
    questions = questions.order_by(order)

    if tags:
        current_tags = Tag.objects.filter(slug__in=tags.split(','))
        questions = questions.filter(tags__in=current_tags)
    else:
        current_tags = None

    if entity:
        tags = Tag.objects.filter(qa_taggedquestion_items__content_object__entity=entity,\
            qa_taggedquestion_items__content_object__is_deleted=False).\
                annotate(num_times=Count('qa_taggedquestion_items')).\
                order_by("-num_times","slug")
        users_count = Membership.objects.filter(entity=entity).count()
    else:
        users_count = Profile.objects.count()

    memberships = entity.membership_set.filter(can_answer=True)
    candidate_lists_ids = memberships.values_list('member_of', flat=True).distinct()
    candidate_lists = CandidateList.objects.filter(pk=candidate_lists_ids)

    list_id = request.GET.get('list', default='special')
    if list_id == 'special':
        candidate_list = None
        candidate_ids = memberships.filter(is_special=True).values_list('user', flat=True)
    else:
        try:
            candidate_list = candidate_lists.get(pk=list_id)
        except (CandidateList.DoesNotExist, ValueError):
            messages.error(request, _('No such candidate list: ' + list_id))
            return HttpResponseRedirect(request.path)
        candidate_ids = memberships.filter(member_of=candidate_list).values_list('user', flat=True)

    candidates = User.objects.filter(id=candidate_ids)
    candidates = candidates.annotate(num_answers=models.Count('answers')).\
                            order_by('-num_answers')

    candidate_lists = candidate_lists.annotate( \
                            num_answers=models.Count('candidates__answers')).\
                            order_by('-num_answers')
    candidate_list = None

    answers_count = Answer.objects.filter(question__entity=entity, question__is_deleted=False).count()

    stats = CBS_STATS.get(entity.code, {"totalpopulation": 0, "numofcouncilman": "", "socioeco": "", "voting":""})

    context.update({ 'tags': tags,
        'questions': questions,
        'by_date': order_opt == 'date',
        'by_rating': order_opt == 'rating',
        'only_flagged': only_flagged,
        'current_tags': current_tags,
        'need_editors': need_editors(entity),
        'candidates': candidates,
        'candidate_list': candidate_list,
        'candidate_lists': candidate_lists,
        'users_count': users_count,
        'answers_count': answers_count,
        'stats': stats,
        })

    ret = render(request, template, context)
    if request.user.is_anonymous() and not tags and not request.GET:
        cache.set('entity_home_%s' % entity_id, ret, timeout = 36000)
    return ret

class QuestionDetail(JSONResponseMixin, SingleObjectTemplateResponseMixin, BaseDetailView):
    model = Question
    template_name = 'qa/question_detail.html'
    context_object_name = 'question'
    slug_field = 'unislug'

    def get_queryset(self, queryset=None):
        if 'entity_id' in self.kwargs:
            return Question.objects.filter(entity__id=self.kwargs['entity_id'])
        elif 'entity_slug' in self.kwargs:
            return Question.objects.filter(entity__slug=self.kwargs['entity_slug'])

    def get_context_data(self, **kwargs):
        user = self.request.user
        question = self.object
        context = super(QuestionDetail, self).get_context_data(**kwargs)
        context['max_length_a_content'] = MAX_LENGTH_A_CONTENT
        context['answers'] = question.answers.filter(is_deleted=False)
        context['entity'] = question.entity
        can_answer = question.can_answer(user)
        context['can_answer'] = can_answer
        if can_answer:
            try:
                user_answer = question.answers.get(author=user)
                context['my_answer_form'] = AnswerForm(instance=user_answer)
                context['my_answer_id'] = user_answer.id
            except question.answers.model.DoesNotExist:
                context['my_answer_form'] = AnswerForm()
        context['can_flag'] = True
        if 'answer' in self.request.GET:
            try:
                answer = Answer.objects.get(pk=self.request.GET['answer'])
                context['fb_message'] = answer.content
            except:
                pass

        supporters = [vote.user for vote in question.upvotes.all()]
        supporters = [question.author] + supporters
        if user in supporters and user != question.author:
            supporters = [user] + [u for u in supporters if u != user]
        context['supporters'] = supporters

        return context

    def render_to_response(self, context):
        # Look for a 'format=json' GET argument
        if self.request.GET.get('format', 'html') == 'json' or self.request.is_ajax():
            data = {
                'question': {
                    'subject': self.object.subject,
                    'content': self.object.content,
                    'author': self.object.author.username
                }
            }

            return JSONResponseMixin.render_to_response(self, data)
        else:
            return SingleObjectTemplateResponseMixin.render_to_response(self, context)

@login_required
def post_answer(request, q_id):
    question = Question.objects.get(id=q_id)

    if not question.can_answer(request.user):
        return HttpResponseForbidden(_("You must be logged in as a candidate to post answers"))

    try:
        # If the user already answered, update his answer
        answer = question.answers.get(author=request.user)
        is_new_answer = False
    except question.answers.model.DoesNotExist:
        answer = Answer(author=request.user, question=question)
        is_new_answer = True
        follow(request.user, question)

    answer.content = request.POST.get("content")

    answer.save()
    publish_answer.delay(answer, send_email=is_new_answer)

    return HttpResponseRedirect(question.get_absolute_url())

def post_question(request, entity_id, slug=None):
    if request.user.is_anonymous():
        messages.error(request, _('Sorry but only connected users can post questions'))
        return HttpResponseRedirect(settings.LOGIN_URL)

    profile = request.user.profile
    entity = Entity.objects.get(pk=entity_id)

    q = slug and get_object_or_404(Question, unislug=slug, entity=entity)

    if request.method == "POST":
        form = QuestionForm(request.user, request.POST, instance=q)
        if form.is_valid():
            if not profile.is_member_of(form.cleaned_data['entity']):
                messages.warning(request, _('Sorry, you may only post questions in your locality'))
                return HttpResponseRedirect(reverse('home_page')) # TODO #453

            ''' carefull when changing a question's history '''
            if not q:
                try:
                    q = Question.objects.get(author=request.user, subject=form.cleaned_data['subject'])
                except:
                    pass
            question = form.save(commit=False)

            if q:
                if q.author != request.user:
                    return HttpResponseForibdden(_("You can only edit your own questions."))
                if q.answers.count():
                    return HttpResponseForbidden(_("Question has been answered, editing disabled."))
                question.id = q.id
                question.created_at = q.created_at

            question.author = request.user
            question.save()
            form.save_m2m()
            if form.cleaned_data.get('facebook_publish', False):
                publish_question_to_facebook.delay(question)
            follow(request.user, question)
            return HttpResponseRedirect(question.get_absolute_url())
    else:
        if q:
            form = QuestionForm(request.user, instance=q)
        else:
            form = QuestionForm(request.user, initial={'entity': entity})

    becoming_editor = not profile.is_editor and\
                      need_editors(entity)
    context = RequestContext(request, {"form": form,
                                       "entity": entity,
                                       "max_length_q_subject": MAX_LENGTH_Q_SUBJECT,
                                       "slug": slug,
                                       "becoming_editor": becoming_editor,
                                      })
    return render(request, "qa/post_question.html", context)

def upvote_question(request, q_id):
    if request.user.is_anonymous():
        messages.error(request, _('Sorry but only connected users can upvote questions'))
        return HttpResponseRedirect(settings.LOGIN_URL)

    if request.method == "POST":
        q = get_object_or_404(Question, id=q_id)
        user = request.user
        if not user.profile.is_member_of(q.entity):
            return HttpResponseForbidden(_('You may only support questions in your locality'))
        if q.author == user:
            return HttpResponseForbidden(_("You may not support your own question"))
        if user.upvotes.filter(question=q):
            return HttpResponseForbidden(_("You already upvoted this question"))
        else:
            upvote = QuestionUpvote.objects.create(question=q, user=user)
            #TODO: use signals so the next line won't be necesary
            new_count = change_rating(q, 1)
            follow(request.user, q)

            publish_upvote_to_facebook.delay(upvote)
            return HttpResponse(new_count)
    else:
        return HttpResponseForbidden(_("Use POST to upvote a question"))

@login_required
def downvote_question(request, q_id):
    if request.method == "POST":
        q = get_object_or_404(Question, id=q_id)
        user = request.user
        if q.author == user:
            return HttpResponseForbidden(_("Cannot downvote your own question"))
        elif not user.upvotes.filter(question=q):
            return HttpResponseForbidden(_("You already downvoted this question"))
        else:
            QuestionUpvote.objects.filter(question=q, user=user).delete()
            new_count = change_rating(q, -1)
            unfollow(request.user, q)

            # TODO: publish_downvote_to_facebook.delay(upvote)
            return HttpResponse(new_count)
    else:
        return HttpResponseForbidden(_("Use POST to upvote a question"))

@transaction.commit_on_success
def change_rating(q, change):
    q = Question.objects.get(id=q.id)
    q.rating += change
    q.save()
    return q.rating

class RssQuestionFeed(Feed):
    """Simple feed to get all questions"""
    title = _('OK QA Question Feed')
    link = "/"
    description = _('Questions from OKQA')

    def items(self):
        return Question.objects.order_by('-updated_at')

    def item_title(self, item):
        return item.subject

    def item_description(self, item):
        return item.content

class AtomQuestionFeed(Feed):
    feed_type = Atom1Feed

    def get_object(self, request, entity_id):
        return get_object_or_404(Entity, pk=entity_id)

    def title(self, obj):
        return _("Questions feed for %s") % unicode(obj)

    def subtitle(self, obj):
        # TODO: add a `Site` key to `Entity` so we can use obj
        return _('Brought to you by "%s"') % (Site.objects.get_current().name, )

    def link(self, obj):
        return reverse('entity_home', args=(obj.id, ))

    def item_title(self, item):
        return item.subject

    def item_subtitle(self, item):
        return item.content
    item_description = item_subtitle

    def items(self, obj):
        return Question.objects.filter(is_deleted=False, entity=obj).order_by('-created_at')[:30]

class RssQuestionAnswerFeed(Feed):
    """"Give question, get all answers for that question"""

    def get_object(self, request, q_id):
        return get_object_or_404(Question, pk=q_id)

    def title(self, obj):
        return _('Answers for the question') + ' "%s' % obj.subject + '"'

    def link(self, obj):
        return obj.get_absolute_url()

    def description(self, obj):
        return _('A feed of all answers for the question') + ' "%s' % obj.subject + '"'

    def items(self, obj):
        return Answer.objects.filter(question=obj).order_by('-updated_at')

class AtomQuestionAnswerFeed(RssQuestionAnswerFeed):
    feed_type = Atom1Feed
    subtitle = RssQuestionAnswerFeed.description

''' an interface that returns a `message` and a `redirect` url. '''
@require_POST
def flag_question(request, q_id):
    q = get_object_or_404(Question, id=q_id)
    user = request.user
    tbd = False # to-be-deleted
    ''' permissionssss '''
    if user.is_anonymous():
        ''' first kick anonymous users '''
        messages.error(request, _('Sorry, you have to login to flag questions'))
        redirect = '%s?next=%s' % (settings.LOGIN_URL, q.get_absolute_url())
        return HttpResponseRedirect(redirect, content_type="text/plain")

    elif user == q.author:
        ''' handle authors '''
        if q.answers.filter(is_deleted=False):
            messages.error(request, _('Sorry, can not delete a question with answers'))
        else:
            tbd = True
    elif user.profile.is_editor(q.entity):
        ''' handle editors '''
        tbd = True

    if tbd:
        ''' seems like we have to delete the question '''
        q.delete()
        messages.success(request, _('Question has been removed'))
    else:
        if user.flags.filter(question=q):
            messages.error(request, _('Thanks.  You already reported this question'))
        else:
            ''' raising the flag '''
            flag = QuestionFlag.objects.create(question=q, reporter=user)
            #TODO: use signals so the next line won't be necesary
            q.flagged()
            messages.success(request,
                _('Thank you for flagging the question. One of our editors will look at it shortly.'))

    redirect = reverse('entity_home', args=(q.entity.slug,))
    return HttpResponse(redirect, content_type="text/plain")


$5000 – President Please fill out this field.
How many? REQUIRED Please fill out this field. Please enter an integer (number).
Donation $ Please enter a positive decimal.
DONOR RECEPTION at 6:00 p.m. DINNER at 7:00 p.m.


View alumni that have participated in Basehor Linwood High School Drama. If you participated in Drama while at Basehor Linwood HS, register now and add your name to the list with a message to your old friends.
Looking for Basehor Linwood alumni who participated in Drama but are not listed? Classmates.com® has hundreds of more Basehor Linwood alumni listed.


Amazon has now announced that they're further expanding Alexa's ability to push notifications to devices. If you have an Alexa device, like an Echo, you may have noticed earlier in the year that Alexa had gained the ability to notify you about your Amazon deliveries. The ring of light would begin to pulse, indicating a notification was waiting. I was confused and a bit worried the first time it happened to me, since I'd missed the news announcement about it; I thought my Echo Dot might be malfunctioning, considering the weird pulsing light. Since then I've found this notification system pretty handy. Your Echo can also flash to let you know when you've received a message or call (remember, you can make calls and send messages between Alexa-enabled devices).
Now Alexa's notifications are getting even better. Alexa devices will now be able to display the flashing ring of light and make a sound when there's an alert from an enabled skill. The skills that currently work with the new notification feature are few, though—right now it only works with a very small amount, and Amazon only names three in their announcement: The Washington Post, AccuWeather, and Life360. Amazon's announcement mentions more will be coming soon, and TechCrunch names Just Eat and Astrobot as two other skills that were involved in testing. Oh, and don't worry: if you don't want these push notifications, you don't have to have them. You'll need to opt-in to get them, and you can disable them in the Alexa app's settings (Amazon describes how to do this on their website).
It's hard to tell how soon Amazon means when they say "coming soon," but hopefully these skills will enable push notifications sooner rather than later. People have been asking for more push notifications for some time now, myself included. Many users have asked to be able to have Alexa interact more and easily offer things like news alerts and calendar items. With The Washington Post, at least, these news alerts will be possible, but if you're not necessarily a fan of that news provider, you'll still have to wait to get push notifications about news from other outlets on Alexa. I know I'll be keeping watch to see when new skills are able to send chiming notifications to my Echo Dot.
NextNext post:Halloween is the Best!


NEW –TNPSC Group 2 & 2A 2019 – Preparation Strategy & Study Plan, Video classes and Postal test Batch.
Questions in Group 2 – 2018 from TNPSC.Academy TEST SERIES!
Note : The above questions includes directly and indirectly asked questions in Group 2 Exams.
Download Group 2 2018 Answer Key in PDF. Date of Publication of TNPSC Group 2 Answer Key by TNPSC.Academy : 11-11-2018.
Check your Answers for TNPSC Group 2 2018 and Estimate your Group 2 Cut Off with the Most Authentic Answer Key by TNPSC.Academy.
How to Prepare for TNPSC Group 2 2018 Exam?
The TNPSC Group 2 Exam consists of Objective Type Exam and then selected candidates are called for Counselling.
0 responses on "TNPSC Group 2 Answer Key 2018"


Mitt Romney compared Newt Gingrich to Goldilocks at a campaign stop. Romney explained how Gingrich just can't seem to get comfortable with how loud the audience at debates should be.
Romney said, "The first debate the audience was quiet and Speaker Gingrich said that threw him off. He can't debate before a quiet audience. And then the next audience was very loud - very loud - and he said that threw him off. He can't debate before a real loud audience. It's like Goldilocks - it has to be just so."


text:
<?php

namespace Vidal\MainBundle\Service;

use Symfony\Component\DependencyInjection\ContainerInterface;
use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Vidal\MainBundle\Entity\User;
use Vidal\MainBundle\Entity\AstrazenecaFaq;

class DoctrineEventSubscriber implements EventSubscriber
{
	private $container;

	public function __construct(ContainerInterface $container)
	{
		$this->container = $container;
	}

	/**
	 * Возвращает список имён событий, которые обрабатывает данный класс. Callback-методы должны иметь такие же имена
	 */
	public function getSubscribedEvents()
	{
		return array(
			'prePersist',
			'preUpdate',
		);
	}

	public function prePersist(LifecycleEventArgs $args)
	{
		$entity = $args->getEntity();

		if ($entity instanceof User) {
			if ($city = $entity->getCity()) {
				if ($region = $city->getRegion()) {
					$entity->setRegion($region);
				}
				if ($country = $city->getCountry()) {
					$entity->setCountry($country);
				}
			}
		}
	}

	public function preUpdate(LifecycleEventArgs $args)
	{
		$entity = $args->getEntity();

		if ($entity instanceof User) {
			if ($city = $entity->getCity()) {
				if ($region = $city->getRegion()) {
					$entity->setRegion($region);
				}
				if ($country = $city->getCountry()) {
					$entity->setCountry($country);
				}
			}
		}
		elseif ($entity instanceof AstrazenecaFaq) {
			$answer = $entity->getAnswer();
			empty($answer) ? $entity->setEnabled(0) : $entity->setEnabled(1);
		}
	}
}


text:
package backtype.cascading.tap;

import cascading.flow.hadoop.HadoopFlowProcess;
import cascading.scheme.Scheme;
import cascading.scheme.SinkCall;
import cascading.scheme.SourceCall;
import cascading.tap.Tap;
import cascading.tap.TapException;
import cascading.tuple.Fields;
import cascading.tuple.Tuple;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.RecordReader;
import org.apache.hadoop.mapred.SequenceFileInputFormat;

import java.io.IOException;

public class RawSequenceFile extends Scheme<HadoopFlowProcess, JobConf, RecordReader, OutputCollector, Object[], Object[]> {
    public RawSequenceFile(String keyField, String valueField) {
        super(new Fields(keyField, valueField));
    }

    public void sourceConfInit(HadoopFlowProcess process, Tap tap, JobConf conf) {
        conf.setInputFormat(SequenceFileInputFormat.class);
    }

    @Override
    public void sinkConfInit(HadoopFlowProcess prcs, Tap tap, JobConf conf) {
        throw new TapException("cannot use as a sink");
    }

    @Override
    public void sourcePrepare(HadoopFlowProcess flowProcess, SourceCall<Object[], RecordReader> sourceCall) {
        sourceCall.setContext(new Object[2]);

        sourceCall.getContext()[0] = sourceCall.getInput().createKey();
        sourceCall.getContext()[1] = sourceCall.getInput().createValue();
    }

    @Override
    public boolean source(HadoopFlowProcess prcs, SourceCall<Object[], RecordReader> sourceCall) throws IOException {

        Object key = sourceCall.getContext()[0];
        Object value = sourceCall.getContext()[1];

        boolean result = sourceCall.getInput().next(key, value);

        if (!result) {
            return false;
        }

        sourceCall.getIncomingEntry().setTuple(new Tuple(key, value));
        return true;
    }

    @Override
    public void sink(HadoopFlowProcess prcs, SinkCall<Object[], OutputCollector> sc) throws IOException {
        throw new TapException("cannot use as a sink");
    }
}


Reading head to Hillsborough on Saturday in their first of two trips to Sheffield in successive weeks.
The Royals will take on Steve Bruce's Wednesday before travelling to play Sheffield United next weekend.
But all eyes are on the Owls in this week's podcast as Jose Gomes looks to take his side out of the relegation zone.


According to DMX's management the hip-hopper still hasn't gotten permission to leave the United States. He was stopped at the airport when he was about to travel to Finland for the kick-off of his European tour at the beginning of the month, apparently because he had failed to attend a court session involving driving without a licence.
The concert in Helsinki on the 2nd of August was cancelled only one day prior to the scheduled date, as was a performance at Pipefest in Vuokatti scheduled for the next day. This time, the Finnish concert organizer Speed Promotion & Agency was given four days to spread the news that the replacement gig in Helsinki won't take place either.
Concert promoter Kalle Keskinen is furious. 'Now it's enough! Complete messing around! As far as we are concerned DMX can be in court and stay in Yankeeland for the rest of his life!,' Keskinen rages in his press release, written in capitals and containing lots of exclamation marks.
'I am sorry for all the DMX fans! And we, too, have wasted enough time and money on this case. I am sick and tired of it!,' the angry concert promoter continues.
The management of the rapper has announced a video by DMX with explanations and apologies.
Keskinen: 'Let's see whether we will get any video […] here in Finland or if it, too, will stay at customs, in police custody or at passport control.
Ticket holders can get their money back at Lippupalvelu ticket offices.


text:
package org.pepstock.charba.client.plugins.hooks;

import org.pepstock.charba.client.IsChart;
import org.pepstock.charba.client.items.PluginTooltipArgument;

/**
 * Called after drawing the 'tooltip'.

 * Note that this hook will not be called if the tooltip drawing has been previously cancelled.
 *
 * @author Andrea "Stock" Stocchero
 *
 */
public interface AfterTooltipDrawHook {

	/**
	 * Called after drawing the 'tooltip'.

	 * Note that this hook will not be called if the tooltip drawing has been previously cancelled.
	 *
	 * @param chart the chart instance.
	 * @param item The tooltip instance.
	 */
	void onAfterTooltipDraw(IsChart chart, PluginTooltipArgument item);

}


New Delhi, Jan 2 () The government Wednesday gave out the 6-croreth free cooking gas (LPG) connection as the scheme to make available cleaner fuel in every household kitchens runs ahead of schedule.
Vice President M Venkaiah Naidu handed over papers for an LPG connection under the Pradhan Mantri Ujjwala Yojana (PMUY) - which was launched on May 1, 2016, with a target to give 5 crore connections by March 2019 - to a Muslim lady Jasmina Khatoon from Shivpark, Khanpur in the national capital.
Speaking on the occasion, Naidu termed the scheme as revolutionary and "possibly the world's biggest poverty alleviation programme."
The scheme together with a government push to replace polluting firewood in kitchens has led to LPG coverage rising to almost 90 per cent of the population from 55 per cent in May 2014, he said.
Oil Minister Dharmendra Pradhan said as many as 23 crore refills or about 4 cylinders of 14.2-kg each have been bought by PMUY beneficiaries in a year, thereby rejecting criticism of the scheme that households reverted to firewood and other mediums of cooking once the initial free LPG cylinder was exhausted.
Last month, the government extended PMUY to all poor households. The scheme originally targeted giving free LPG connections to mostly rural women members of below the poverty line (BPL) households. The list was later expanded to include all SC/ST households, forest dwellers, most backward classes, inhabitants of islands, nomadic tribes and tea estates among others.
Incidentally, the 5-croreth free LPG connection under the scheme too was given to a Muslim lady, Takrdiran, a resident of Sangam Vihar of the national capital, in August last year by Lok Sabha Speaker Sumitra Mahajan.
Naidu said that the Indian economy is striving fast to become the third largest economy of the world, and the schemes like PMUY deal with the social aspect of the growth story, by its inclusiveness.
He said that the Prime Minister has called for 'Reform, Perform and Transform' and this initiative of the Ministry of Petroleum and Natural Gas is a giant step in transforming the lives of the people. It not only tackles the health and environmental problems due to household smoke but also empowers the women and restores control to them over their destiny.