Today is the feast-day of St Mary Magdalene, Apostle to the Apostles, and Patroness of the Order of Preachers. We're lucky to have her! As I think about her now, you know, she's quite an inspiration, a good teacher.
"Then the other disciple, who reached the tomb first, also went in, and he saw and believed; for as yet they did not know the scripture, that he must rise from the dead. Then the disciples went back to their homes.
Just these few verses got me thinking – about how the disciples left and she stayed. They went home, but she had no home to go to.
JESUS was her home – that's why.
The disciples had left everything to follow JESUS, but I suppose here you could say that as yet JESUS didn't wholly possess them – they had left everything, but as yet they hadn't given Him their very selves, they didn't realise that they couldn't do without Him. So they went home … sad? yes; …lost? yes, probably; …confused? surely; …disappointed? I think definitely so. They didn't have JESUS any longer, He was gone. Where were they to go? What to do now? They had homes, they could pick up their lives again, the lives – the everything – they had left and try to keep going … that would fill the void that JESUS had left in them.
But when JESUS reached out to Mary that first time, and saved her – she had been about as far away from Him as it is possible to be – had given up even on herself. It was a miracle, a wondrous miracle that He would even look at her, not to mind want her. But she saw that He did, and when she saw Him, she saw that He was everything and that now, knowing Him, her life would be nothing … she would be nothing … without Him, apart from Him.
He is my home. The ground beneath my feet.
Thank God for St Mary Magdalene, may she pray for us that we may find our way home.


Buddha Boards are the perfect way to create art with a zen twist – just use water and the paintbrush to unleash your inner artist. Then watch your masterpiece fade away and start again, no cleanup required. Talk about a perfect creative surface for kids, especially for art on the go.
Master the art of letting go with these creative boards that go way beyond etch-a-sketch. Buddha Boards come complete with a beautiful clean slate, which can be placed on the included platform. Just add water and use the paintbrush to paint and draw to your heart's content. When the water dries, the slate is wiped clean, giving you a new surface to decorate all over again.
We have used our Buddha Board a lot with Little M and he loves it! There's something about setting up his own little easel and filling the reservoir with water that makes him a lot more excited than using crayons and paper. We have the original Buddha Board and the large sized slate gives us a lots of room to create and explore. Even though it's a bit bulky, I still take it with us to restaurants whenever I can, because it pretty much guarantees that Little M will be occupied and happy while we wait for our food to arrive. Best of all, since water is used as paint, there's no mess to worry about cleaning up at the table!
The mini and laptop sizes are definitely more portable, but we love the material and texture of the original Buddha Board. I would show you pictures of our masterpieces, but we are learning to master the art of letting go!


Tufts Medical Center seeks a full-time Genetic Counselor to provide genetic counseling services in both perinatal genetics and traditional clinical genetics.
•	Counsels patients and families concerning various genetic issues such as Amniocentesis, Maternal Serum AIpha-Fetoprotein Program, Chorionic Villus Sampling, Percutaneous Umbilical Blood Sampling, and Genetic Disorders. Explains procedures and probable outcome to patients, and follows up with patients as necessary.
•	Screens and interviews patients to evaluate medical/family information; recommends and coordinates additional testing and referrals.
•	Triages patients for physicians including scheduling appointments as necessary, provides and consults basic medical related information and answers over the telephone.
•	Develops and coordinates special programs to address medical care issues concerning prenatal diagnoses of birth defects, abnormalities, and amniocentesis.
•	Oversees administrative details including record-keeping, maintaining patient-related statistics, progress notes and charts, preparing encounter forms, and genetic summary forms and/or notes, and MSAFP forms.
•	Serves as a resource to genetic counseling staff, patients, and providers on genetic counseling issues.
•	Performs other job related duties as required or requested.
•	Master's degree with specialty in Genetic Counseling required.
•	American Board of Medical Genetics Certification in Genetic Counseling (or Board Eligible).
•	One to three years of genetic counseling or related counseling experience.
•	Aptitude in basic sciences, especially in the area of genetics.
•	Good communication and interpersonal skills, especially in the areas of counseling, and sensitivity to people in crisis.
•	Professional attitude in dealing with patients and staff.
•	Ability to work in stressful situations within specific time frames, while maintaining a professional and calm attitude.
•	Maintains and develops effective relationships with patients, staff and other providers.
Northern Light Eastern Maine Medical Center seeks a full-time Genetic Counselor to provide genetic counseling services in both traditional clinical genetics and cancer risk genetics service line. Responsibilities will include assessment, development of pedigree, identification and coordination of testing including prior authorization, report production, pre- and post-test counseling, communication with referring providers and community education.
Our team provides care in our NCQA-recognized level III Patient Centered Medical Home. Our office locations are located in newly renovated facilities close to main hospital campus. We offer a supportive, collegial work environment, skilled staff, and a cutting-edge EMR. We also offer a competitive compensation/benefits package.
Candidates must have a Master's degree in Genetic Counseling or related field with experience in clinical genetics. At least one year professional experience in a busy practice across clinical and cancer genetic service lines preferred.
Northern Light Eastern Maine Medical Center is committed to making healthcare work for the people of Maine. It is a 411- bed, regional tertiary care and ACS verified level II trauma center serving a patient population of 500,000 living in the northern two-thirds of the state's geography. The hospital is a base for LifeFlight of Maine, a critical care air transportation service flying nearly 900 missions per year. Northern Light Eastern Maine Medical Center is a member of Northern Light Health, an integrated statewide health delivery system that is raising the bar with no-nonsense solutions that are leading the way to a healthier future for our state. Northern Light Health offers a broad range of providers and services, including nine hospitals, primary care and specialty physician practices, long-term care, home health and hospice agencies, and emergency ground and air transport.


text:
Jaźwiny – wieś w Polsce położona w województwie wielkopolskim, w powiecie ostrzeszowskim, w gminie Kraszewice.

W latach 1975–1998 miejscowość administracyjnie należała do województwa kaliskiego.

Zobacz też
 Jaźwiny-Koczoty

Przypisy

Kraszewice (gmina)

redpajama_set_name: RedPajamaWikipedia


In October 2015, before its third season kicked off at OBERON, Old School Game Show's creators told us the show was "what would happen if The Price is Right got drunk and danced on a table." And it certainly hasn't gotten any less zany over the last year—why would it? The one-of-a-kind, interactive variety production—part TV series, part musical, part comedy show, all absolutely bananas energy—brings together some of Greater Boston's artists, comics and musicians for send-ups and celebrations of everything from pro wrestling to Pat Sajak.
Perhaps its no surprise, then, that Old School Game Show will introduce that mirth and mania to an audience at the Wilbur on February 4 for its biggest, most off-the-wall episode to date.
Executive producer and actress Ginny Nightshade says that she and the rest of the Old School Game Show crew have been actively looking beyond Somerville and Cambridge to bring the Old School Game Show experience to new spaces and new audiences. "We've got this really lovely base of people who come to our show all the time … but we can bring this to people who have never seen something like this before," Nightshade says before a Wednesday night rehearsal at the Rockwell in Davis Square.
The Old School Game Show cast channels its inner 'Sixteen Candles.' Photo by Roger Gordy.
The 2015 Halloween production was held at Cinema Salem, where only a handful of people had seen the show before. Old School Game Show also made its Laugh Boston debut last year.
Nightshade says they've learned that this "crazy monster of a show" will hold up in just about any space, and The Wilbur, with its capacity of 1,200, will be the largest venue in which they've showcased their offbeat brand of comedy by a lot. (OBERON, for comparison, seats 130.) It's letting Nightshade and co. do their biggest, boldest evening to date. "And our show is already pretty big," she chuckles.
To take advantage of the room, they've added huge dance and musical numbers. The whole band will be onstage. They're bringing tons of local talent along for the ride, including opening comic Ken Reid and musical guest Will Dailey. Starlab Studios worked with the crew to film scenes for a brand new game that will make its debut in February.
Coordinating their biggest production to date has meant the writers, actors, dancers and musicians have done more planning than ever before. Nightshade jokes that the script has been done for weeks—this time around, it won't be finalized just days before the show. The full-cast rehearsal at the Rockwell is something of an anomaly, too, as the crew generally practices piecemeal before the big night.
Old School Game Show creative collaborators (and newly-engaged duo!) Ginny Nightshade and Mike D'Angelo. Photo by Stratton McCrady.
But fear not: More rehearsing won't mean a final product that's any less wild. This is the same crazy crew of actors and writers who brought you games like "Baby Mama Trauma," where contestants have to guess which violent movie is depicted in a child's drawing. In fact, the wheels might come off even more at the Wilbur. Old School Game Show episodes are usually based around a theme, like heavy metal, or the '80s. This time around, the theme is just "game show," which means just about anything could happen.
"We're getting to pay homage to what the show originated and was based on, which was these game shows we all came home and watched on TV after school," Nightshade says.
Old School Game Show heads to the Wilbur on Saturday, February 4 at 10 p.m. You can grab tickets here and find more information on Facebook or on the Old School Game Show website.


Okay, I admit it. I don't always "get" it when it comes to technology. Here's what I'd like to know: How is it that after months and months of writing this blog, all of a sudden, my monthly newsletter, all about handshakes this month, and which is completelyindependent of this blog and uses a completely different platform….. how is it that my entire newsletter appeared in my blog?…. How the hell did that happen?
It's ok, I guess. It just that my LodeStar Universal newsletter included a bunch of disclaimer junk and code junk that doesn't fit in blogs. And well, it was just spooky as all get out.
Was it the Blog Ghost reaching out to shake my hand?
Everybody knows my mom died a few months ago. Mother, was that you?
Communication, Current Affairs, Web/Tech, Weblogs. permalink.


text:
Q: How common the usage of "fortnight" instead of "two weeks ago"? Today firstly I recovered by BBC report that the words "two weeks ago" can be replaced by the word "fortnight", while so far I didn't came across this thing. How common is this word?
It's not clear to me if "two weeks ago" is used by native English speakers or maybe they should say "fortnight" instead. In other words, I would like to know if I should use it in the spoken language or it's considered weird in spoken language?

"About a fortnight ago, four men were sentenced to one month in prison
  after eating in public."

A: It's very dialectical.  In Canadian English, you'll occasionally see it but its usage seems extremely formal.  In UK English, it seems to be used quite frequently by comparison.

redpajama_set_name: RedPajamaStackExchange


Cropped pants are versatile, super cute, and for a tall girl, an absolute dream - no need to worry about pant length! My obsession with cropped pants has only grown with the addition of fun prints and textures being offered as of late. Plaid, sparkles and leather are perfect for the winter/holiday season - but look for brights, florals and whimsical prints come spring. Pair these with flats for a menswear-inspired look, with heels for a polished ensemble, or booties for an edgy nighttime look.


Mighty Joe copyright by Nancy Baron.
Bob's Red Car copyright by Nancy Baron.
This is Nancy Baron's first solo show with dnj Gallery. She has exhibited both nationally and internationally, with an emphasis here, in southern California. She lives and works in Los Angeles and Palm Springs. The Good Life > Palm Springs is now a monograph published by Kehrer Verlag. It is currently available in Europe and will be available in the U.S. and Canada this fall, 2014.


With significantly better current practical knowledge, we have the potential to supply a wide range of Fire Alarm System in New Delhi, India to our considered customers. The offered ranges is manufactured by our professionals applying ideal quality raw materials and leading-edge engineering to be sure its resistant activities. Customers can effortlessly come to us and profit this collection at business aggressive rates.
Established in 2010, COLDWIRE TECHNOLOGIES PRIVATE LIMITED has been a leading name in offering top notch Alarm. Located in New Delhi, Delhi, we offer the best quality Fire Alarm Systems to our customers at best prices in the industry.


text:
Pic-a-Pix Classic 2 (Vita) review
"Pic-a-Pix Classic 2 isn't big on frills, but it includes a whopping 150 new picross puzzles to keep you busy."
Pic-a-Pix Classic 2 is a picross game, developed by Lightwood Games with puzzles provided by Conceptis Ltd. It's available for purchase on either Vita or PlayStation 4, with cross-buy supported so you can then play it on the other platform if you so desire. 150 puzzles are included, as well as a 10-page tutorial for those who haven't played picross before, and the MSRP is $7.99 USD (or similar depending on your region).
The Vita continues to enjoy a trickle of digital releases, even though Sony has made clear its desire to finally abandon the platform for good. It's difficult to tell how many more games will reach the store in North America after this one, if any. All of the above points combine to make the game a worthwhile purchase... assuming you like picross.
I like picross quite a lot, as it happens. Taken a few at a time, I find the puzzles are a great way to wind down from stressful activity. 150 is a large enough number of new ones to keep a person busy for a good long while, perhaps a total of several dozen hours when all is said and done. So the value is definitely there, but perhaps a few minor words of warning are in order before you add the game to your digital shopping cart.
The biggest objection I can imagine most players having is that Pic-a-Pix Classic 2 isn't completely ideal for newcomers, despite including an instructive tutorial that goes over a few basics a person can keep in mind to perform well almost from the start. Games like this one sometimes include a few helpful warm-up puzzles that are really small and suitable for practice, perhaps with grids as small as 5x5. There are none of those provided here. Puzzles are instead divided like so: 15x15 (60), 20x15 (45), 20x20 (30) and 30x20 (15). If you're a picross veteran, that's an even better value than it would be if some of the 150 puzzles were the sort you can clear in a matter of seconds, but the learning curve could prove intimidating for those just getting their start.
If you are one such individual, you may well be wondering what picross even is. Basically, just picture a sheet of graphing paper that someone has filled in with blocks of color to create a piece of pixel art. Except when you start playing, there's no picture there because filling it in with art is your job. Directions are provided in the form of numbers along the X and Y axis. For instance, one row of 15 squares might include three numbers to the left: 3, 5 and 5. This tells you to fill in the first three spaces, skip a space, fill in five more spaces, skip a space and fill in the last 5. Easy enough, right? But sometimes, you will have a row of 15 and there will be a low number like 1 or 2. Where in that row of 15 should you fill in the two squares to make progress on the picture? To figure that out, you'll have to consult other rows and columns, using logic to determine which squares need your attention.
Perhaps the above paragraph doesn't make picross sound all that exciting, but it's a surprisingly addictive exercise. Slowly turning a blank screen into an image feels quite satisfying, and I get a bit of a rush each time a picture is revealed at the end in all its glory. The Vita version currently has a bug where sometimes the wrap-up shows the wrong picture, but the developer has said an update will fix that soon. The temporary quirk doesn't get in the way of solving any puzzles, so it's not a big deal at the moment.
When you do solve puzzles in Pic-a-Pix Classic 2, you will receive an in-game medal if you do so without using the super accommodating "Fix" option, which lets you erase from your board any squares you may have filled incorrectly, or that you marked with an "X" when you shouldn't have. The medals are a nice way to keep track of which puzzles you totally dominated, since they encourage careful play. You can cheat a bit, though, by pressing the Triangle button to bring up the screen that allows you to initiate a fix. That screen will tell you how many errors there are to resolve, and you can back out and resume your work on the puzzle without putting your virtual medal at risk. The bad news is that struggling players can abuse that menu by making a bunch of guesses they check one at a time. They'll still snag medals despite not playing quite fairly. But let's be real for a second: who among us is dying to lord it over our friends that we have more virtual picross medals than they do? If you're anything like me, your friends won't care.
Beyond the puzzles, there's not much to the Pic-a-Pix Classic 2 package. It has the standard tools you would expect so you can solve the puzzles, including an option to fill squares in with circles so you can return to them and properly paint them once you're more certain your logic is sound. There also is a nice chiptune soundtrack that loops through some surprisingly catchy tunes that would work equally well on an old 2D platformer or similar. And there also is the aforementioned "fix" mode and the non-interactive tutorial. If you're looking for a lot of bells and whistles, in other words, look elsewhere. But if you just want a generous helping of more picross puzzles you can use to fill your time, the game is a terrific option and should serve you well for many hours to come.
Staff review by Jason Venter (November 30, 2019)
More Reviews by Jason Venter [+]
Mario Clock (DS)
Mario Clock has too many limitations to be genuinely useful, but it's still a mildly interesting bit of software.
Raining Blobs (Switch)
Blobs with friends.
Mario & Sonic at the Olympic Games: Tokyo 2020 (Switch)
Mario and Sonic celebrate a momentous Olympics event, but they don't entirely stick the landing.
If you enjoyed this Pic-a-Pix Classic 2 review, you're encouraged to discuss it with the author and with other members of the site's community. If you don't already have an HonestGamers account, you can sign up for one in a snap. Thank you for reading!
jerec posted November 30, 2019:
As someone who enjoys Picross and still plays games on Vita regularly, this is a good one. $11.95 AUD (though I notice Pic-a-Pix Classic 1) is also available at the same price. By the description, it looks like that title has the warm-up 5x5 puzzles, so it's good that they don't feel the need to go over it again, they're assuming you played the first one.
None of the material contained within this site may be reproduced in any conceivable fashion without permission from the author(s) of said material. This site is not sponsored or endorsed by Nintendo, Sega, Sony, Microsoft, or any other such party. Pic-a-Pix Classic 2 is a registered trademark of its copyright holder. This site makes no claim to Pic-a-Pix Classic 2, its characters, screenshots, artwork, music, or any intellectual property contained within. Opinions expressed on this site do not necessarily represent the opinion of site staff or sponsors. Staff and freelance reviews are typically written based on time spent with a retail review copy or review key for the game that is provided by its publisher.

redpajama_set_name: RedPajamaCommonCrawl


text:
Q: How can I sort an array of dictionaries by its key? var arr = [
    { 'name': 'ashley', 'score': 5 },
    { 'name': 'jason', 'score': 9 },
    { 'name': 'ben', 'score': 1 },
    { 'name': 'jordan', 'score': 4 },
]

How can I reorder this array so that the results are score descending?

A: You can do something like this:
arr.sort(function(a,b) {
    return b.score - a.score
});

This gives:
[
    {"name":"jason","score":9},
    {"name":"ashley","score":5},
    {"name":"jordan","score":4},
    {"name":"ben","score":1}
]


Laura and I came to Honduras, and specifically Montaña de Luz, as social workers. All of our lives we have worked with people and communities on issues of empowerment and justice. This is what we wanted to do here, and certainly a great deal of what we do would be filed under the rubric of social work. We are working with our teenagers on gaining life skills and independence. There is great need to assist our younger children with self-esteem and confidence. There are a great many issues that surround behavioral management, basically parenting skills, and we have been offering advice and support to the "Tías" and Honduran staff in the day to day struggles and challenges of meeting the physical and emotional needs of 30 children. We are learning how best to interface with the larger community and other social service agencies in providing wider systems of support for the children as they begin to break away from Montaña de Luz. We are also beginning to know their families and what place they hold in the lives of the children now and in their futures. I am also beginning a volunteer program based on the Big Brother / Big Sister model in the US and other countries. All of this is good social work. It is exactly what we expected and we feel privileged to offer our small part in a challenging environment.
But, there are many other things that Laura and I do here as part of the team. These are things that are not quite so readily understandable as part of a job description for social work. In her wildest fantasy, Laura would have never pictured herself as an arts and crafts guru. She has also taken over the "God's Gift" program: translating cards and letters between the children and their US sponsors, taking countless pictures of children in school uniforms, on outings, and at play, and finding interesting tidbits for newsletters. It in earlier blog I revealed that I had become a horticultural specialist. As of late I have become a bicycle mechanic. Much to my astonishment, this position was formalized at a staff meeting where it was agreed that I would be the go-to person for all things bicycle. I don't ever remember those courses in high school or college, but apparently I had dormant mechanical skills that are only now surfacing. I am also in charge of doing our weekly grocery shopping. My Spanish is fairly efficient, and I have been using it the great majority of my life. But not really eating many vegetables, and not having much reason to converse about comestibles, until a few months ago I had no idea what "apio" or "repollo" meant. Now they have become part of my weekly lexicon at the farmer's market.
Yesterday, fifteen undergraduate students from Ohio State University engineering department arrived at Montaña de Luz. They'll be here a week and have three exciting projects to complete. They are going to re-purify our water purification system that hasn't been working. They are going to install a wind turbine to generate electricity. The third project is in hydroponics in which they are going to create a small tilapia breeding pond that will double as a garden. Laura has been the liaison for the group in these weeks leading up to the trip. She has been reading all the emails, translating them, and making up the list of provisions that needed to be purchased. Again, not social work per se, but vitally important. It is a thankless job as everyone knows that whatever goes wrong will be first blamed on the messenger. We are both now to be placed into the position of translators for the next week. We needed three vehicles to pick them up at the airport yesterday because of the many supplies and donations they carried. The people from Sandy Hook, CT also sent down donated supplies with the OSU group for which we are most grateful. As we needed three vehicles, I was also employed as a chauffeur.
Driving in Honduras is nothing like driving in the States. Most people don't drive here, unlike home where almost everyone drives. The roads are in tremendous disrepair. The vehicles are all twenty to thirty years old. The trucks barely crawl up the steep hills with winding curves. You need to drive with a certain sense of abandon or you'll never get anywhere. You keep one eye on the car in front of you, one eye on the car in back, one eye on the approaching vehicles, and one eye on the potholes. It's always exciting. Yesterday I got pulled over at one of the police check points. I was threatened with a ticket and the confiscation of my license because, after he had pulled me over, I didn't put my emergency flashers on. The fine would have been about 700 lempira ($35), but he said he could let me go if I could see my way to buying him a soft drink. As it turned out, I only had bills worth 100 lempira ($5) in my wallet, so he was probably able to buy a couple of soft drinks. Social work?
Here at Montaña de Luz, Laura and I face tremendous challenges in what obviously belongs to our chosen profession of social work. It is hard work and requires attentiveness and commitment. Odd though, that it is these other tasks, these ancillary responsibilities born of necessity, that really get to the heart of what it means to be have become volunteers at Montaña de Luz. These things, the accomplishment of these things, put us both in touch with what social work is all about. They humble us, and they open the door to the real, day-to-day needs of these thirty children. We do not sit apart in offices (we have an office, but find it absolutely impossible to keep the kids away from it or us) and design programs. Our social work is indeed social, and really, really messy.


The year of Luigi was still in effect during this latest Nintendo Direct stream held today. Satoru Iwata announced an exclusive eShop title for the Wii U called Dr Luigi. As its name suggest, this new title will follow the same style of gameplay from the Tetris style game Dr Mario.
Dr Luigi will feature four different game modes from online to single player virus battling. Operation L, Retro Remedy, Virus Buster, and Online Battle.
The standard single player mode, called Operation L, will feature Dr Mario style gameplay but with new shapes to work with. Two pills combined to make an L shape. This adds a new dimension of gameplay that Iwata hopes will spark new interest from old fans.
For die-hard fans of the original Dr Mario, Dr Luigi features a mode fit for the old style. Retro Remedy brings the standard single pill system back with new modes and new graphics.
Virus Buster, which was featured in the Nintendo DS game series Brain Age, will also be a throwback to the original. However now the game will be playable on the gamepad in a vertical position and using the touch screen.
The final mode featured in the announcement was Online Battle. Dr Luigi features local versus, but in this new mode, people across the world can battle against each other in virus killing competition.
Look forward to Dr Luigi to hit the Wii U eShop on December 31st. Be sure to let us know in the comments below if you like this new take on the Dr Mario franchise!


text:
package com.jme3.input;

import com.jme3.collision.MotionAllowedListener;
import com.jme3.input.controls.*;
import com.jme3.math.FastMath;
import com.jme3.math.Matrix;
import com.jme3.math.Matrixable;
import com.jme3.math.Quaternion;
import com.jme3.math.Vector3f;
import com.jme3.renderer.Camera;

/**
 * A first person view camera controller.
 * After creation, you must register the camera controller with the
 * dispatcher using #registerWithDispatcher().
 *
 * Controls:
 *  - Move the mouse to rotate the camera
 *  - Mouse wheel for zooming in or out
 *  - WASD keys for moving forward/backward and strafing
 *  - QZ keys raise or lower the camera
 */
public class FlyByCamera implements AnalogListener, ActionListener {

    private static String[] mappings = new String[]{
            CameraInput.FLYCAM_LEFT,
            CameraInput.FLYCAM_RIGHT,
            CameraInput.FLYCAM_UP,
            CameraInput.FLYCAM_DOWN,

            CameraInput.FLYCAM_STRAFELEFT,
            CameraInput.FLYCAM_STRAFERIGHT,
            CameraInput.FLYCAM_FORWARD,
            CameraInput.FLYCAM_BACKWARD,

            CameraInput.FLYCAM_ZOOMIN,
            CameraInput.FLYCAM_ZOOMOUT,
            CameraInput.FLYCAM_ROTATEDRAG,

            CameraInput.FLYCAM_RISE,
            CameraInput.FLYCAM_LOWER,

            CameraInput.FLYCAM_INVERTY
        };

    protected Camera cam;
    protected Vector3f initialUpVec;
    protected float rotationSpeed = 1f;
    protected float moveSpeed = 3f;
    protected float zoomSpeed = 1f;
    protected MotionAllowedListener motionAllowed = null;
    protected boolean enabled = true;
    protected boolean dragToRotate = false;
    protected boolean canRotate = false;
    protected boolean invertY = false;
    protected InputManager inputManager;

    /**
     * Creates a new FlyByCamera to control the given Camera object.
     * @param cam
     */
    public FlyByCamera(Camera cam){
        this.cam = cam;
        initialUpVec = cam.getUp().clone();
    }

    /**
     * Sets the up vector that should be used for the camera.
     * @param upVec
     */
    public void setUpVector(Vector3f upVec) {
       initialUpVec.set(upVec);
    }

    public void setMotionAllowedListener(MotionAllowedListener listener){
        this.motionAllowed = listener;
    }

    /**
     * Sets the move speed. The speed is given in world units per second.
     * @param moveSpeed
     */
    public void setMoveSpeed(float moveSpeed){
        this.moveSpeed = moveSpeed;
    }

    /**
     * Gets the move speed. The speed is given in world units per second.
     * @return moveSpeed
     */
    public float getMoveSpeed(){
        return moveSpeed;
    }

    /**
     * Sets the rotation speed.
     * @param rotationSpeed
     */
    public void setRotationSpeed(float rotationSpeed){
        this.rotationSpeed = rotationSpeed;
    }

    /**
     * Gets the move speed. The speed is given in world units per second.
     * @return rotationSpeed
     */
    public float getRotationSpeed(){
        return rotationSpeed;
    }

    /**
     * Sets the zoom speed.
     * @param zoomSpeed
     */
    public void setZoomSpeed(float zoomSpeed) {
        this.zoomSpeed = zoomSpeed;
    }

    /**
     * Gets the zoom speed.  The speed is a multiplier to increase/decrease
     * the zoom rate.
     * @return zoomSpeed
     */
    public float getZoomSpeed() {
        return zoomSpeed;
    }

    /**
     * @param enable If false, the camera will ignore input.
     */
    public void setEnabled(boolean enable){
        if (enabled && !enable){
            if (inputManager!= null && (!dragToRotate || (dragToRotate && canRotate))){
                inputManager.setCursorVisible(true);
            }
        }
        enabled = enable;
    }

    /**
     * @return If enabled
     * @see FlyByCamera#setEnabled(boolean)
     */
    public boolean isEnabled(){
        return enabled;
    }

    /**
     * @return If drag to rotate feature is enabled.
     *
     * @see FlyByCamera#setDragToRotate(boolean)
     */
    public boolean isDragToRotate() {
        return dragToRotate;
    }

    /**
     * Set if drag to rotate mode is enabled.
     *
     * When true, the user must hold the mouse button
     * and drag over the screen to rotate the camera, and the cursor is
     * visible until dragged. Otherwise, the cursor is invisible at all times
     * and holding the mouse button is not needed to rotate the camera.
     * This feature is disabled by default.
     *
     * @param dragToRotate True if drag to rotate mode is enabled.
     */
    public void setDragToRotate(boolean dragToRotate) {
        this.dragToRotate = dragToRotate;
        if (inputManager != null) {
            inputManager.setCursorVisible(dragToRotate);
        }
    }

    /**
     * Registers the FlyByCamera to receive input events from the provided
     * Dispatcher.
     * @param inputManager
     */
    public void registerWithInput(InputManager inputManager){
        this.inputManager = inputManager;

        // both mouse and button - rotation of cam
        inputManager.addMapping(CameraInput.FLYCAM_LEFT, new MouseAxisTrigger(MouseInput.AXIS_X, true),
                                               new KeyTrigger(KeyInput.KEY_LEFT));

        inputManager.addMapping(CameraInput.FLYCAM_RIGHT, new MouseAxisTrigger(MouseInput.AXIS_X, false),
                                                new KeyTrigger(KeyInput.KEY_RIGHT));

        inputManager.addMapping(CameraInput.FLYCAM_UP, new MouseAxisTrigger(MouseInput.AXIS_Y, false),
                                             new KeyTrigger(KeyInput.KEY_UP));

        inputManager.addMapping(CameraInput.FLYCAM_DOWN, new MouseAxisTrigger(MouseInput.AXIS_Y, true),
                                               new KeyTrigger(KeyInput.KEY_DOWN));

        // mouse only - zoom in/out with wheel, and rotate drag
        inputManager.addMapping(CameraInput.FLYCAM_ZOOMIN, new MouseAxisTrigger(MouseInput.AXIS_WHEEL, false));
        inputManager.addMapping(CameraInput.FLYCAM_ZOOMOUT, new MouseAxisTrigger(MouseInput.AXIS_WHEEL, true));
        inputManager.addMapping(CameraInput.FLYCAM_ROTATEDRAG, new MouseButtonTrigger(MouseInput.BUTTON_LEFT));

        // keyboard only WASD for movement and WZ for rise/lower height
        inputManager.addMapping(CameraInput.FLYCAM_STRAFELEFT, new KeyTrigger(KeyInput.KEY_A));
        inputManager.addMapping(CameraInput.FLYCAM_STRAFERIGHT, new KeyTrigger(KeyInput.KEY_D));
        inputManager.addMapping(CameraInput.FLYCAM_FORWARD, new KeyTrigger(KeyInput.KEY_W));
        inputManager.addMapping(CameraInput.FLYCAM_BACKWARD, new KeyTrigger(KeyInput.KEY_S));
        inputManager.addMapping(CameraInput.FLYCAM_RISE, new KeyTrigger(KeyInput.KEY_Q));
        inputManager.addMapping(CameraInput.FLYCAM_LOWER, new KeyTrigger(KeyInput.KEY_Z));

        inputManager.addListener(this, mappings);
        inputManager.setCursorVisible(dragToRotate || !isEnabled());

        Joystick[] joysticks = inputManager.getJoysticks();
        if (joysticks != null && joysticks.length > 0){
            for (Joystick j : joysticks) {
                mapJoystick(j);
            }
        }
    }

    protected void mapJoystick( Joystick joystick ) {

        // Map it differently if there are Z axis
        if( joystick.getAxis( JoystickAxis.Z_ROTATION ) != null && joystick.getAxis( JoystickAxis.Z_AXIS ) != null ) {

            // Make the left stick move
            joystick.getXAxis().assignAxis( CameraInput.FLYCAM_STRAFERIGHT, CameraInput.FLYCAM_STRAFELEFT );
            joystick.getYAxis().assignAxis( CameraInput.FLYCAM_BACKWARD, CameraInput.FLYCAM_FORWARD );

            // And the right stick control the camera
            joystick.getAxis( JoystickAxis.Z_ROTATION ).assignAxis( CameraInput.FLYCAM_DOWN, CameraInput.FLYCAM_UP );
            joystick.getAxis( JoystickAxis.Z_AXIS ).assignAxis(  CameraInput.FLYCAM_RIGHT, CameraInput.FLYCAM_LEFT );

            // And let the dpad be up and down
            joystick.getPovYAxis().assignAxis(CameraInput.FLYCAM_RISE, CameraInput.FLYCAM_LOWER);

            if( joystick.getButton( "Button 8" ) != null ) {
                // Let the stanard select button be the y invert toggle
                joystick.getButton( "Button 8" ).assignButton( CameraInput.FLYCAM_INVERTY );
            }

        } else {
            joystick.getPovXAxis().assignAxis(CameraInput.FLYCAM_STRAFERIGHT, CameraInput.FLYCAM_STRAFELEFT);
            joystick.getPovYAxis().assignAxis(CameraInput.FLYCAM_FORWARD, CameraInput.FLYCAM_BACKWARD);
            joystick.getXAxis().assignAxis(CameraInput.FLYCAM_RIGHT, CameraInput.FLYCAM_LEFT);
            joystick.getYAxis().assignAxis(CameraInput.FLYCAM_DOWN, CameraInput.FLYCAM_UP);
        }
    }

    /**
     * Unregisters the FlyByCamera from the event Dispatcher.
     */
    public void unregisterInput(){

        if (inputManager == null) {
            return;
        }

        for (String s : mappings) {
            if (inputManager.hasMapping(s)) {
                inputManager.deleteMapping( s );
            }
        }

        inputManager.removeListener(this);
        inputManager.setCursorVisible(!dragToRotate);

        Joystick[] joysticks = inputManager.getJoysticks();
        if (joysticks != null && joysticks.length > 0){
            Joystick joystick = joysticks[0];

            // No way to unassing axis
        }
    }

    protected void rotateCamera(float value, Vector3f axis){
        if (dragToRotate){
            if (canRotate){
//                value = -value;
            }else{
                return;
            }
        }

        Matrixable mat = new Matrix(3);
        mat.fromAngleNormalAxis(rotationSpeed * value, axis);

        Vector3f up = cam.getUp();
        Vector3f left = cam.getLeft();
        Vector3f dir = cam.getDirection();

        mat.mult(up, up);
        mat.mult(left, left);
        mat.mult(dir, dir);

        Quaternion q = new Quaternion();
        q.fromAxes(left, up, dir);
        q.normalizeLocal();

        cam.setAxes(q);
    }

    protected void zoomCamera(float value){
        // derive fovY value
        float h = cam.getFrustumTop();
        float w = cam.getFrustumRight();
        float aspect = w / h;

        float near = cam.getFrustumNear();

        float fovY = FastMath.atan(h / near)
                  / (FastMath.DEG_TO_RAD * .5f);
        float newFovY = fovY + value * 0.1f * zoomSpeed;
        if (newFovY > 0f) {
            // Don't let the FOV go zero or negative.
            fovY = newFovY;
        }

        h = FastMath.tan( fovY * FastMath.DEG_TO_RAD * .5f) * near;
        w = h * aspect;

        cam.setFrustumTop(h);
        cam.setFrustumBottom(-h);
        cam.setFrustumLeft(-w);
        cam.setFrustumRight(w);
    }

    protected void riseCamera(float value){
        Vector3f vel = new Vector3f(0, value * moveSpeed, 0);
        Vector3f pos = cam.getLocation().clone();

        if (motionAllowed != null)
            motionAllowed.checkMotionAllowed(pos, vel);
        else
            pos.addLocal(vel);

        cam.setLocation(pos);
    }

    protected void moveCamera(float value, boolean sideways){
        Vector3f vel = new Vector3f();
        Vector3f pos = cam.getLocation().clone();

        if (sideways){
            cam.getLeft(vel);
        }else{
            cam.getDirection(vel);
        }
        vel.multLocal(value * moveSpeed);

        if (motionAllowed != null)
            motionAllowed.checkMotionAllowed(pos, vel);
        else
            pos.addLocal(vel);

        cam.setLocation(pos);
    }

    public void onAnalog(String name, float value, float tpf) {
        if (!enabled)
            return;

        if (name.equals(CameraInput.FLYCAM_LEFT)){
            rotateCamera(value, initialUpVec);
        }else if (name.equals(CameraInput.FLYCAM_RIGHT)){
            rotateCamera(-value, initialUpVec);
        }else if (name.equals(CameraInput.FLYCAM_UP)){
            rotateCamera(-value * (invertY ? -1 : 1), cam.getLeft());
        }else if (name.equals(CameraInput.FLYCAM_DOWN)){
            rotateCamera(value * (invertY ? -1 : 1), cam.getLeft());
        }else if (name.equals(CameraInput.FLYCAM_FORWARD)){
            moveCamera(value, false);
        }else if (name.equals(CameraInput.FLYCAM_BACKWARD)){
            moveCamera(-value, false);
        }else if (name.equals(CameraInput.FLYCAM_STRAFELEFT)){
            moveCamera(value, true);
        }else if (name.equals(CameraInput.FLYCAM_STRAFERIGHT)){
            moveCamera(-value, true);
        }else if (name.equals(CameraInput.FLYCAM_RISE)){
            riseCamera(value);
        }else if (name.equals(CameraInput.FLYCAM_LOWER)){
            riseCamera(-value);
        }else if (name.equals(CameraInput.FLYCAM_ZOOMIN)){
            zoomCamera(value);
        }else if (name.equals(CameraInput.FLYCAM_ZOOMOUT)){
            zoomCamera(-value);
        }
    }

    public void onAction(String name, boolean value, float tpf) {
        if (!enabled)
            return;

        if (name.equals(CameraInput.FLYCAM_ROTATEDRAG) && dragToRotate){
            canRotate = value;
            inputManager.setCursorVisible(!value);
        } else if (name.equals(CameraInput.FLYCAM_INVERTY)) {
            // Toggle on the up.
            if( !value ) {
                invertY = !invertY;
            }
        }
    }

}

redpajama_set_name: RedPajamaGithub


Lake Union is a fresh water lake that sits between Lake Washington and Puget Sound. On the north shore of Lake Union is Gasworks Park which provides a fantastic view of downtown Seattle which is directly opposite on the other side of the lake.
I guess the thing that Lake Union is most famous for, is that this is where Sleepless in Seattle was filmed. In fact the house boat that the male lead Sam Baldwin (Tom Hanks) lived in was on Lake Washington.
When you visit Seattle you can go on the "Duck Tours" which are amphibious World War II vehicles that take you round Seattle showing you all the local sites and end up going into Lake Union. They actually take you past the house boats and tell you that after the film these homes became supper popular. One reason being they don't pay property tax (as they are classed as boats). Apparently the city of Seattle was concerned they were losing money so now there is a limit on the number of house boats on the lake.
Today's picture was taken from Gasworks Park right by the waters edge. There was this small wall that had graffiti on it – something you don't see much around Seattle. Anyway I thought it looked cool with the painted wall in the bottom of the picture, the choppy water in the center and the Seattle skyline at the top.
Today Carter was caught enjoying his secret passion – reading "Reality Weekly".


text:
Decibel Festival 2015, Day 1: dB2015 OPTICAL Kick-Off Party at Re-Bar
Decibel Festival, Live Reviews
photos by Victoria Holt (view set)
The sounds that come out of a computer aren't often what we enjoy listening to. The sound of your email, the sound of an error, the sound of typing, it's all mundane. To some, however, the computer is an endless opportunity for sound. The artists beginning Decibel Festival 2015 have made their computers their instruments and they have tuned them perfectly, as we learned immediately at the OPTICAL Kick-Off Party at Re-Bar on the very first night. This early showcase of sonic and visual art, featuring Kid Smpl, Raica, and Richard Devine illuminated by Coldbrew Collective and Baryonyx, reminds us that not all festivals are filled with tents and dehydration, some are filled with the appreciation of music.Beginning with a set by Kid Smpl and the visuals of Baryonyx, the quickly growing crowd not only felt the beat as it pounded into their chests, but they were also brought on a journey through the shapes, the cities, and the intricate worlds Baryonyx and Kid Smpl created. The timing of each crack and each wave of familiar yet other worldly sound is perfectly in line with each break and shatter of beauty within the video. Kid Smpl's way of creating a relaxed atmosphere, while making his songs danceable and catchy, was fantastically amusing, and I was clearly not the only one who thought so. As the crowd grew, feelings of excitement and appreciation began to take form. Decibel Fest had begun.
Quickly after Kid Simpl was Raica and the visuals of Coldbrew Collective. With harsher and more abrupt sounds complimented by visuals that recalled a broken color TV or night vision, Raica set herself apart as soon as she started. Loud accents brought out the quick beats, and abrupt sounds created a place for the beat to wrap the songs together. As she moved through the set, her beat progressions became more complex and faster. It reminded me of a jam session during a rock show. The sounds were all relatable to each other, but they were unpredictable and reactive to the situation. Sections felt organic, original, and improvised. The crowd loved Raica as they cheered for quite a while whenever they go the chance.
Raica:
Richard Devine closed the Optical Kick-Off Party along with the visuals of Nick Bartoletti. With the most eclectic mix of sounds and the most experimental beat progressions and timing switches, Devine was certainly interesting to listen to. Parts of the set were even a little frustrating to the crowd as they were trying to dance and his beats switched times. The crowd didn't give up at these moments, however, and found the new timings pretty quickly, while dancing twice as hard to them. Bartoletti's visuals were similar in color scheme to Coldbrew Collective's night vision, but his patterns were more linear, as he applied repetition and division with straight lines, whether it was within pictures or colors. The ability of the visuals to match some of the hectic and experimental sounds from Devine created a sense unity amid the chaos.
In all, Decibel's Optical Kick-Off Party was a treat for two senses. The focus on visuals being in unison with the music was wonderful and the calm demeanor of the show and the atmosphere of Re-Bar got Decibel off to a great start.
Richard Devine:
Decibel Festival Live Reviews
Decibel Festival 2015, Day 1: Soulection at Q Nightclub
Wednesday marked the kick off of Decibel Festival 2015 and signaled the start of a week that will feature some of the worlds best electronic music artists in a plethora of Seattle's finest venues. 2015's lineup definitely offers something for everyone, and those looking to dance away their mid-we...
Song of the Day: Dasha Rush - Abandoned Beauties and Beasts
Every Monday through Friday, we deliver a different song as part our Song of the Day podcast subscription. This podcast features exclusive KEXP in-studio performances, unreleased songs, and recordings from independent artists that our DJs think you should hear. This week, we are featuring artists...
Decibel Festival Song of the Day
Song of the Day: Gilligan Moss - Choreograph
Live Review: Got a Girl at The Triple Door 9/21/15
Sometimes, random happenstance can lead to wonderful things - the entire existence of Got A Girl exists as a testament to this. While on set during the filming of the Edgar Wright film adaption of Scott Pilgrim vs. the World, actress Mary Elizabeth Winstead got a chance to meet Dan The Automator,...


The Del McCoury Band will be the headline act for the Aiken Bluegrass Festival set for May 10-11.
Tickets went on sale Tuesday at www.loveabf.com and at The Alley Downtown Taproom in Aiken. An early bird two-day wristband is $70 until Feb. 14. Camping options are available as well as a VIP option.
In addition to the two-time Grammy Award-winning McCoury, the 15th annual event will include Billy Strings, Keller and the Keels, Larry Keel Experience, Horseshoes & Hand Grenades, Cris Jacobs, Lindsay Lou, Town Mountain, Brad Parsons & Starbird, Kitchen Dwellers, Tenth Mountain Division, Kyle Tuttle Band, Benny Galloway, Artist-at-Large Zebulon Bowles, DJ Bontzilla and Doug & The Henrys.
Benny Galloway and Kyle Tuttle will emcee.
The festival will be held at the Aiken Fairgrounds, rain or shine, and benefits Great Oak Therapeutic Riding.


jetzt downloaden and Online lesen Bücher Recettes Pieds-Noirs de Ma Grand-Mere Online ePub/PDF/Audible/Kindle, its easy way to streaming Recettes Pieds-Noirs de Ma Grand-Mere Bücher for multiple devices.
jetzt downloaden Recettes Pieds-Noirs de Ma Grand-Mere Bücher PDF Louis Gildas Büchers en ligne PDF Recettes Pieds-Noirs de Ma Grand-Mere. jetzt downloaden et lire des Büchers en ligne Recettes Pieds-Noirs de Ma Grand-Mere Online ePub/PDF/Audible/Kindle, son moyen facile de diffuser Recettes Pieds-Noirs de Ma Grand-Mere Büchers pour plusieurs appareils.
Recettes Pieds-Noirs de Ma Grand-Mere was written by best authors whom known as an author and have wrote many interesting Bücher with great story telling. Recettes Pieds-Noirs de Ma Grand-Mere was one of the most wanted Bücher on 2019. It contains 120 pages. This book was very surprised because of its top rating and got about best user reviews. So, after finishing reading this book, I recommend to readers to not underestimate this great book. You should take Recettes Pieds-Noirs de Ma Grand-Mere as your reading list or you will be regret because you have not reading it yet in your live.
Télécharger Recettes Pieds-Noirs de Ma Grand-Mere Livre PDF Louis Gildas Livres en ligne PDF Recettes Pieds-Noirs de Ma Grand-Mere. Télécharger et lire des livres en ligne Recettes Pieds-Noirs de Ma Grand-Mere Online ePub/PDF/Audible/Kindle, son moyen facile de diffuser Recettes Pieds-Noirs de Ma Grand-Mere livres pour plusieurs appareils.


Jáchym Topol (b. 1962), like most Czech authors of his generation, wrote poetry for years before turning to prose. His first two collections of poems were both published in samizdat (i.e., unofficially and illegally), in 1985 and 1988. The poems here come from V úterý bude válka (Tuesday Will Be War, 1992), his first 'aboveground' appearance in print and his last poetry outing prior to his prose debut, Výlet k nádražní hale (A Trip to the Train Station, 1993). Topol's verse, with its lack of rhyme and meter, may remind English speakers of the Beats. Topol himself, however, cites his chief poetic influences as Ivan Jirous, aka 'Magor', poet, essayist, and guru of the Czech underground in the 1970s and 1980s; Egon Bondy, a metaphysical philosopher and surrealist poet whose verses served as lyrics for the first album by the Plastic People of the Universe; and Jiří Kolář of Skupina 42 (Group 42), a 1940s association of Czech avant-garde poets and painters inspired by the city and the industrial periphery. Thematically, the three selections here reflect several of Topol's abiding interests and influences, visible in his novels as well: Native Americans, World War II atrocities, and the spy and adventure stories he devoured as a boy.
on Radar Mountain . . . and they didn't get us.
and there's danger everywhere, in everything.
because I also have to have my love that woman with me.
not him or any of the rest.
you could live and you could die a thousand deaths.
in the time it took me to walk past.
a voice on the loudspeaker said the name of some place told me where we were.
This piece was selected for inclusion in the January 2014 Translation Issue by Daniel Medin, a contributing editor of The White Review. He helps direct the Center for Writers and Translators at the American University of Paris, and is Associate Series Editor of The Cahiers Series.
(b. 1962), like most Czech authors of his generation, wrote poetry for years before turning to prose. His first two collections of poems were both published in samizdat (i.e., unofficially and illegally), in 1985 and 1988. The poems here come from V úterý bude válka (Tuesday Will Be War, 1992), his first 'aboveground' appearance in print and his last poetry outing prior to his prose debut, Výlet k nádražní hale (A Trip to the Train Station, 1993). Topol's verse, with its lack of rhyme and meter, may remind English speakers of the Beats. Topol himself, however, cites his chief poetic influences as Ivan Jirous, aka 'Magor', poet, essayist, and guru of the Czech underground in the 1970s and 1980s; Egon Bondy, a metaphysical philosopher and surrealist poet whose verses served as lyrics for the first album by the Plastic People of the Universe; and Jiří Kolář of Skupina 42 (Group 42), a 1940s association of Czech avant-garde poets and painters inspired by the city and the industrial periphery. Thematically, the three selections here reflect several of Topol's abiding interests and influences, visible in his novels as well: Native Americans, World War II atrocities, and the spy and adventure stories he devoured as a boy.
Alex Zucker (b. 1964) is currently translating novels by Arnošt Lustig, Tomáš Zmeškal, Heda Margolius Kovály, Josef Jedlička, and Petra Hůlová. His translation of Jáchym Topol's The Devil's Workshop (Portobello Books, 2013) received an English PEN Award for Writing in Translation. He lives in Brooklyn, New York.
This article is an online exclusive from January 2014.


text:
Q: Pandas groupby with categories with redundant nan I am having issues using pandas groupby with categorical data. Theoretically, it should be super efficient: you are grouping and indexing via integers rather than strings. But it insists that, when grouping by multiple categories, every combination of categories must be accounted for.
I sometimes use categories even when there's a low density of common strings, simply because those strings are long and it saves memory / improves performance. Sometimes there are thousands of categories in each column. When grouping by 3 columns, pandas forces us to hold results for 1000^3 groups.
My question: is there a convenient way to use groupby with categories while avoiding this untoward behaviour? I'm not looking for any of these solutions:

*

*Recreating all the functionality via numpy.

*Continually converting to strings/codes before groupby, reverting to categories later.

*Making a tuple column from group columns, then group by the tuple column.

I'm hoping there's a way to modify just this particular pandas idiosyncrasy. A simple example is below. Instead of 4 categories I want in the output, I end up with 12.
import pandas as pd

group_cols = ['Group1', 'Group2', 'Group3']

df = pd.DataFrame([['A', 'B', 'C', 54.34],
                   ['A', 'B', 'D', 61.34],
                   ['B', 'A', 'C', 514.5],
                   ['B', 'A', 'A', 765.4],
                   ['A', 'B', 'D', 765.4]],
                  columns=(group_cols+['Value']))

for col in group_cols:
    df[col] = df[col].astype('category')

df.groupby(group_cols, as_index=False).sum()

Group1  Group2  Group3  Value
#   A   A   A   NaN
#   A   A   C   NaN
#   A   A   D   NaN
#   A   B   A   NaN
#   A   B   C   54.34
#   A   B   D   826.74
#   B   A   A   765.40
#   B   A   C   514.50
#   B   A   D   NaN
#   B   B   A   NaN
#   B   B   C   NaN
#   B   B   D   NaN

Bounty update
The issue is poorly addressed by pandas development team (cf github.com/pandas-dev/pandas/issues/17594). Therefore, I am looking for responses that address any of the following:

*

*Why, with reference to pandas source code, is categorical data treated differently in groupby operations?

*Why would the current implementation be preferred? I appreciate this is subjective, but I am struggling to find any answer to this question. Current behaviour is prohibitive in many situations without cumbersome, potentially expensive, workarounds.

*Is there a clean solution to override pandas treatment of categorical data in groupby operations? Note the 3 no-go routes (dropping down to numpy; conversions to/from codes; creating and grouping by tuple columns). I would prefer a solution that is "pandas-compliant" to minimise / avoid loss of other pandas categorical functionality.

*A response from pandas development team to support and clarify existing treatment. Also, why should considering all category combinations not be configurable as a Boolean parameter?

Bounty update #2
To be clear, I'm not expecting answers to all of the above 4 questions. The main question I am asking is whether it's possible, or advisable, to overwrite pandas library methods so that categories are treated in a way that facilitates groupby / set_index operations.

A: I was able to get a solution that should work really well. I'll edit my post with a better explanation. But in the mean time, does this work well for you?
import pandas as pd

group_cols = ['Group1', 'Group2', 'Group3']

df = pd.DataFrame([['A', 'B', 'C', 54.34],
                   ['A', 'B', 'D', 61.34],
                   ['B', 'A', 'C', 514.5],
                   ['B', 'A', 'A', 765.4],
                   ['A', 'B', 'D', 765.4]],
                  columns=(group_cols+['Value']))
for col in group_cols:
    df[col] = df[col].astype('category')

result = df.groupby([df[col].values.codes for col in group_cols]).sum()
result = result.reset_index()
level_to_column_name = {f"level_{i}":col for i,col in enumerate(group_cols)}
result = result.rename(columns=level_to_column_name)
for col in group_cols:
    result[col] = pd.Categorical.from_codes(result[col].values, categories=df[col].values.categories)
result

So the answer to this felt more like a proper programming than a normal Pandas question. Under the hood, all categorical series are just a bunch of numbers that index into a name of categories. I did a groupby on these underlying numbers because they don't have the same problem as categorical columns. After doing this I had to rename the columns. I then used the from_codes constructor to create efficiently turn the list of integers back into a categorical column.
Group1  Group2  Group3  Value
A       B       C       54.34
A       B       D       826.74
B       A       A       765.40
B       A       C       514.50

So I understand that this isn't exactly your answer but I've made my solution into a little function for people that have this problem in the future.
def categorical_groupby(df,group_cols,agg_fuction="sum"):
    "Does a groupby on a number of categorical columns"
    result = df.groupby([df[col].values.codes for col in group_cols]).agg(agg_fuction)
    result = result.reset_index()
    level_to_column_name = {f"level_{i}":col for i,col in enumerate(group_cols)}
    result = result.rename(columns=level_to_column_name)
    for col in group_cols:
        result[col] = pd.Categorical.from_codes(result[col].values, categories=df[col].values.categories)
    return result

call it like this:
df.pipe(categorical_groupby,group_cols)

A: I found the behavior similar to what's documented in the operations section of Categorical Data.
In particular, similar to

In [121]: cats2 = pd.Categorical(["a","a","b","b"], categories=["a","b","c"])

In [122]: df2 = pd.DataFrame({"cats":cats2,"B":["c","d","c","d"], "values":[1,2,3,4]})

In [123]: df2.groupby(["cats","B"]).mean()
Out[123]:
        values
cats B
a    c     1.0
     d     2.0
b    c     3.0
     d     4.0
c    c     NaN
     d     NaN

Some other words describing the related behavior in Series and groupby. There is also a pivot table example in the end of the section.

Apart from Series.min(), Series.max() and Series.mode(), the following
operations are possible with categorical data:
Series methods like Series.value_counts() will use all categories,
even if some categories are not present in the data:
Groupby will also show "unused" categories:

The words and the example are cited from Categorical Data.

A: Since Pandas 0.23.0, the groupby method can now take a parameter observed which fixes this issue if it is set to True (False by default).
Below is the exact same code as in the question with just observed=True added :

import pandas as pd

group_cols = ['Group1', 'Group2', 'Group3']

df = pd.DataFrame([['A', 'B', 'C', 54.34],
                   ['A', 'B', 'D', 61.34],
                   ['B', 'A', 'C', 514.5],
                   ['B', 'A', 'A', 765.4],
                   ['A', 'B', 'D', 765.4]],
                  columns=(group_cols+['Value']))

for col in group_cols:
    df[col] = df[col].astype('category')

df.groupby(group_cols, as_index=False, observed=True).sum()

A: There is a lot of questions to be answered here.
Let's start by understanding what a 'category' is...
Definition of Categorical dtype
Quoting from pandas docs for "Categorical Data":

Categoricals are a pandas data type, which correspond to categorical variables in statistics: a variable, which can take on only a limited, and usually fixed, number of possible values (categories; levels in R). Examples are gender, social class, blood types, country affiliations, observation time or ratings via Likert scales.

There are two points I want to focus on here:

*

*The definition of categoricals as a statistical variable:
basically, this means we have to look at them from a statistical point of view, not the "regular" programming one. i.e. they are not 'enumerates'. Statistical categorical variables has specific operations and usecases, you can read more about them in wikipedia.
I'll talk more about this after the second point.

*Categories are levels in R:
We can understand more about categoricals if we read about R levels and factors.
I don't know much about R, but I found this source simple and sufficient. Quoting an interesting example from it:

When a factor is first created, all of its levels are stored along with the factor, and if subsets of the factor are extracted, they will retain all of the original levels. This can create problems when constructing model matrices and may or may not be useful when displaying the data using, say, the table function. As an example, consider a random sample from the letters vector, which is part of the base R distribution.

> lets = sample(letters,size=100,replace=TRUE)
> lets = factor(lets)
> table(lets[1:5])

a b c d e f g h i j k l m n o p q r s t u v w x y z
1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1

Even though only five of the levels were actually represented, the table function shows the frequencies for all of the levels of the original factors. To change this, we can simply use another call to factor

> table(factor(lets[1:5]))

a k q s z
1 1 1 1 1

Basically this tells us that displaying/using all the categories even if they are not needed is not that uncommon. And actually, it's the default behavior!
This is due to the usual use-cases of categorical variables in statistics. Almost in all the cases you do care about all the categories even if they are not used. Take for example the pandas function cut.
I hope by this point that you understood why this behavior exists in pandas.
GroupBy on Categorical Variables
As of why does groupby consider all the combinations of categories: I can't say for sure, but my best guess based on a quick review of the source code (and the github issue you mentioned), is that they consider the groupby on categorical variables an interaction between them. Hence, It should consider all the pairs/tuples (like a Cartesian product). AFAIK, this helps a lot when you are trying to do something like ANOVA.
This also means that in this context you can't think of it in the usual SQL-like terminology.
Solutions?
Ok, but what if you don't want this behavior?
To the best of my knowledge, and taking into account that I spent the last night tracing this in pandas source code, you can't "disable" it. It's hard coded in every critical step.
However, because of the way groupby works, the actual "expanding" doesn't happen until it's needed. For example, when calling sum over the groups or trying to print them.
Hence, you can do any of the following to get only the needed groups:
df.groupby(group_cols).indices
#{('A', 'B', 'C'): array([0]),
# ('A', 'B', 'D'): array([1, 4]),
# ('B', 'A', 'A'): array([3]),
# ('B', 'A', 'C'): array([2])}

df.groupby(group_cols).groups
#{('A', 'B', 'C'): Int64Index([0], dtype='int64'),
# ('A', 'B', 'D'): Int64Index([1, 4], dtype='int64'),
# ('B', 'A', 'A'): Int64Index([3], dtype='int64'),
# ('B', 'A', 'C'): Int64Index([2], dtype='int64')}

# an example
for g in df.groupby(group_cols).groups:
    print(g, grt.get_group(g).sum()[0])
#('A', 'B', 'C') 54.34
#('A', 'B', 'D') 826.74
#('B', 'A', 'A') 765.4
#('B', 'A', 'C') 514.5

I know this is a no-go for you, but I'm 99% sure that there is no direct way to do this.
I agree that there should be a boolean variable to disable this behavior and use the "regular" SQL-like one.

A: I found this post while debugging something similar. Very good post,  and I really like the inclusion of boundary conditions!
Here's the code that accomplishes the initial goal:
r = df.groupby(group_cols, as_index=False).agg({'Value': 'sum'})

r.columns = ['_'.join(col).strip('_') for col in r.columns]

The downside of this solution is that it results in a hierarchical column index that you may want to flatten (especially if you have multiple statistics). I included flattening of column index in the code above.
I don't know why instance methods:
df.groupby(group_cols).sum()
df.groupby(group_cols).mean()
df.groupby(group_cols).stdev()

use all unique combinations of categorical variables,  while the .agg() method:
df.groupby(group_cols).agg(['count', 'sum', 'mean', 'std'])

ignores the unused level combinations of the groups.  That seems inconsistent. Just happy that we can use the .agg() method and not have to worry about a Cartesian combination explosion.
Also,  I think it is very common to have a much lower unique cardinality count vs. the Cartesian product.  Think of all the cases where data has columns like "State",  "County", 'Zip"...  these are all nested variables and many data sets out there have variables that have a high degree of nesting.
In our case the difference between Cartesian product of the grouping variables and the naturally occurring combinations is over 1000x (and the starting data set is over 1,000,000 rows).
Consequently, I would have voted for making observed=True the default behavior.

A: The main advantages of using categorical dtype are:

*

*Memory efficiency. The data is stored as integer codes, which are smaller in size than strings, the category type requires less memory to store the same amount of data compared to object type or int type data.

*Faster processing. Categorical data operations such as group by are generally faster than equivalent operations on object or int type data because they can be performed on the integer codes, which are more efficient to work with than strings.

The cons are:

*

*group by output: the output of the groupby is very messy. a lof of Nan are generated depending on your categories values.

*the same problem applies to the filtering.

*concatenation issue with category type: the category type is linked to a dictionary of values so when you concatenate or merge you will have trouble and the loss of the category dtype.

You could have more in-depth information from this article: https://medium.com/gitconnected/pandas-category-type-pros-and-cons-1bcac1bdea71


Mold Testing for Homes and offices, inspection & detection of Mold Services are offered by Perfect Pollucon Services. We carry out Mold spore tests such as indoor air quality testing & house surface sampling, professional Mold testing to identify the causes of Molds and solutions to remove them permanently.
Ever experienced black spots on walls and floors; or the green fuzzy thing on food items? If yes, I am sure you wondered what they are and how they are formed.
These spots and green fuzzy thing are nothing but Mold.
What is Mold and How Is It Formed?
Mold is a fungus that grows in the form of multicellular thread like structures called hyphae. It reproduces by means of tiny spores.
Once the spore lands on moist surface, it may begin growing.
Mold is found in damp building materials, where it often appears like stains and comes in a variety of colours. A musky smell is an indication of microbial growth even when there is no visible growth.
Molds are found everywhere and mold spores are a common component of household and workplace dust. However, mold spores when present in large quantity pose a threat to human health.
We might not be aware of the reason behind our allergic reactions or eye irritation, but one of the reasons behind these could be due to mold.
Yes. Mold exposures can result into allergic reactions, aggravated asthma, cough, chest or sinus congestion, runny nose, eye irritations and sick building syndrome.
Not sure if the allergic reactions you are suffering from are due to mold. Then you can find it out by performing mold tests.
Mold sampling and testing helps you to find if you have mold in your home or workplace and also helps to find mold which is not visible to naked eye. Testing of mold gives an idea about the species and amount of mold present at home or office and where it is growing. Sampling of amount of mold spores aids in measuring indoor air quality For Residential.
Professional Mold testing: Professional can be hired to sample, analyse or inspect the molds present at your home or office.
Mold Test Kits: Mold test kits can be used if you want to check the presence of molds at your home or office by yourself. The collected samples then can be sent to laboratories for identification and enumeration of mold species if present.
Multiple Mold Tests: In multiple mold tests samples are collected from air and surface and these are sub-cultured further for identification and enumeration of mold species.
But, by now you all would have started wondering what all should be done once presence of mold is confirmed. Haven't you all?
So, no need to wonder anymore. Just follow some of these tips to combat mold in your home or office.
Controlling growth of mold or eliminating its presence can be achieved by following any of the control measures.
Sometimes it may get difficult to get rid of mold and its spores from our home or office, but as it requires moisture to thrive, we can reduce moisture. Reducing moisture content/humidity in our home or office is the best way to control or eliminate mold.
Moisture content can be maintained by using dehumidifiers, air conditioners, indoor plants which helps balance humidity.
Fixing leakage, seepage and running taps helps to remove additional moisture. Thus helps us to eliminate mold growth.
Proper circulation of air between rooms helps control humidity and brings in fresh air, it thus helps eliminate chances of mold growth and increases indoor air quality. YOu can also refer to Our Ventilation Survey procedure.
Having a clean indoor environment reduces the chances of mold growth.
Perfect Pollucon Services offers services in professional Mold sampling and testing services for homes and offices. It helps to understand the causes for molds and possible measures to remove them.
Mold is present everywhere. Almost every home gets mold.
The trick is to get them before they grow and harm us and our home.


Welcome to another exciting edition of the KA Interview Series with Africa's Rising Stars.
Today, we have with us a very resourceful young man from South-East Nigeria who help coaches to make money. His name – Richard Okere Jr.
My name is Richard Okere Jr.; the first son in a family of 6 children. I am single and seriously searching (at the time of this interview).
I graduated from The University Of Nigeria Nsukka (AIFCE Campus) in 2015 with a second class lower in Education and Economics and currently based in Owerri, Imo state.
What specific solutions do you deliver in the marketplace?
The primary work I do is to help coaches create and launch profitable online affiliate programs.
On a second level, I help coaches build funnels for their product launches, webinars, online summit etc.; especially the techy parts like email automation, payment automation, website design, advertising, sales pages etc.
I've worked with a few companies and currently have local and international clients.
As a kid, I've always wanted to do extraordinary things. I have been a creator. I love to create things; make things and also help individuals function better.
In online marketing, I found an environment without limitations. I could almost do anything I wanted with a laptop and internet connection. I actually self-taught myself website design and most things I know now. When I learned that this passion could help me serve more people and earn sufficient income, it gave me the inspiration that drives me even till today.
What has been the most effective strategy you have used to grow your business?
I wouldn't say there is one specific strategy I applied but rather it's a combination of strategies.
I learn a lot of things everyday and apply the ones that make sense to me. My ultimate strategy is to show up consistently with value.
That's why I started my podcast called "This Is Your Wealth". That's why I started "The Smart Career Network". The more people hear about you and what you do, the more likely they are to work with you or recommend you.
Another very effective strategy is to collaborate with coaches. Instead of trying to do most things on my own, I do more things in partnership with coaches so we can promote each other.
Business growth also required that I laid strong foundations and build structures. Basic things like registering your business with CAC, having a corporate account, hosting a blog, building a mailing list, developing a signature method to deliver your solutions etc; They are the foundations and structures that have helped me grow my business.
How have you effectively leveraged the power of social media to push your message?
I would basically summarise it in two words – Share And Connect. Everyday we learn new things, ideas, strategies; we experience challenges and breakthroughs and social media to me is an avenue to share these things with people and help them learn from it.
Most entrepreneurs use their social media posts as marketing stunts and as much as I encourage persuasive writing (or posting), it shouldn't be primarily about building a huge fan base and make more money. It should be with the mindset to help people improve in specific areas of their lives.
So to answer your question directly, I share, share and share, especially on my area of expertise. I try to show up CONSISTENTLY with value.
What are some of the major challenges you have encountered so far and how did you overcome them?
There are three primary challenges I've encountered and to a great extent have overcome (or still improving on). First is lack of finance to acquire the tools and resources I needed. But I don't think of this as a limitation anymore but rather it's an opportunity.
"It's not what you don't have that limits you, but what you have but don't know how to use".
I learned to make the best use of what I have now, instead of brooding over what I don't have.
The second challenge is being consistent and seeing projects through. It's very easy for me to come up with ideas and strategy but I most times don't see them through. If I saw Mr. A doing this and getting results with it, I'd jump on it too without finishing the last thing I started.
But I can tell you I've improved. I developed a goal setting template that helps me focus on my important projects and also have an accountability group, and then also my mentors I have to answer to.
One other challenge is being able to say No to people. I get a lot of requests to do this or join that. And most times I find myself committing to things that shift my focus and steal my time. I'm still improving on this too.
Where do you see your business 5 years from now?
I still have one or two more companies to launch in some other fields. In fact I plan to launch another company by June this year. So in the next 5 years I will be among the leading experts in the world in affiliate programs. Those two other companies will grow to international standard and I'd have built a wonderful team to run them.
Any mentors? What is the best advice you have ever received from your Mentors?
Yes I have two mentors, all women. The best advices I've received are actually two and it came from each of them.
Second – "Find ways to reach out and collaborate".
For you, Excellence in Business is all about ….
Serving more people, earning sufficient income and being able to lead the kind of life God has designed for me.
Where can we find out more about you (website, social media, new book/course being released)?
I am launching a product for coaches called The Affiliate Program Launchpad. It's an all-in-one training and toolbox to help them create and launch their own affiliate program. You can sign up to my newsletter at www.richardokere.com/newsletter to get an update when I launch it.
Many thanks for speaking with us, Richard.


Premium Quality 92298X High Capacity Black Toner Cartridge compatible with the HP LaserJet 4/ 5. The use of compatible supplies does not void your printer warranty.
Premium Quality 92298A Black Toner Cartridge compatible with the HP LaserJet 4/ 5. The use of compatible supplies does not void your printer warranty.
Premium Quality 92298A Black MICR Toner Cartridge compatible with the HP LaserJet 4/ 5. The use of compatible supplies does not void your printer warranty.
Genuine OEM HP 92298A, HP98A Black Toner Cartridge. They are designed to work in the Apple LaserWriter 16/600 PS printer/copier(s).
Premium Quality 92274A Black Toner Cartridge compatible with the HP LaserJet 4L/ 4P. The use of compatible supplies does not void your printer warranty.
MSE 92298A Black Toner Cartridge compatible with the HP LaserJet 4, 5. The use of compatible supplies does not void your printer warranty.


text:
package org.virtue.config.db;

import java.nio.ByteBuffer;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.virtue.cache.utility.ByteBufferUtils;
import org.virtue.config.vartype.constants.BaseVarType;

public class DBTableIndex implements Iterable<LinkedList<Integer>> {
	BaseVarType keyType;
	Map<Object, LinkedList<Integer>> index;

	void decode(ByteBuffer buffer) {
		keyType = BaseVarType.getById(buffer.get() & 0xff);
		int keyCount = ByteBufferUtils.getSmartInt2(buffer);
		index = new HashMap<Object, LinkedList<Integer>>(keyCount);
		while (keyCount-- > 0) {
			Object key = keyType.decode(buffer);
			int rowCount = ByteBufferUtils.getSmartInt2(buffer);
			LinkedList<Integer> rows = new LinkedList<Integer>();
			while (rowCount-- > 0) {
				int rowId = ByteBufferUtils.getSmartInt2(buffer);
				rows.add(Integer.valueOf(rowId));
			}
			index.put(key, rows);
		}
	}

	public List<Integer> getDBRowsForValue(Object object) {
		return index.get(object);
	}

	public DBTableIndex(ByteBuffer buffer) {
		decode(buffer);
	}

	@Override
	public Iterator<LinkedList<Integer>> iterator() {
		return index.values().iterator();
	}
}


Electric buses will be gradually added to Metro Transit's bus fleet over the coming years under a plan presented this week to the Metropolitan Council.
The plan will begin going into effect next year, when Metro Transit starts the process of purchasing 19 new 40-foot electric buses. The buses would arrive in 2020 and will be used to help Metro Transit understand how electric buses effect scheduling, operations and maintenance.
Electric buses could also make up half of the fleet for future rapid bus lines on Chicago and Fremont avenues (D Line), Lake Street (B Line) and Hennepin Avenue (E Line). Additional 40-foot electric buses could go into service as early as 2022.
Combined, Metro Transit may purchase up to 125 electric buses by 2022. The fleet plan may evolve based on funding and an ongoing evaluation of electric bus technology.
Metro Transit's first electric buses will be used on the C Line, a rapid bus line that will largely replace Route 19 service in 2019.
The first of eight electric 60-foot buses is currently being built in St. Cloud by New Flyer (above).
Charging equipment will also be installed at the Heywood Garage and the Brooklyn Center Transit Center.
Metro Transit was among the first transit agencies in the country to begin using hybrid-electric buses. Today, the fleet includes more than 130 hybrid-electric buses, which are partially propelled by electric power stored in a large battery on the roof of buses.
Electric buses are fully-propelled by rechargeable batteries, eliminating tailpipe emissions.
Rebecca Freese has worked as a data science intern for Metro Transit's Strategic Initiatives Department since June 2016. She's currently a graduate student at the University of Minnesota studying biostatistics. Freese wrote this post for the Rider's Almanac to share her experience with the important Strategic Initiatives projects she's been working on and to entice others to apply to the Metro Transit internship program.
Growing up in a small town, public transportation wasn't an option for me until I moved to Minneapolis to study mathematics in college. Without a car, I soon started to rely on buses and trains to get where I needed to be each day. With graduation approaching, I happened across an internship with Strategic Initiatives at Metro Transit, and the rest is history. Here's a little more about the department and the projects I've worked on.
Strategic Initiatives' mission is to "improve the efficiency of transit operations and the customer experience with rigorous data analysis, research, and collaboration." What that boils down to is we develop models, data visualization techniques, and provide analysis to help the agency make data-driven decisions.
Examples of this include forecasting ridership for a certain route for the next few months, investigating the effects of route and fare changes, and analyzing customer and employee surveys. We mainly use the statistical computing language software R, but occasionally branch into other languages, depending on project need. We're a small group with a wide range of backgrounds, but we all have a common passion for our work.
What does a data science intern do?
During my time at Metro Transit, I've had the opportunity to work on a wide variety of projects. I've built an interactive mapping tool using R Shiny to visualize where bus accidents have occurred. Transit safety specialists can use this tool to determine if more training is needed on a particular stretch of road and to alert bus operators (drivers) about trickier locations.
I've also analyzed survey data that asks Metro Transit customers what features are important to have at a bus stop, and where the agency should prioritize placing shelters. The plot below shows the how important participants felt each of the features were to have at a bus stop. The dark and light green colors represent the proportion of people who felt a particular feature was essential or very important, whereas the purple and red indicate the proportion of people who thought that feature was just nice to have or not important. We can see that the benches, posted schedules, safe street crossings, and shelters had the highest proportion of people indicating they were essential or very important. Lights inside the shelter and wide sidewalks were marked as not important most frequently.
Similar questions were asked about where people preferred to have bus shelters, and highly ranked locations included where many people wait for the bus and near hospitals, social service centers, and senior housing. This information was then used as the basis for updating guidelines for where Metro Transit places bus shelters and what features to include in them.
A fun project I worked on during the summer of 2017 was visualizing when and where A Line customers tend to use the bike racks mounted on the front of the bus. Magnetic counters were installed on all A Line buses, so that when someone takes their bike on or off the bus, the time and location of the event is recorded. This data helps us better understand our multimodal customers, particularly, where they prefer to ride their bike and where they prefer to ride the bus. Maybe we should consider installing more secure bike lockers and tire pumps at stops where many bikers get on or off the bus? As more data are collected, we hope to be able to tell waiting customers if there's an open spot for their bike on the next bus approaching.
Below is an interactive plot showing the stations along the A Line where customers used the bike racks on the bus, between April 1, 2017 and December 31, 2017. Locations where someone puts their bike on the bus are at the top of the plot, and where they get off is on the bottom. The thicker the ribbon between two locations, the more people have taken that trip. Hover above "origins" or "destinations" to get the option to sort the stations alphabetically or by how many people use the bike racks. You can also click and drag the name of a station to a new location for custom sorting. Additionally, hovering above a colored ribbon gives the percentage of people who ride the bus with their bike on each of the segments.
We can see that for southbound customers, people have ridden the A Line with their bike 570 times between Rosedale Transit Center and Snelling and University, which is 8% of the total trips. The majority of customers who put their bike on the bus at Snelling and University, heading south, ride to the 46th St Station.
Play around with sorting the stations by origin or destination and see what inferences you can make.
I like this plot for a few reasons. One, because it's kind of pretty (although the director of our department wishes he could run a hairbrush through it to untangle it), and two, it shows a lot of information quickly.
I will admit, it's got a lot going on, but once you find an interesting pattern, you can dig deeper with other plots or models to investigate further. For example, why are the above-mentioned trips so popular? We could look into bike lanes in the area to see if that stretch of road is biker-friendly. It's very likely that the areas where bikers prefer to ride the bus are along roads with heavy traffic or without marked bike lanes. Snelling and University is probably a popular station because of its proximity to the Green Line.
Would you like to be a data science intern for Metro Transit?
If you've made it this far, I have good news! My internship is coming to an end this spring, so we are in search of a data science enthusiast to take my place. This is not the kind of internship where you're stuck going on coffee runs for the office or doing other mindless busywork. This is a hands-on environment to hone your skills while working with a supportive and dedicated team.
Students interested in interning at Metro Transit are invited to submit applications through Sunday, Feb. 4. Applicants must be enrolled in a post-secondary education program or have graduated within the past year. Interns work full-time, from late May through the end of the summer. Some interns may also stay on in part-time roles through the school year. All interns are paid $18.50 an hour.
Internship positions are available in Strategic Initiateives, Marketing, Engineering & Facilities, Finance, Service Development and Rail Operations. There are also positions in the Green Line Extension and Blue Line Extension project offices and the other Council divisions.
Review openings and learn more at the Metropolitan Council's internships page.
Residents are invited to provide feedback on plans for a new arterial Bus Rapid Transit Line that will serve North Minneapolis at a series of November open houses.
Like the A Line on Snelling Avenue, the C Line will improve on local bus service through a combination of enhanced stations, larger buses and faster, more frequent service.
The C Line will follow the Route 19 alignment between downtown Minneapolis and the Brooklyn Center Transit Center, with service on Penn Avenue and Olson Memorial Highway. In downtown Minneapolis, the C Line will operate on 7th and 8th streets.
A Draft Station Plan, published last week, provides more details on 24 locations where BRT stations are planned. The public can learn more about those station plans at the open house and provide comments through Dec. 6.
Feedback will be incorporated before plans are finalized and more detailed engineering work begins in 2016. With funding, construction will begin in 2017.
Good Question: How are the back doors on buses controlled?
In most cases, Metro Transit encourages bus passengers to exit through the rear door so boarding customers can get on quickly. But customers who use the rear exit often wonder why the doors don't always immediately open.
At bus stops, operators are instructed to open the front door and to unlock the rear exits.
When unlocked, customers using the back exit can open the doors by placing their hands on or near the "touch here" stickers. On newer buses, the doors will automatically open when motion is detected -- the doors do not need to be physically pushed. Older buses use an air-pressure system that is engaged when a customer presses on the door handles.
If the rear door does not open right away, customers are encouraged to say "back door" loud enough for the operator to hear. This can happen because it is sometimes difficult for operators to see customers who want to exit on a full bus.
On the METRO Red Line —and in the future on the METRO Orange Line —customers can board and exit at either the front or the back of the bus. Customers can use either door on these Bus Rapid Transit routes because the buses have fare card readers in both locations.
Note: Certain express routes are designated as Pay Exit. On Pay Exit routes, customers board but do not pay until they exit at the end of the route. To pay their fares, customers on these routes exit out the front door.
> Good Question: Why go out the back?