text:
And Now For a Word
Video game review entries
Game Review: Bully for Wii
There are a couple of valid criticism labelled at the Wii as a whole. First is that tons of its games are just a bunch loosely collected mini-games. The second is that those that aren't are often just lazy ports from other consoles.
Bully brilliantly manages to flip both of these criticisms around and provide something truly unique.
It's a game with a long history: originally released on PS2 under the title of Canis Canem Edit, the game has been re-worked for both the 360 and the Wii and given back its original title now the controversy has died down. For the record, you don't play as a bully, you fight them. The media missed that little fact in their outrage.
What's brilliant is that Bully plays like it was made for the Wii from the ground up, in many ways it's a perfect fit. Because at its core, Bully is just a collection of mini-games, but a collection that is strung together so very well you don't even realise.
There is no primary mechanic in this game. There's no one thing you spend most of the game doing. An arguement could be made that the fist-fighting fits this as it features in a lot of missions, but at most it accounts for 30% of your play time. About the same amount of time is spent travelling from place to place or racing on skateboards or bikes, while the rest of the game involves taking photos, sneaking around, mowing lawns, delivering papers, throwing stink bombs, boxing, collecting things, playing drums and so on.
Bully throws you into a boarding school environment and lets you do whatever you want to. Going to one of eight different lessons starts a mini-game, which vary from playing dodge-ball in gym class to Brain Training style quizzes in Maths. Or you can skive off entirely and follow the storyline missions, do some side-quests or just go off and explore. On the other hand, attending the lessons and doing well will grant you special abilities which benefit you in the rest of the game.
Bully has one of those mindless collect-em-up subquests where you have to collect 75 elastic bands hidden throughout the world. I normally hate that sort of thing. They're practically impossible without using a walkthrough or guide. Except in Bully, complete a certain geography lesson, and the approximate location of all the remaining ones is added to your map. So now if you're in an area for a mission, have some time to kill, and see there's a band nearby, you can search that area for a quick diversion.
It's that sort of pacing that also makes Bully such a brilliant game. You get up just before school starts in the morning, and have to be in bed by the end of the night or you'll collapse. This provides just the right amount of structure in the otherwise free-form game. You can start of in class in the morning, go out on missions of lunch time, head back to class if you're nearby when afternoon lessons start, stay out and skive if you're not. The evening is spent with either continuing on missions or doing some sub-quests before heading back to your dorm for the night.
Or perhaps you really want to do both classes that day so spent lunchtime around the school grounds searching for collectables. Since each day isn't particular long either, it has that brilliantly compulsive "just one more day" aspect that will keep you playing until 4am in the morning.
With all these opportunities for choice, Bully could be a disaster. Sure, you could try and 'power-game' it, ignoring the main storyline and doing all the of the classes as soon as possible, but the positioning of each element and the pacing of the game pushes you away from that and actively encourages you to spread your time around, to the point that when you finish the main storyline, you'll have done a good chunk of the side-quests, but still have a few things to finish off afterwards if you so wish.
Despite it's brilliance, Bully has been mostly over-looked when it comes to 'must-have' Wii games, probably because it's seen as being 'just a PS2 port'. But the fact is, the game is far more at home on the Wii that it ever was elsewhere. The piece-meal, mini-game centred approach, with multiple mechanics that all use the Wii controller in a different way is what the Wii does best. The controls are nearly perfect, with the one exception of it asking you to hit + and – at the same time – try that without hitting the Home button (wonderfully, the same section on the PC version asked you to press mouse wheel up and mouse wheel down together).
There's probably not enough new stuff in this version of Bully to make it worthwhile if you've played it on the PS2, but if you haven't played it at all it's complete must-have for the Wii. An exceptional game that proves that the words "console port" and "mini-games" don't have to spell failure for the Wii.
: 21 Feb 2009 16:17 | Tags: Game Review | Comments (0) | Close comments | Report a problem
Edinburgh (27)
An Engineer Down Under
Ian Henderson's Warwick Blogs Adventure
letter from an unknown suplex.
Theatre is life, film is art, TV is furniture
Stupid is as stupid does
Oh, I forgot to mention that I am attending an ALPHA session today (hence the research) partly for i… by tony moore on this entry
I totally agree with Max's philosophy list (blog#72) and use the same except for the other–dimension… by tony moore on this entry
Excellent point, that I hadn't seen expressed before, and a convincing one. I'm not convinced that C… by Chris on this entry
(I note they similarly dodge answering the question in that old Arnold movie from 1990, by fading th… by Unfrozencavebear on this entry
Immensely late ( 8 years) congratulations on writing fuller, better resolution to 'Life on Mars' "To… by Unfrozencavebear on this entry


text:
Theresa Chen
Theresa Chen graduated from Carnegie Mellon University in 2008 with a Bachelors in Fine Arts. During her undergrad, she concentrated on Electronic Media (3D animation, video, and interactive art & games) and 2D Media (painting, drawing, and sequential art). Her interest in college centered around communicating a concept to an audience through visualization and experience. It was during this time she grew a strong interest in interactive media and the concept of games as art.
While a graduate student at the ETC, Theresa was able to feed her curiosities in interactive media and found her interests turning towards game design and production, having a strong interest in creating game experiences and helping teams achieve the desired experience for their audience.
She is currently working at Electronic Arts as a Web Producer on the Sims 3 team.
Academically, her interests range from understanding storytelling within interaction to the effects of culture on play and play on culture. She experiments with the communicative qualities of interaction. Philosophically, she ponders the need for escape as the source of all things human and how games and play are a part of this. She cares a lot about how a game communicates its ideas to an audience not always familiar with games. With the constant innovations in technology, she looks forward to the opportunities the new media brings.
Fine Arts Carnegie Mellon

redpajama_set_name: RedPajamaCommonCrawl


text:
#include "src/core/lib/iomgr/port.h"

// This test won't work except with posix sockets enabled
#ifdef GRPC_POSIX_SOCKET

#include "test/core/end2end/end2end_tests.h"

#include <fcntl.h>
#include <string.h>

#include <grpc/grpc.h>
#include <grpc/grpc_posix.h>
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
#include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/iomgr/socket_utils_posix.h"
#include "src/core/lib/iomgr/unix_sockets_posix.h"
#include "test/core/util/test_config.h"

typedef struct { int fd_pair[2]; } sp_fixture_data;

static void create_sockets(int sv[2]) {
  int flags;
  grpc_create_socketpair_if_unix(sv);
  flags = fcntl(sv[0], F_GETFL, 0);
  GPR_ASSERT(fcntl(sv[0], F_SETFL, flags | O_NONBLOCK) == 0);
  flags = fcntl(sv[1], F_GETFL, 0);
  GPR_ASSERT(fcntl(sv[1], F_SETFL, flags | O_NONBLOCK) == 0);
  GPR_ASSERT(grpc_set_socket_no_sigpipe_if_possible(sv[0]) == GRPC_ERROR_NONE);
  GPR_ASSERT(grpc_set_socket_no_sigpipe_if_possible(sv[1]) == GRPC_ERROR_NONE);
}

static grpc_end2end_test_fixture chttp2_create_fixture_socketpair(
    grpc_channel_args *client_args, grpc_channel_args *server_args) {
  sp_fixture_data *fixture_data = gpr_malloc(sizeof(*fixture_data));

  grpc_end2end_test_fixture f;
  memset(&f, 0, sizeof(f));
  f.fixture_data = fixture_data;
  f.cq = grpc_completion_queue_create_for_next(NULL);
  f.shutdown_cq = grpc_completion_queue_create_for_pluck(NULL);

  create_sockets(fixture_data->fd_pair);

  return f;
}

static void chttp2_init_client_socketpair(grpc_end2end_test_fixture *f,
                                          grpc_channel_args *client_args) {
  grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
  sp_fixture_data *sfd = f->fixture_data;

  GPR_ASSERT(!f->client);
  f->client = grpc_insecure_channel_create_from_fd(
      "fixture_client", sfd->fd_pair[0], client_args);
  GPR_ASSERT(f->client);

  grpc_exec_ctx_finish(&exec_ctx);
}

static void chttp2_init_server_socketpair(grpc_end2end_test_fixture *f,
                                          grpc_channel_args *server_args) {
  grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
  sp_fixture_data *sfd = f->fixture_data;
  GPR_ASSERT(!f->server);
  f->server = grpc_server_create(server_args, NULL);
  GPR_ASSERT(f->server);
  grpc_server_register_completion_queue(f->server, f->cq, NULL);
  grpc_server_start(f->server);

  grpc_server_add_insecure_channel_from_fd(f->server, NULL, sfd->fd_pair[1]);

  grpc_exec_ctx_finish(&exec_ctx);
}

static void chttp2_tear_down_socketpair(grpc_end2end_test_fixture *f) {
  gpr_free(f->fixture_data);
}

/* All test configurations */
static grpc_end2end_test_config configs[] = {
    {"chttp2/fd", FEATURE_MASK_SUPPORTS_AUTHORITY_HEADER,
     chttp2_create_fixture_socketpair, chttp2_init_client_socketpair,
     chttp2_init_server_socketpair, chttp2_tear_down_socketpair},
};

int main(int argc, char **argv) {
  size_t i;

  grpc_test_init(argc, argv);
  grpc_end2end_tests_pre_init();
  grpc_init();

  for (i = 0; i < sizeof(configs) / sizeof(*configs); i++) {
    grpc_end2end_tests(argc, argv, configs[i]);
  }

  grpc_shutdown();

  return 0;
}

#else /* GRPC_POSIX_SOCKET */

int main(int argc, char **argv) { return 1; }

#endif /* GRPC_POSIX_SOCKET */

redpajama_set_name: RedPajamaGithub


That's what Lee Renaldo shouts at the end of this spoken-word piece with guitars, bass and drums near the end of Sonic Youth's last universally acclaimed album. It's not really about the future, but rather about seeing a band stumble through a live performance. But, to me, that "Hello, 2015" felt like a declaration of purpose.
"Hello 2015!" Lee Ranaldo screams, somewhat optimistically, near the end of this record, just before they launch us on a sparkling sailing voyage towards that very year.
It's like, for the first time, they've really considered their place in our past and, more importantly, in their future. And they like what they see. And if they keep making records this strong and loose, they just might meet themselves on the other side.
In 1995, when Washing Machine came out, 2015 seemed an impossible distance away. Another century, another millennium, another universe. And yet, out of all of the bands active in 1995, I was sure that Sonic Youth was going to be one of the ones still standing here on New Years Day 2015 and shout back "Hello, 1995" as they did an All Tomorrows Parties set of Washing Machine in its entirety.
Meanwhile, 1995 still seems impossibly close, like if I turned around and walked around that corner over there, I'd be able to say hello to it. For much of 1995 I was living in Oakland and Rox was living in Hollywood, and – just like Ranaldo points out earlier in the song – LA was the most confusing place I'd ever been to.
Of course, little did I know 20 years ago that by the time 2015 rolled around, I'd have been living here for over 13 years, with that initial confusion (you drive SOUTH to get to the ocean?) long since dissipated.
So hello, 2015. Please be better.


text:
The Showmen è l'album di debutto del gruppo musicale italiano The Showmen, pubblicato nel 1968.

Tracce
Lato A

Lato B

Formazione
 James Senese - voce, sassofono tenore, sassofono baritono, flauto, percussioni
 Elio D'Anna - sassofono tenore, sassofono baritono, flauto
 Giuseppe Botta - chitarra
 Luciano Maglioccola - tastiere
 Mario Musella - voce, basso
 Franco Del Prete - batteria, percussioni

Collegamenti esterni

redpajama_set_name: RedPajamaWikipedia


For WiFi-hungry travelers, the true announcement during the Apple iPad event was the Apple SIM. This features allows users to seamlessly switch carriers.
Google is helping travelers save money with a new Now card that tells users when a price has dropped on a flight.


A road trip around most parts of SA this week saw seeders going flat out to get crop in the ground during the optimal seeding window. Rain fell during the week and continues to fall across SA. Growers in the Clare and Crystal Brook areas have reported falls of 20-30mm. It's a similar story around the Upper South East and into areas of the Yorke Peninsular. The Murraylands and Murray Mallee however are still looking to the skies for a good drop of rain. Falls of 2-15mm have fallen in these regions. You can feel the change in the seasons over the past few weeks with the cool, shorter days proving good for soil moisture levels.
Those with limited rainfall have either kicked off with dry seeding or are holding for another week in the hope we see a few more drops. Those who have canola in their regular program are well under way with many moving onto pulses and barley. With the rate seeding occurs these days, we should start to see it wrap up by the end of May even for those making a slightly later start.
to be expected, the rain brought with it a slight softening in the new and old crop markets, which sees most continuing to sit out and watch.
Prices as at Friday 11th May 2018.


text:
Q: parameterized function invoked without arguments def snd(pair):
    x,y = pair
    return y

list_of_tuples = [(1,2), (3,4), (5,0)]
print(min(list_of_tuples, key=snd(list_of_tuples)))

the above function takes pair as an argument but when tries calling it, it is called without any arguments.
Why so?

A: Many functions in Python have an optional key argument that takes a callable (a function) that is applied on each of the elements (here, each tuple pair).
You don't need to supply the argument yourself, min does that for you. From the docs on min:

There are two optional keyword-only arguments. The key argument specifies a one-argument ordering function like that used for list.sort().

Take a look here for additional information on key functions.

A: Your code was almost correct, just indent after snd defintion and only use the function name for key argument as min function will automatically pass the list as an argument to the function.
def snd(pair):
  x,y = pair
  return y

list_of_tuples = [(1,2), (3,4), (5,0)]
print(min(list_of_tuples, key=snd))

redpajama_set_name: RedPajamaStackExchange


For hundreds of years, apple cider vinegar has found its way into a variety of home remedies and cures for everything from skin conditions to stomach problems. It is also cited a potential kidney infection cure. Unfortunately, drinking apple cider vinegar while you have a kidney infection could worsen your condition. If you think you have a kidney infection, see a doctor immediately.
Kidney infections often start as an infection somewhere along the urinary tract. Causes include catheter use, kidney stones, prostate enlargement and urinary tract abnormalities, according to the National Kidney and Urologic Diseases Information Clearinghouse. Symptoms include blood in the urine, back pain, nausea, vomiting and fever.
Apple cider vinegar carries numerous healthy qualities. This vinegar contains malic acid, which may prevent bacteria from flourishing in the intestines. According to the Global Healing Center, this may make it less likely for bacteria to attach to the kidneys and cause an infection.
The malic acid in apple cider vinegar is thought to play the largest role in preventing kidney infections. According to the Global Healing Center, apple cider vinegar has a pH of around 3.0, which helps create an environment inhospitable to bacteria. While apple cider vinegar may help prevent an infection, it will not cure one.
Kidney infections can be extremely dangerous and are treated with antibiotics. You cannot treat these infections with apple cider vinegar or any other home remedy. According to the National Kidney and Urologic Diseases Information Clearinghouse, kidney infections can cause severe pain, fever and vomiting. If severe, you may need to be hospitalized to receive fluids and medication. Always see your doctor right away if you think you have a kidney infection.
Does Cranberry Juice Treat Kidney Infection?
What Are the Causes of Newborns Not Eating?


PropGOLuxury offers the greatest selection of Snowmass luxury homes for sale and Snowmass luxury homes for rent on a convenient property listing portal. If you are looking to buy Snowmass luxury property or lease Snowmass luxury property we make it easy to find your dream home by letting you filter using listing search results. You can also find local Snowmass real estate agents and Snowmass property professionals to help you sell Snowmass luxury homes or rent your Snowmass luxury homes.


text:
Fans spend night in the cold for a chance to meet Tyrann Mathieu
Hundreds waited outside Dick's Sporting Goods for chance to meet the Honey Badger
Updated: 6:52 AM CST Feb 11, 2020
KMBC 9 News Staff
RIGHT NOW, THE CHIEFS CRAZE IS ALIVE AND WELL AND TAKING OVER ZONA ROSA. MATHIEU. HE HAS AN AUTOGRAPH SESSION A LITTLE LESS THAN 13 HOURS FROM NOW. AND FANS ARE ALREADY LINED UP TO SEE HIM. KMBC 9'S MATT EVANS IS LIVE THERE THIS MORNING, AND MATT, WE'RE HEARING SOME FANS SPENT ALL NIGHT OUTSIDE? MATT: MORE THAN JUST ALL NIGHT. MOST OF THE AFTERNOON YESTERDA. THE RULE ABOUT BEING FIRST IN LINE IS SOMETHING WHERE YOU HAVE TO TALK TO NEWS CAMERAS. >> 3:30 YESTERDAY AFTERNOON. MATT: WHY DID YOU WANT TO GET HERE SO SOON? >> I REALLY WANTED THIS AUTOGRAPH. MATT: HOW THE LESS 14 HOURS BEEN IN LINE? HOW EXCITED WERE YOU WHEN YOU GOT TO SEE THE SUPER BOWL VICTORY? >> I WAS JUMPING UP AND DOWN. I ALMOST LOST MY VOICE. MATT: THANKS FOR TALKING TO US. RICKY IS NOT THE ONLY ONE. RICKY GOT HERE AT 3:30 YESTERDAY AFTERNOON. BEHIND. THE AUTOGRAPH SIGNING WILL BE AT 7:00 TONIGHT HERE AT DICK'S SPORTING GOODS. ALL OF THESE PEOPLE ARE LINED UP BECAUSE THEY WILL'S HAND OUT WRISTBANDS AT 9:00 THIS MORNING. THERE IS A LIMITED NUMBER AVAILABLE. YOU HAD TO GET HERE EARLY. YOU'VE GOT PEOPLE THAT ARE PREPARED FOR THIS. THIS IS ALMOST LIKE A TAILGATE AT ARROWHEAD STADIUM. WATCH YOUR STEP, THERE IS A CURB. YOU'VE GOT THE OTHER END OF THE BUILDING. THERE ARE MORE THAN 250 PEOPLE IN LINE ALREADY. PEOPLE ARE EXCITED. HOW LONG HAVE YOU BEEN HERE? >> I'VE BEEN HERE SINCE 10:30 LAST NIGHT. I'VE BEEN UP ALL NIGHT. MATT: HAVE YOU SLEPT SINCE THE SUPER BOWL? >> NOT MUCH. MATT: YOU CAN SEE HOW FAR THE LINE GOES. WE ARE LIVE IN ZONA ROSA THIS MORNING.
More than 200 Chiefs fans spent the night in the cold for a chance to meet Tyrann Mathieu.Mathieu is scheduled to sign autographs at the DICK's Sporting Goods store at Zona Rosa at 7:30 p.m. Tuesday.The store said it would distribute 225 wristbands to fans to meet Mathieu on a first come, first served basis at 9 a.m. By 6 a.m., there were more fans than available wristbands.Large crowds have greeted Chiefs players across the Kansas City metro ever since their victory in Super Bowl 54.
KANSAS CITY, Mo. —
More than 200 Chiefs fans spent the night in the cold for a chance to meet Tyrann Mathieu.
Mathieu is scheduled to sign autographs at the DICK's Sporting Goods store at Zona Rosa at 7:30 p.m. Tuesday.
The store said it would distribute 225 wristbands to fans to meet Mathieu on a first come, first served basis at 9 a.m.
By 6 a.m., there were more fans than available wristbands.
Large crowds have greeted Chiefs players across the Kansas City metro ever since their victory in Super Bowl 54.


The Liwa Physical Framework Master Plan anticipates growth and change from a low-key gathering place and commercial center for the residents of the Liwa Crescent's desert oasis communities, into the administrative capital of Abu Dhabi's western region, Al Gharbia. Built upon SERA's sustainable design methodology, the Plan maximizes the influence of the existing environment and its social and cultural history, while minimizing the impact of development to allow Liwa to become a well-scaled evolution of itself.
As part of the initial visioning for the Liwa, Abu Dhabi Master Plan, SERA led client, government and local stakeholders through a series of eco-charrettes to formulate the underlying basis for the project's design. Using Civic Ecology resource flow mapping, participants created diagrams illustrating desired future energy, water and food systems for this new capital city of the western region. The systems flow maps were used as the basis for the land use, open space and public infrastructure planning.
The plan will result in Liwa becoming a model of sustainability, where energy consumed equals energy locally generated and potable water is re-used for various purposes before it is sent into the ground to replenish the fossil aquifer. Its streets and related land uses will be oriented to take advantage of prevailing breezes and to maximize the potential for shade and relief from the summer sun. When complete, Liwa is expected to achieve 3 (out of 4) Pearls in the Estidama New Communities Rating System.


text:
Cheap flights from Johannesburg to Bosnia and Herzegovina
What is the cheapest month to fly from Johannesburg to Bosnia and Herzegovina?
The best pricing can be found in the month of May. Prices to Bosnia and Herzegovina from Johannesburg average R11 805. You can even find prices in May for less than R11 805, as users have found deals to Bosnia and Herzegovina from as low as R9 796. The month of June appears to be one of the more expensive times to travel to Bosnia and Herzegovina from Johannesburg. Flying in the targeted month can save you up to 26%.
When is the cheapest time to fly from Johannesburg to Bosnia and Herzegovina (ZA1 - BA)?
Regardless of the time of day you decide to fly, the ticket price will remain around the same. Book flights from Johannesburg to Bosnia and Herzegovina as you normally would.
Useful info, stats and facts about Johannesburg to Bosnia and Herzegovina flights.
How popular is this Johannesburg to Bosnia and Herzegovina flight route?
This flight path from Johannesburg to Bosnia and Herzegovina was viewed by 220 users in the past month. Keep an eye out for changes in search interest prior to high and low season.
What are the most popular airlines that fly from Johannesburg to Bosnia and Herzegovina?
When booking a flight from Johannesburg to Bosnia and Herzegovina, you may want to consider flying on SWISS, Austrian Airlines or Qatar Airways as they are the most popular for this route.
Flights to Bosnia and Herzegovina from Johannesburg
Flights to Johannesburg
Flights to Bosnia and Herzegovina
Flights from Johannesburg
Car Rentals in Bosnia and Herzegovina
Car Rentals at Sarajevo
View COVID Travel Restrictions for Bosnia and Herzegovina
Can I fly to Bosnia and Herzegovina from Johannesburg right now?
Information is based on travel restrictions from Johannesburg to Bosnia and Herzegovina
Most visitors from Johannesburg need to provide a negative COVID-19 test result and/or quarantine to enter Bosnia and Herzegovina.
Visitors from Johannesburg must present a negative RT-PCR (NAAT) or Antigen (quick-test) test taken 72 for RT-PCR (NAAT) and 48 Antigen (quick-test) hours before departing to Bosnia and Herzegovina.
Visitors from Johannesburg are not required to quarantine after entering Bosnia and Herzegovina.
Can I fly back to Johannesburg from Bosnia and Herzegovina?
Returning to Johannesburg from Bosnia and Herzegovina
Visitors from Bosnia and Herzegovina must present a negative RT-PCR (NAAT) test taken 72 hours before departing to Johannesburg.
Visitors from Bosnia and Herzegovina are not required to quarantine after entering Johannesburg.
Top 3 airlines flying from Johannesburg to Bosnia and Herzegovina
The chart below displays the airlines Cheapflights users travelling from Johannesburg to Bosnia and Herzegovina choose most often. Cheapest and average prices are based on aggregated data from the past 12 months.
AverageR13 878
Search SWISS flights
CheapestR10 051
Search Qatar Airways flights
Search Turkish Airlines flights
Flights from Cape Town to Palma de Mallorca
Flights from Johannesburg OR Tambo Airport to Polokwane
Flights from East London to Mumbai
Flights from Cape Town to Bali
Flights to Jakarta
Flights from Johannesburg to Sarajevo


Here's an updated version of the hack for the popular game, Bloons Tower Defense. Make sure that you have Cheat Engine version 5.5 or better, and then just follow along with the tutorial so you can hack the game and earn higher scores!
This tutorial shows you how to execute a speed hack when playing Roblox. All you need is the free game hacking program Cheat Engine. Open Roblox, then open Cheat Engine and use the following hack to change the speed of the game.
Have the highest score out of all your friends when playing the Facebook game Tower Blocks! This tutorial shows you how to hack the game to give yourself as high a score as you'd like using the program Cheat Engine.


text:
package org.apache.beam.fn.harness.state;

import static org.apache.beam.runners.core.construction.ModelCoders.STATE_BACKED_ITERABLE_CODER_URN;

import com.google.auto.service.AutoService;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.function.Supplier;
import org.apache.beam.model.fnexecution.v1.BeamFnApi.StateRequest;
import org.apache.beam.runners.core.construction.CoderTranslation.TranslationContext;
import org.apache.beam.runners.core.construction.CoderTranslator;
import org.apache.beam.runners.core.construction.CoderTranslatorRegistrar;
import org.apache.beam.sdk.coders.IterableLikeCoder;
import org.apache.beam.sdk.fn.stream.DataStreams;
import org.apache.beam.sdk.util.BufferedElementCountingOutputStream;
import org.apache.beam.sdk.util.VarInt;
import org.apache.beam.vendor.grpc.v1p26p0.com.google.protobuf.ByteString;
import org.apache.beam.vendor.guava.v26_0_jre.com.google.common.annotations.VisibleForTesting;
import org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.ImmutableMap;
import org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.Iterables;
import org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.Iterators;
import org.apache.beam.vendor.guava.v26_0_jre.com.google.common.io.ByteStreams;

/**
 * A {@link BeamFnStateClient state} backed iterable which allows for fetching elements over the
 * portability state API. See remote references for
 * additional details.
 *
 *
One must supply a {@link StateBackedIterableTranslationContext} when using {@link
 * CoderTranslator#fromComponents} to be able to create a {@link StateBackedIterable.Coder}.
 */
public class StateBackedIterable<T> implements Iterable<T> {

  private final BeamFnStateClient beamFnStateClient;
  private final org.apache.beam.sdk.coders.Coder<T> elemCoder;
  @VisibleForTesting final StateRequest request;
  @VisibleForTesting final List<T> prefix;

  public StateBackedIterable(
      BeamFnStateClient beamFnStateClient,
      String instructionId,
      ByteString runnerKey,
      org.apache.beam.sdk.coders.Coder<T> elemCoder,
      List<T> prefix) {
    this.beamFnStateClient = beamFnStateClient;
    this.elemCoder = elemCoder;

    StateRequest.Builder requestBuilder = StateRequest.newBuilder();
    requestBuilder
        .setInstructionId(instructionId)
        .getStateKeyBuilder()
        .getRunnerBuilder()
        .setKey(runnerKey);
    this.request = requestBuilder.build();
    this.prefix = prefix;
  }

  @Override
  public Iterator<T> iterator() {
    return Iterators.concat(
        prefix.iterator(),
        new DataStreams.DataStreamDecoder(
            elemCoder,
            DataStreams.inbound(
                StateFetchingIterators.readAllStartingFrom(beamFnStateClient, request))));
  }

  /**
   * Decodes an {@link Iterable} that might be backed by state. If the terminator at the end of the
   * value stream is {@code -1} then we return a {@link StateBackedIterable} otherwise we return an
   * {@link Iterable}.
   */
  public static class Coder<T> extends IterableLikeCoder<T, Iterable<T>> {

    private final BeamFnStateClient beamFnStateClient;
    private final Supplier<String> instructionId;

    public Coder(
        BeamFnStateClient beamFnStateClient,
        Supplier<String> instructionId,
        org.apache.beam.sdk.coders.Coder<T> elemCoder) {
      super(elemCoder, "StateBackedIterable");
      this.beamFnStateClient = beamFnStateClient;
      this.instructionId = instructionId;
    }

    @Override
    protected Iterable<T> decodeToIterable(List<T> decodedElements) {
      return decodedElements;
    }

    @Override
    protected Iterable<T> decodeToIterable(
        List<T> decodedElements, long terminatorValue, InputStream in) throws IOException {
      if (terminatorValue == -1L) {
        long tokenLength = VarInt.decodeLong(in);
        ByteString token = ByteString.readFrom(ByteStreams.limit(in, tokenLength));
        return new StateBackedIterable<>(
            beamFnStateClient, instructionId.get(), token, getElemCoder(), decodedElements);
      } else {
        throw new IllegalStateException(
            String.format(
                "StateBackedIterable expected terminator of 0 or -1 but received %s.",
                terminatorValue));
      }
    }

    @Override
    public void encode(Iterable<T> iterable, OutputStream outStream) throws IOException {
      if (!(iterable instanceof StateBackedIterable)) {
        super.encode(iterable, outStream);
        return;
      }

      StateBackedIterable<T> stateBackedIterable = (StateBackedIterable<T>) iterable;

      DataOutputStream dataOutStream = new DataOutputStream(outStream);
      // We don't know the size without traversing it so use a fixed size buffer
      // and encode as many elements as possible into it before outputting the size followed
      // by the elements.
      dataOutStream.writeInt(-1);
      BufferedElementCountingOutputStream countingOutputStream =
          new BufferedElementCountingOutputStream(dataOutStream, -1L);
      // Encode only the prefix
      for (T elem : stateBackedIterable.prefix) {
        countingOutputStream.markElementStart();
        getElemCoder().encode(elem, countingOutputStream);
      }
      countingOutputStream.finish();
      // Make sure all our output gets pushed to the underlying outStream.
      dataOutStream.flush();

      // Append 'len(token) token' after the -1 stream terminator.
      VarInt.encode(
          stateBackedIterable.request.getStateKey().getRunner().getKey().size(), outStream);
      stateBackedIterable.request.getStateKey().getRunner().getKey().writeTo(outStream);
    }
  }

  /** Additional parameters required by the {@link StateBackedIterable.Coder}. */
  public interface StateBackedIterableTranslationContext extends TranslationContext {
    BeamFnStateClient getStateClient();

    Supplier<String> getCurrentInstructionId();
  }

  /** A {@link CoderTranslatorRegistrar} for {@code beam:coder:state_backed_iterable:v1}. */
  @AutoService(CoderTranslatorRegistrar.class)
  public static class Registrar implements CoderTranslatorRegistrar {

    @Override
    public Map<Class<? extends org.apache.beam.sdk.coders.Coder>, String> getCoderURNs() {
      return Collections.singletonMap(
          StateBackedIterable.Coder.class, STATE_BACKED_ITERABLE_CODER_URN);
    }

    @Override
    public Map<
            Class<? extends org.apache.beam.sdk.coders.Coder>,
            CoderTranslator<? extends org.apache.beam.sdk.coders.Coder>>
        getCoderTranslators() {
      return ImmutableMap.of(StateBackedIterable.Coder.class, new Translator());
    }
  }

  /**
   * A {@link CoderTranslator} for {@code beam:coder:state_backed_iterable:v1}.
   *
   *
One must supply a {@link StateBackedIterableTranslationContext} during {@link
   * CoderTranslator#fromComponents} to be able to successfully create an instance.
   */
  private static class Translator implements CoderTranslator<StateBackedIterable.Coder<?>> {

    @Override
    public List<? extends org.apache.beam.sdk.coders.Coder<?>> getComponents(
        StateBackedIterable.Coder<?> from) {
      return Collections.<org.apache.beam.sdk.coders.Coder<?>>singletonList(from.getElemCoder());
    }

    @Override
    public StateBackedIterable.Coder<?> fromComponents(
        List<org.apache.beam.sdk.coders.Coder<?>> components,
        byte[] payload,
        TranslationContext context) {
      if (context instanceof StateBackedIterableTranslationContext) {
        return new StateBackedIterable.Coder<>(
            ((StateBackedIterableTranslationContext) context).getStateClient(),
            ((StateBackedIterableTranslationContext) context).getCurrentInstructionId(),
            Iterables.getOnlyElement(components));
      } else {
        throw new IllegalStateException(
            String.format(
                "Unable to construct coder %s. Expected translation context %s but received %s.",
                STATE_BACKED_ITERABLE_CODER_URN,
                StateBackedIterableTranslationContext.class.getName(),
                context.getClass().getName()));
      }
    }
  }
}


text:
Sub-Saharan Africa's Agriculture and COVID-19: How the Pandemic Will (re)Shape Food Markets
Richard Msengi and Gladys Mgakula work in one of the poly-tunnels of a hydroponic farming scheme in the Makuleke Village which supplies fresh vegetables to lodges in the nearby Kruger National Park. Image: Getty, Gideon Mendel/Corbis
The COVID-19 pandemic has put the global food system under sustained pressure and has triggered various policy responses to manage both supply and demand.
Given the significance of the agricultural sector to the broader economy and sub-Saharan Africa's over-reliance on food imports, local and global policy responses to the COVID-19 pandemic are a subject of critical concern for policymakers.
The food production and trade policies implemented by African governments in response to the pandemic are not particularly new, and are often go-to instruments during climatic shocks such as droughts and flooding. However, the nature of the COVID-19 pandemic calls for a sharper, better targeted and more effective approach.
Agricultural policy responses to the pandemic in markets on which Africa relies for imports directly affect the region's food markets through commodity price volatility, the availability of supplies, and farmers' planting decisions.
Unlike developed parts of the world (such as the US and EU), sub-Saharan African countries do not have the fiscal capacity to provide sufficient social protection and income support to augment food demand and reduce poverty. Instead, the region's consumers are experiencing diminished incomes, reduced remittances and higher food prices. All of this has been exacerbated by reduced physical access to food as a result of markets' intermittent functioning and restrictions on public transport.
The impact of COVID-19, together with other shocks such as locusts, fall armyworm and climate change, suggests the need for policymakers to be agile in their responses to multi-layered crises. The era of heightened uncertainty, volatility and complexity resulting from these multiple crises, with COVID-19 being a key turning point, calls for a fundamental change to the governance and architecture of sub-Saharan Africa's food system.
Wandile Sihlobo
Tinashe Kapuya
Gracelin Baskaran
SAIIA Policy Insights No 105, May 2021
Agriculture + Food security, COVID-19, Food Markets


Previous results from our laboratory demonstrated that S(-)nornicotine, a major tobacco alkaloid and an active nicotine metabolite present in the CNS, increases dopamine release from rat striatal slices in a concentration-dependent and calcium-dependent manner. The present study determined if S(-)nornicotine-evoked dopamine release was the result of nicotinic receptor stimulation. Stereoselectivity and the ability of classical noncompetitive and competitive nicotinic receptor antagonists (mecamylamine (MEC) and dihydro-β-erythroidine (DHβE), respectively) to inhibit S(-)nornicotine-evoked [3H]overflow from [3H]dopamine-preloaded rat striatal slices were investigated. Nornicotine increased [3H]overflow in a stereoselective manner at concentrations from 1 to 100 μM. MEC (0.01-100 μM) or DHβE (0.01-10 μM) alone did not evoke [3H]overflow. However, 100 μM DHβE evoked [3H]overflow, and therefore, was not used in experiments investigating antagonism of S(-)nornicotine's effect. MEC and DHβE inhibited S(-)nicotine- (10 μM) evoked [3H]overflow in a concentration-dependent manner. Concentrations of MEC (100 μM) and DHβE (10 μM) which maximally inhibited S(-)nicotine's effect were chosen for subsequent experiments determining inhibition of the effect of S(-)nornicotine (0.1 μM-3 mM). MEC and DHβE significantly inhibited the effect of low concentrations (<100 μM) of S(-)nornicotine; however, higher concentrations (>100 μM) of S(-)nornicotine were not inhibited by either nicotinic antagonist. Taken together, the results suggest that low concentrations of S(-)nornicotine stimulate nicotinic receptors to evoke the release of dopamine from dopaminergic presynaptic terminals. Thus, nornicotine, which acts as an agonist at neuronal nicotinic receptors, may contribute to the neuropharmacological effects of nicotine and tobacco use.
Send reprint requests to: Dr. Linda P. Dwoskin, College of Pharmacy, University of Kentucky, Rose Street, Lexington, KY 40536-0082.
↵1 This work was supported by grants from the Tobacco and Health Research Institute, Lexington, Kentucky and from the National Institute on Drug Abuse (DA-08656).


Photoshop is an amazing tool that most photographers find themselves using on a daily basis. It has countless features, and with the new Photoshop CC, more are added with each update. As a beginner to the program, it can get a little overwhelming on where to start learning all of the complex elements. In this, video you will see 10 of the features you need to know.
One of the newer features to Photoshop. This tool automatically identifies faces within an image and allows you to make adjustments to the size and shape of specific facial features.
This allows you to take the color grading from a select image and somewhat copy it over to another image.
Using the marque tool is a fast and easy way to make selections. But by using the spacebar and a right-click, you can also make a quick move and edit to the selection without starting over.
It's more of technique rather than a feature, but this process is used by many professionals and is one of the best ways to retouch an image.
Making selection of hair is one of the hardest sections to make within Photoshop. By using the calculations tool, it can be a lot easier.
This is a way for you to quickly apply sharpening to certain areas of an image while either leaving the rest of the image alone or applying a different level of sharpening.
Using a color range to make quick selections is an amazing feature, but this feature is also built directly into the masking tool. This allows you to quickly make masks based on a color range.
Adjustment layers can be used to make changes to an image, but by combining those with blend modes, you can open up a lot more possibilities.
The video shows you how to access the Camera Raw tool even when not using a raw image. This allows you to use the easy and useful sliders to adjust an image.
I see Frequency Seperation more as a dated easy fix option and I'm guessing most high grade retouchers use dodge and burn to greater effect.
There are tools out there (Plug In's) which might make you think differently.
Sounds like a bad deal.
Its not just about using something its about knowing how to use it if you apply it correctly then layer mask and control the opacity it comes out pretty great its a time saver and also a way that you can control it. I have seen some amazing photographers use it i have been trying it out for the pass 10 days and i love it.
Would love to see some of your retouching work.
I really like what they did with Wow! Frequency Equalizer Pro.
It is like Frequency Separation done right.
I would add LAB mode to the list.
Great titles. Meanwhile, however, Refine Edge, Select and Mask are available to select hair, even.. love your tip.
For retouching any image, frequency separation can be a great choice in Photoshop. Specially for touching up the face its just perfect. I would love to show an example of retouching here which has been done by using frequency separation.
I have been told that dust & scratches works well to instead of frequency separation. I would love to hear thoughts on that.
I think within frequency seperation it works better than gaussian blur for sure.
Dont use Frequency Seperation for retouching! Please! I am a full time retoucher for some big players (YSL, Loreal, Essie, and so on). Nobody in this stage is using FS, please dont use it!
frequency separation is a great tool for people that dont need the extreme detail required by high end publications. Most people cant afford to spend hours retouching a single image so frequency separation gives users a quick option that also yields very good results.
Frequency Separation has its place in the tool kit just like every other tool in photoshop used for retouching. If your using it to just smooth skin then you are not using it right. Its a great blending tool for transitions between highlights and shadows. I use frequency separation quite often but majority of the work is done in dodge and burn. It's not about speed its about what is the best tool for the job. Using Frequency Separation with the mixing brush tool can be quite amazing. It's understanding how and when to use the tool.