How to setup a Google App Engine Python environment, on Mac OSX, using Homebrew

I want to create Google App Engine apps using Python SDK on my OSX machine: setting up the enviroment should be easy, but I neverthless spent some time putting together all the required pieces. The whole process is composed by four parts: install Homebrew, install Python 2.7 thru brew, install Google App Engine Python SDK and setting up the project environment. Let’s go step by step.

Homebrew

Simple and straightforward, instructions on Homebrew homepageXcode Command Line Tools is the only prerequisite.
Personally, I’ve used a different install folder (a different prefix) instead of /usr/local, but it’s just me and some bottles could not work. So the suggestion is to stay with the default prefix. Here the step I used:

xcode-select --install
curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install > ~/brew.rb
sed -i '' 's/HOMEBREW_PREFIX = .*/HOMEBREW_PREFIX = "#{Dir.home}\/tools/homebrew"/' ~/brew.rb
ruby ~/brew.rb

Then I added the Homebrew custom prefix to my PATH adding the following line at the end of ~/.bash_profile

PATH=”$HOME/tools/homebrew/bin:$PATH

To check that everything works, a call to brew doctor should return just a warning about the custom prefix.

Python

Once Homebrew is in place, install Python is a breeze:

brew install python

Then, I installed the additional tools required to properly work, pip (already installed with Python 2.7, but it may need an update) and virtualenv

pip install -U pip
pip install virtualenv

Google Cloud SDK + App Engine Python

Even if the site suggest to download GoogleAppEngine Launcher, I chose to use Google Cloud SDK, in order to have one single point of access for all the Google Cloud related stuff, instead that different runtimes scattered around my machine:

curl https://sdk.cloud.google.com | bash
exec -l $SHELL
gcloud init

The init command also update ~/.bash_profile, adding auto completion and updating the PATH for the Google Cloud SDK. These two lines

source ~/tools/google-cloud-sdk/path.bash.inc
source ~/tools/google-cloud-sdk/completion.bash.inc

Finally, I added the GAE Python SDK with

gcloud components install app-engine-python

Setup the first GAE project

Time to create the first GAE Python project. Luckily, official documentation has everything to start and succeed, and the section “Download the App Engine SDK for Python” can be skipped because of the Google Cloud SDK already installed.
Real problems arrive when additional Python library are required, like Flask. Following the official steps suggested here has one big problem: when executing the command pip install -t lib, the following error occurs:

DistutilsOptionError: must supply either home or prefix/exec-prefix — not both

It’s a well known bug of Python installed with Homebrew, and the workaround proposed didn’t worked for me. After some searching, I was able to solve the problem using a properly setup virtualenv environment and a symlink. Inside the project folder:

virtualenv env
source env/bin/activate
ln -s env/lib/python2.7/site-packages lib

Then, it’s important to skip the upload of virtualenv environment files, adding the following lines to the app.yaml file. GAE will continue to upload all the required libraries from the lib folder (a symlink to the lib folder inside the virtualenv), so no need of the entire env folder:

skip_files:
- ^env$ #virtual environment's folder

Finally, it’s possible to create the appengine_config.py to enable vendoring and inclusion of libraries in the lib folder, as per the official doc.

from google.appengine.ext import vendor
# Add any libraries installed in the "lib" folder.
vendor.add('lib')

Ahh, time to install some lib, edit files, launch the GAE dev server and start coding!

pip install flask
#(add and edit your files)
dev_appserver.py .

How to effectively get feedback on a talk

20160319-talkWhen I do public speaking, my talk doesn’t finish after the last question from the audience, it finishes once I’ve analysed the feedback attendees have provided. Feedback, for me, are a cornerstone of a talk life cycle (together with prepare, rehearsal and present). Let’s see different techniques I use to gather them, achieving more than 60% response rate.

Decide for meaningful and quick to fill feedback

My goal while asking for feedback is to know what I can improve for the next time: what is done is done, unfortunately. People are lazy by nature, so it’s important to find the right balance between time requested to provide feedback and detail of the information obtained. The less time, the better. Just an empty field with a question like “What do think about the talk” won’t work, it’s too generic and people will need time to think about it and what they input could be useless for me. On the other side, only a simple scale to grade the talk is too simple. Here the questions I generally ask:

  1. “How useful was the talk for you?”, a mandatory scale from 1 to 5 where 1 is “Time wasted” and 5 is “Very useful”
  2. “What you liked the most?”, a multiline free text form
  3. “One think to improve for the next time”, a multiline free text form

Make easy to provide feedback

Once I have the questions, next step is to ask them to the attendees in the quickest and painless possible way. Sites with a login is a no-go. Anonymous Google Form is perfect: credentials are not required, light to load, fits on mobile screens, focused on the task of input info, pre-fillable data via a customised URL. Try by yourself :)

20160319-slideThen the audience need the form link, so a add a slide like that at the end of my deck: the biggest QR-Code possible with form URL, plus the short address to the same form in case QR-Code doesn’t work (app not installed / low light / too small for people from the last rows etc). To be more creative, I can also use an Eddystore-URL beacon to transmit the URL, but software support to read it is, nowadays, far more complex than a QR-Code scanner. But it’s cool :)

Everything is in place, finally. But if you ask to give you feedback, only few attendees will do. Why? Because people are lazy, as said previously :)

Add some fun to the feedback experience

There are two main techniques I tested over time. First one is about explicitly ask participants to give you feedback, and declare the next 90 seconds will be dedicated to that, before start taking questions. Drawback is… the 90 seconds of silent after the request! People will be busy filling the questions, but 90 seconds of silent are tough to manage and can ruin the atmosphere of the talk.

20160319-wheel_of_namesAnother option comes from my colleague Martin Omander, that created thisWheel of Names” to distribute one gadget to the lucky winner of the raffle. I anticipate to the attendees that the ones that fill the feedback form will participated to a raffle for a small gadget. They only need to add a name or nickname at the end of the form to be eligible. Nicknames are important so people can stay anonymous in their feedback.
After the before mentioned 90 seconds, I open the form responses, copy the column with people’s nicknames in the space right to the wheel and spin it. Drawback is I need to have a gadget to offer, but sometimes can even be a symbolic object I donate to the winner, without a real value, just for fun. And it works, I can assure.

CLSxItaly: what happened and lessons learned

CLSxItaly communities

Are you interested in what happened during the first CLSxItaly? Take a look to the recorded morning sessions. Curious about my retrospective? Please keep reading.

I’m excited

I’m excited because I get excited when one of my idea come to life and influence real people, in real life, and has an impact. So was CLSxItaly: from a thought I had in July to an occasion where 65 people met and shared around one the their passions: community management! First time for Italy, as far as I know, first time, for sure, for technical communities.
I’m excited because only half of the attendees came from technical communities, while the other half represented travel communities, open source projects, coworking and urban spaces, creative artists, maker and much more.
I’m excited because we has a 35% women participation, and diversity matters.
I’m excited because we all had fun: 3,74 average score (out of 4) is something we can be proud of ! :)

Key learnings

The CLSxItaly core organisers

First personal gain was the core organisers team: discover that a spontaneous group of people is able to create a team that works great for accomplishing a particular tasks is always a bless! And so were Alessio, Michel and Stefano. Thank you guys, you make my small dream possible, and with style!

Second important point was the umpteenth confirmation that a vision, passions and personal relationships are the three key tools to achieve any goal: the before mentioned organisers team gifted me with their own time and commitment; Davide had no hesitation when I asked him “We need a place to host 100 people for an event, and for free”; Francesco, Francesco and Mara+Chiara+Andrea put real money to make everything possible: they all believed in the same vision I had and, sustained by a common passion and connected by our personal relationships, we all morphed that vision into a real fact.

Me rearranging unconference proposals
Me rearranging unconference proposals

Third key actor for the success of CLSxItaly were the attendees. Every time I received an Eventbrite notification that someone paid 15 euro to join, I though “Oh wow, another person that trusts in our idea”. The most important positive feedback we received were about the quality of the networking, the easy-going atmosphere and the constant sharing. All of them were only because of the quality of the attendees. Probably the non-free ticket for the event, the (still) niche topics discussed and the location helped to pre-selected the audience.

Regarding the experience to offer to the attendees, selecting only two core goals and working all around them made the job. We choose to focus in creating a learning path equally composed by frontal teaching along a common narrative (the plenary sessions during the morning) and peer learning (the unconference in the afternoon), plus special care in creating lot of occasions to get in touch each other and warm-up relations as soon as possible. All the rest followed: over the two coffee breaks, the lunch and the aperitif I saw lot of different aggregation groups, and this was positive. Despite just a bounce of folks have participated to an unconference before CLSxItaly, the general feeling was positive.

So, what’s next

I lead an unconference session regarding next steps for CLSxItaly. We had some ideas to run the next event in Rome in six months, drive by people of the local context. Let’s see. For sure, I want continue what has been started in Milan. But, as for Milan, I cannot do it alone. Wanna help? Join the discussion!

Millenials, Digital Native and Mobile Native

millenials
Photo credit: Optician Training

I often hear about these terms, mostly in demographic discussion around marketing segments. So I’m writing down some notes gathered around to clarity the (fragmented) boundaries of each group.

Millennials: born from 1980-1995, nowadays 21 to 36 years old. They prefer access (Zipcar, Airbnb) over ownership, have childhood experiences with technology and they saw a rapid increase in personal Internet usage.

Digital Natives/Generation Z: born from 1996-2008, nowadays 8 to 20 years old. They raised in a digital, media-saturated world, have attention spans of 8 seconds, spend 10+ hours of time online daily, majority on their smartphones. They prefer multi-tasking and like being on 5+ screens at once.

Mobile Natives: born from 2009-Present, nowadays up to 9 years old. 7% of babies under the age of one have used a smartphone. Nearly ⅓ of babies under the age of 2 can navigate mobile phone without help. By age 4 over 35% of toddlers use a smartphone for an hour a day.

Nice to know that, even if one age-generation separates me and my son, it seems there is a 4 consumer-generations gap between each other. Oh yes, I’m a Generation Y, not even a Millenials ;)

CLSxItaly: The Community Leadership Summit event is a reality

CLSxItaly

Some months ago, I threw a stone in the pond: I launched the idea to organize an event focused on community management for the Italian tech community ecosystem. Something new for our country, never realized before, something I consider really helpful for the peculiar ecosystem situation we’re living now. Thanks for all the support and feedback I’ve received so far, the ideas has became reality. On February 27th, in Milan, Talent Garden Calabiana is hosting the first CLSxItaly.

Should you come? If you’re the manager of a tech community of any kind (development, makers, operative systems and many more) and you want to learn more about your “job/passion” as a community manager, definitively yes! If your company is working on a technical product and considers the community a crucial part of its development cycle, you should come. If you think you have something to say about diversity in the IT world, you have to come!

How the event will be? A Community Leadership Summit X event type follows a precise licence, so the CLSxItaly will. The event will start on Saturday morning with plenary sessions (have ideas? Ping me please!), then the lunch and then the afternoon will be dedicated to unconference sessions, where participants can discuss topics, needs and ideas they like. A final aperitif will close the day together. This is the “official program”, them I’m sure lot of satellite events will happen, at the end community managers live on that!

What are the CLSxItaly’s goals? First, meet the other Italian community managers face to face. As already discussed, I know different tech communities that have gathered under a national umbrella (GrUSP, GDG ItaliaUGIdotNET, JUG, LUG etc), but I also know they don’t exist important cross-community relations, so the event can be the occasion to create them: similar experiences I had in other countries told me that it can only be a good thing. Then, I don’t know about any occasion in Italy to discuss, explore, share and experiment around the “art of community management”, so why don’t create one? Finally, I want to give back: communities have always been one of my passions since the far 2007, when I founded the CMLug, until today, when they are part of my daily job. And passions matter!

So, save the date (February 27th, Milan), spread the voice using the CLSxItaly hashtag and, if you’re interested in joining the adventure, please let me know, even in the comments: there are plenty of things to do (and to learn) and your hand, although small, is more than welcome. To make it more clearer: we need to start from the basics, from building the website… Any help on that?

Organize a national community leads summit – during the event

(Between September and October of this year, I organised two national community summits, one for Italians Google Developer Group leads, the other for French ones. 70 people in total, a weekend each, lot of fun! This and the other posts in the series are a stream of consciousness around different topics)

As described previously, the summit agenda is co-decided together with the participants, and it can be very fluid and dynamic. But there are some activities I always run, because I consider them structural to a good summit.

Define summit objectives, and their importance

Summit goals
Summit goals…

The opening activity defines a list of common summit objectives, from participants point of view. We need concrete metrics to measure summit success, and the number of achieved goals from that list by the end of the event is a good one.

There are plenty of techniques to create that list, but I personally prefer to ask participants to write down on sticky notes the two most important objectives they want to achieve at the summit. After 5 minutes, I start asking to a person to read her first goal and then, back to all the participants, how many have reported a similar goal. Then, we may slightly adjust the original goal to include also the others, copy it into a whiteboard and add how many people have it in common. Finally, all the sticky notes covered by that goal are discarded. And I repeat, until all sticky notes are finished. When discussing a goal, I try to be specific and precise, because it’s easy to move to very generic objectives hard to measure, like “Getting ideas to improve the quality of my community”. Improvements regarding what aspect of your community? Number or participants? Core organisers? Speakers? Sponsorships?
Writing down on two sticky notes, instead of freely asking what those goals are, allows to focus on the really important ones. Otherwise, without selecting them first, it would be easy to say multiple times “Oh yes, true, this point is important also for me”, losing the importance dimension.
In addition, the list provides insights on potential topics to discuss in the months after the summit, during the follow-up community management training sessions.

Identify common pain points, and who has already solved them

... And pain points
… And pain points

The second activity is for creating a map of current weaknesses the communities have. I use this map, again, both to measure summit success, in terms of useful replies provided to those points during the event, and to plan after the summit. And it has another great use: it can connect people who don’t know each other: in a summit with 20+ community managers with different level of expertise, it’s easy that one pain point has been already solved by another community, so it’s worthwhile to chat with its managers to understand how. In fact. I often run this activity just before the lunch or the first long break, to warm-up the informal conversations.

Among the many techniques to create this map, I proceed like previous activity: one sticky note each attendee where write down the most important need their community has. Similar discussion to find if others have same need, copy it to the whiteboard, together with the number of sharers. But now, before moving to the next one, I ask how many people have already solved what we just highlighted on the board. If someone raises her hand, I say to the people with the need: “Memorize her face, now you know near to who you have to sit down during the lunch”.

During the summit

Then the summit continues, with its specific agenda. One attention I have is to leave different free moments for destructured chats. Moments with nothing to do, but I don’t give the impression they are empty slots of time: I put them in the agenda, using terms as “Free chats”, or “Coffee machine chat moment”, so attendees know what they are supposed to do.

Inevitably, the summit also arrives near to its end, and I reserve the last two hours for three activities: a free Q&A session, a quick summit retrospective and the group photo.

Free Q&A session

Despite the unplanned free chat moments, I’ve seen that some questions are common to lot of people, so discuss them all together can save some time and allows to stay all aligned, and I reserve 45 to 60 minutes for a firechat with me and the other Googlers. In the past, we have gone from the kind of support Google can offer for their activities, to national events we can plan together, from details on some Google-wide initiatives, to complaints from managers. We’ve also discussed the evolution of a national community identity, a strategy to record, edit and publish sessions presented during the community events, if and how to do social media involving all the communities and much, much more.

Summit retrospective

In order to verify summit success, I reserve another 45 to 60 minutes to a quick retrospective. We start from the first whiteboard created at the beginning, asking, for each objective, how many people feel it has been achieved. Then, some simple math: if 7 people participated to the summit to figure out the next step of their community in term of event format, and 5 of them have been able to find good ideas, we had a good success on this goal. Clearly, only people who proposed an objective can decide if it has been reached or not. The sum of the success scores for each point defines how the summit has met the expectation of the attendees, if the time they bet on the event was well spent or not.
Similar approach, but this time for needs partially or totally solved.

Then we decide if there are Action Items we need to carry on after the summit. Writing them down and assigning responsibilities and deadlines for them is crucial, because the day after the summit is… A totally different day and it’s easy to forget everything!

Last part of the retrospective is dedicated to fill a form I prepared with evaluations for every single activities and sessions proposed during the summit, in a scale from 1 to 5, plus some bonus questions like the global usefulness of the summit, the best thing, the one to improve for the next time etc. Ten minutes are reserved for this activity, because… Again, tomorrow is Monday, and we have already forgotten everything!

Group photo

Picture, or it hasn’t happened“, so it’s time for the group photo. And to start saying goodbye, or having the lunch together. And, for me, to start thinking to the summit follow-up ;)