27 Mar 2015

feedPlanet Python

EasyGUI: Easygui project shuts down

Effective March 6, 2013, I am shutting down the EasyGui project.

The EasyGui software will continue to be available at its current location, but I will no longer be supporting, maintaining, or enhancing it.

The reasons for this decision are personal, and not very interesting. I'm older now, and retired. I no longer do software development, in any programming language. I have other interests that I find more compelling. I spend time with my family. I play and promote petanque. Life is good, but it is different.

During the course of my software development career I've had occasion to shut down a number of projects. On every occasion when I turned over a project to a new owner, the results were disappointing. Consequently, I have decided to shut down the EasyGui project rather than to try to find a new owner for it.

The EasyGui software will remain frozen in its current state. I invite anyone who has the wish, the will, the energy, and the vision to continue to evolve EasyGui, to do so. Copy it, fork it, and make it the basis for your own new work.

- Steve Ferg, March 6, 2013


27 Mar 2015 7:09pm GMT

EasyGUI: Easygui project shuts down

Effective March 6, 2013, I am shutting down the EasyGui project.

The EasyGui software will continue to be available at its current location, but I will no longer be supporting, maintaining, or enhancing it.

The reasons for this decision are personal, and not very interesting. I'm older now, and retired. I no longer do software development, in any programming language. I have other interests that I find more compelling. I spend time with my family. I play and promote petanque. Life is good, but it is different.

During the course of my software development career I've had occasion to shut down a number of projects. On every occasion when I turned over a project to a new owner, the results were disappointing. Consequently, I have decided to shut down the EasyGui project rather than to try to find a new owner for it.

The EasyGui software will remain frozen in its current state. I invite anyone who has the wish, the will, the energy, and the vision to continue to evolve EasyGui, to do so. Copy it, fork it, and make it the basis for your own new work.

- Steve Ferg, March 6, 2013


27 Mar 2015 7:09pm GMT

Python Software Foundation: Let's make decisions together!

Personal opinion: I think it's always a good idea to periodically revisit one's purpose and basic goals; speaking from experience, getting lost is inefficient and no fun at all.
Photo credit: Gerd Altmann; License: CC0
So, let's review:
The mission of the PSF is to:

[…] promote, protect, and advance the Python programming language, and to support and facilitate the growth of a diverse and international community of Python programmers.

The PSF takes this mission seriously. Last year, the Board of Directors changed the membership by-laws in order to make the PSF a more inclusive and diverse organization. Since then, the PSF leadership has been working on ways to build on that change. The recent non-binding poll of voting members (PSF Blog) is one such tactic. Another is a new procedure for strategic decision-making recently proposed by PSF Director Nick Coghlan.
Last week, Nick posted this proposal on the Members' List for discussion (it's also on the Python wiki).
According to Nick,

One step we are proposing is to have a more open strategic decision making process where significant decisions which don't need to be made quickly, and which don't require any confidentiality, can be discussed with the full PSF membership before being placed before the Board as a proposed resolution.

The new guidelines are similar to the process used for Python Enhancement Proposals (PEP)-whereby developers and user groups make suggestions for design decisions to amend the Python language (PEP). Nick also took inspiration from Red Hat's "Open Decision Making Framework," and the Fedora change approval process.
Since this proposal is itself the first instance of its use (in what Nick calls "a delightfully meta exercise"), it's important that the membership review it and offer feedback. And if you're not a member but would like to become one, see Enroll as a Voting Member to sign up.

Below I've excerpted some of the basic ideas from the text of the proposal, but I urge members to read the entire draft before weighing in.

PSF Strategic Decision Making Process

The primary mechanism for strategic decision making in the PSF is through resolutions of the PSF Board. Members of the PSF Board of Directors are elected annually in accordance with the PSF Bylaws, and bear the ultimate responsibility for determining "how" the PSF pursues its mission [...]
However, some proposed clarifications of or changes to the way the PSF pursues its strategic priorities are of sufficient import that they will benefit from a period of open discussion amongst the PSF membership prior to presentation for a Board resolution [...]

Non-binding polls of PSF Voting Members

At their discretion, the PSF Board may choose to include non-binding polls in ballots issued to PSF members [...]

Proposals for Discussion

Any PSF Member (including Basic Members) may use the Wiki to submit a proposal for discussion with the full PSF membership [...]

Proposals for Resolution
Any PSF Director or Officer may determine that a particular proposal is ready for resolution [...]
Proposals submitted for resolution will be resolved either directly by a Board resolution, or, at the Board's discretion, by a full binding vote of eligible PSF Voting Members.

Nick is also currently drafting proposed guidelines for "PSF Strategic Priorities" and for procedures for recognition and promotion to the designation of "PSF Fellow."

Stay tuned to the members' list and to this blog to stay informed and to participate in the discussion and adoption of these additional proposals to improve the PSF's role as an organization that truly reflects and supports the needs and views of its membership.

I would love to hear from readers. Please send feedback, comments, or blog ideas to me at msushi@gnosis.cx.

27 Mar 2015 5:10pm GMT

Python Software Foundation: Let's make decisions together!

Personal opinion: I think it's always a good idea to periodically revisit one's purpose and basic goals; speaking from experience, getting lost is inefficient and no fun at all.
Photo credit: Gerd Altmann; License: CC0
So, let's review:
The mission of the PSF is to:

[…] promote, protect, and advance the Python programming language, and to support and facilitate the growth of a diverse and international community of Python programmers.

The PSF takes this mission seriously. Last year, the Board of Directors changed the membership by-laws in order to make the PSF a more inclusive and diverse organization. Since then, the PSF leadership has been working on ways to build on that change. The recent non-binding poll of voting members (PSF Blog) is one such tactic. Another is a new procedure for strategic decision-making recently proposed by PSF Director Nick Coghlan.
Last week, Nick posted this proposal on the Members' List for discussion (it's also on the Python wiki).
According to Nick,

One step we are proposing is to have a more open strategic decision making process where significant decisions which don't need to be made quickly, and which don't require any confidentiality, can be discussed with the full PSF membership before being placed before the Board as a proposed resolution.

The new guidelines are similar to the process used for Python Enhancement Proposals (PEP)-whereby developers and user groups make suggestions for design decisions to amend the Python language (PEP). Nick also took inspiration from Red Hat's "Open Decision Making Framework," and the Fedora change approval process.
Since this proposal is itself the first instance of its use (in what Nick calls "a delightfully meta exercise"), it's important that the membership review it and offer feedback. And if you're not a member but would like to become one, see Enroll as a Voting Member to sign up.

Below I've excerpted some of the basic ideas from the text of the proposal, but I urge members to read the entire draft before weighing in.

PSF Strategic Decision Making Process

The primary mechanism for strategic decision making in the PSF is through resolutions of the PSF Board. Members of the PSF Board of Directors are elected annually in accordance with the PSF Bylaws, and bear the ultimate responsibility for determining "how" the PSF pursues its mission [...]
However, some proposed clarifications of or changes to the way the PSF pursues its strategic priorities are of sufficient import that they will benefit from a period of open discussion amongst the PSF membership prior to presentation for a Board resolution [...]

Non-binding polls of PSF Voting Members

At their discretion, the PSF Board may choose to include non-binding polls in ballots issued to PSF members [...]

Proposals for Discussion

Any PSF Member (including Basic Members) may use the Wiki to submit a proposal for discussion with the full PSF membership [...]

Proposals for Resolution
Any PSF Director or Officer may determine that a particular proposal is ready for resolution [...]
Proposals submitted for resolution will be resolved either directly by a Board resolution, or, at the Board's discretion, by a full binding vote of eligible PSF Voting Members.

Nick is also currently drafting proposed guidelines for "PSF Strategic Priorities" and for procedures for recognition and promotion to the designation of "PSF Fellow."

Stay tuned to the members' list and to this blog to stay informed and to participate in the discussion and adoption of these additional proposals to improve the PSF's role as an organization that truly reflects and supports the needs and views of its membership.

I would love to hear from readers. Please send feedback, comments, or blog ideas to me at msushi@gnosis.cx.

27 Mar 2015 5:10pm GMT

Astro Code School: Meet Caktus CTO Colin Copeland

This is the third post in a series of interviews about the people at Astro Code School. This one is about Colin Copeland the CTO and Co-Founder of Caktus Consulting Group. He's one of the people who came up with the idea for Astro Code School and a major contributor to it's creation.

Where were you born?

Oberlin, Ohio

What was your favorite childhood pastime?

Spending time with friends during the Summer.

Where did you go to college and what did you study?

I went to Earlham College and studied Computer Science.

How did you become a CTO of the nation's largest Django firm?

I collaborated with the co-founders on a software engineering project. We moved to North Carolina to start the business. I was lucky to have met them!

How did you and the other Caktus founders come up with the idea to start Astro Code School?

Caktus has always been involved with trainings and trying to contribute back to the Django community where possible, from hosting Django sprints to leading public and private Django trainings on best practices. We're excited to see the Django community grow and saw an opportunity to focus our training services with Astro.

What is one of your favorite things about Python?

Readability. Whether it's reading through some of my old source code or diving into a new open source project, I feel like you can get your bearings quickly and feel comfortable learning or re-learning the code. The larger Django and Python communities are also very welcoming and friendly to new and long time members.

Who are your mentors and how have they influenced you?

So many, but especially my Caktus business partners and colleagues.

Do you have any hobbies?

I'm co-captain of the Code for Durham Brigade.

Which is your favorite Sci-fi or Fantasy fiction? Why?

Sci-fi. I've always loved the books Neuromancer and Snow Crash. Recently I've been enjoying the Silo science fiction series.

27 Mar 2015 3:30pm GMT

Astro Code School: Meet Caktus CTO Colin Copeland

This is the third post in a series of interviews about the people at Astro Code School. This one is about Colin Copeland the CTO and Co-Founder of Caktus Consulting Group. He's one of the people who came up with the idea for Astro Code School and a major contributor to it's creation.

Where were you born?

Oberlin, Ohio

What was your favorite childhood pastime?

Spending time with friends during the Summer.

Where did you go to college and what did you study?

I went to Earlham College and studied Computer Science.

How did you become a CTO of the nation's largest Django firm?

I collaborated with the co-founders on a software engineering project. We moved to North Carolina to start the business. I was lucky to have met them!

How did you and the other Caktus founders come up with the idea to start Astro Code School?

Caktus has always been involved with trainings and trying to contribute back to the Django community where possible, from hosting Django sprints to leading public and private Django trainings on best practices. We're excited to see the Django community grow and saw an opportunity to focus our training services with Astro.

What is one of your favorite things about Python?

Readability. Whether it's reading through some of my old source code or diving into a new open source project, I feel like you can get your bearings quickly and feel comfortable learning or re-learning the code. The larger Django and Python communities are also very welcoming and friendly to new and long time members.

Who are your mentors and how have they influenced you?

So many, but especially my Caktus business partners and colleagues.

Do you have any hobbies?

I'm co-captain of the Code for Durham Brigade.

Which is your favorite Sci-fi or Fantasy fiction? Why?

Sci-fi. I've always loved the books Neuromancer and Snow Crash. Recently I've been enjoying the Silo science fiction series.

27 Mar 2015 3:30pm GMT

Caktus Consulting Group: Welcome to Our New Staff Members

We've hit one of our greatest growth points yet in 2015, adding nine new team members since January to handle our increasing project load. There are many exciting things on the horizon for Caktus and our clients, so it's wonderful to have a few more hands on deck.

One of the best things about working at Caktus is the diversity of our staff's interests and backgrounds. In order of their appearance from left to right in the photos above, here's a quick look at our new Cakti's roles and some fun facts:

Neil Ashton

Neil was also a Caktus contractor who has made the move to full-time Django developer. He is a keen student of more than programming languages; he holds two degrees in Classics and another Master's in Linguistics.

Jeff Bradberry

Though Jeff has been working as a contractor at Caktus, he recently became a full-time developer. In his spare time, he likes to play around with artificial intelligence, sometimes giving his creations a dose of inexplicable, random behavior to better mimic us poor humans.

Ross Pike

Ross is our new Lead Designer and has earned recognition for his work from Print, How Magazine, and the AIGA. He also served in the Peace Corps for a year in Bolivia on a health and water mission.

Lucas Rowe

Lucas joins us for six months as a game designer, courtesy of a federal grant to reduce the spread of HIV. When he's not working on Epic Allies, our HIV medication app, he can be found playing board games or visiting local breweries.

Erin Mullaney

Erin has more than a decade of development experience behind her, making her the perfect addition to our team of Django developers. She loves cooking healthy, vegan meals and watching television shows laden with 90s nostalgia.

Liza Chabot

Liza is an English major who loves to read, write, and organize, all necessary skills as Caktus' Administrative and Marketing Assistant. She is also a weaver and sells and exhibits her handwoven wall hangings and textiles in the local craft community.

NC Nwoko

NC's skills are vast in scope. She graduated from UNC Chapel Hill with a BA in Journalism and Mass Communication with a focus on public relations and business as well as a second major in International Studies with a focus on global economics. She now puts this experience to good use as Caktus' Digital Health Product Manager, but on the weekends you can find her playing video games and reading comic books.

Edward Rowe

Edward is joining us for six months as a game developer for the Epic Allies project. He loves developing games for social good. Outside of work, Edward continues to express his passion for games as an avid indie game developer, UNC basketball fan, and board and video game player.

Rob Lineberger

Rob is our new Django contractor. Rob is a renaissance man; he's not only a skilled and respected visual artist, he's trained in bioinformatics, psychology, information systems and knows his way around the kitchen.

To learn more about our team, visit our About Page. And if you're wishing you could spend your days with these smart, passionate people, keep in mind that we're still hiring.

27 Mar 2015 12:00pm GMT

Caktus Consulting Group: Welcome to Our New Staff Members

We've hit one of our greatest growth points yet in 2015, adding nine new team members since January to handle our increasing project load. There are many exciting things on the horizon for Caktus and our clients, so it's wonderful to have a few more hands on deck.

One of the best things about working at Caktus is the diversity of our staff's interests and backgrounds. In order of their appearance from left to right in the photos above, here's a quick look at our new Cakti's roles and some fun facts:

Neil Ashton

Neil was also a Caktus contractor who has made the move to full-time Django developer. He is a keen student of more than programming languages; he holds two degrees in Classics and another Master's in Linguistics.

Jeff Bradberry

Though Jeff has been working as a contractor at Caktus, he recently became a full-time developer. In his spare time, he likes to play around with artificial intelligence, sometimes giving his creations a dose of inexplicable, random behavior to better mimic us poor humans.

Ross Pike

Ross is our new Lead Designer and has earned recognition for his work from Print, How Magazine, and the AIGA. He also served in the Peace Corps for a year in Bolivia on a health and water mission.

Lucas Rowe

Lucas joins us for six months as a game designer, courtesy of a federal grant to reduce the spread of HIV. When he's not working on Epic Allies, our HIV medication app, he can be found playing board games or visiting local breweries.

Erin Mullaney

Erin has more than a decade of development experience behind her, making her the perfect addition to our team of Django developers. She loves cooking healthy, vegan meals and watching television shows laden with 90s nostalgia.

Liza Chabot

Liza is an English major who loves to read, write, and organize, all necessary skills as Caktus' Administrative and Marketing Assistant. She is also a weaver and sells and exhibits her handwoven wall hangings and textiles in the local craft community.

NC Nwoko

NC's skills are vast in scope. She graduated from UNC Chapel Hill with a BA in Journalism and Mass Communication with a focus on public relations and business as well as a second major in International Studies with a focus on global economics. She now puts this experience to good use as Caktus' Digital Health Product Manager, but on the weekends you can find her playing video games and reading comic books.

Edward Rowe

Edward is joining us for six months as a game developer for the Epic Allies project. He loves developing games for social good. Outside of work, Edward continues to express his passion for games as an avid indie game developer, UNC basketball fan, and board and video game player.

Rob Lineberger

Rob is our new Django contractor. Rob is a renaissance man; he's not only a skilled and respected visual artist, he's trained in bioinformatics, psychology, information systems and knows his way around the kitchen.

To learn more about our team, visit our About Page. And if you're wishing you could spend your days with these smart, passionate people, keep in mind that we're still hiring.

27 Mar 2015 12:00pm GMT

Montreal Python User Group: Montréal-Python 53: Sanctified Terabit + MTLData + DevOpsMTL + DockerMTL

affiche-mp53

Sketch credit Cynthia Savard

If PyCon is not enough, Montréal-Python has the solution: a meetup! Now that your first incredible day of sprints is over, we are bringing on stage some of PyCon's superstar presenters for encore presentations.

This special Montréal-Python edition will be co-organized by MTLData, DevOpsMTL and DockerMTL.

Trey Causey: Scalable Machine Learning in Python using GraphLab Create

I'll be giving an overview of how to use GraphLab Create to quickly build scalable predictive models and deploy them to production using just an IPython notebook on a laptop.

Nina Zakharenko: Technical Debt - The code monster in everyone's closet

Technical debt is the code monster hiding in everyone's closet. If you ignore it, it will terrorize you at night. To banish it and re-gain your productivity, you'll need to face it head on.

Olivier Grisel: What's new in scikit-learn 0.16 and what's cooking in the master branch.

Scikit-learn is a Machine Learning library from the Python data ecosystem. Olivier will give an overview and some demos of the (soon to be | recently) released 0.16.0 version.

Jérome Petazzoni: Deep dive into Docker storage drivers

We will present how aufs and btrfs drivers compare from a high-level perspective, explaining their pros and cons. This will help the audience to make more informed decisions when picking the most appropriate driver for their workloads.

Pierre-Yves David: Mercurial, with real python bites

In this talk, we'll go over on the advantages of Python that helped the project both in its early life when so much feature needs to be implemented, but also nowaday when major companies like Facebook bet on Mercurial for scaling. We'll also point at the drawback of choosing Python and how some work-arounds had to be found. Finally, we'll look at how the choice of Python have an impact on the user too with a demonstration of the extensions system.

Thanks also to our special sponsors for this event: Docker Inc. and LightSpeed Retail

When:

Monday, April 13h 2015

Where

Notman House 51 Rue Sherbrooke West, Montréal, QC H2X 1X2 https://goo.gl/maps/rg4jI

How

Just grab a ticket here: http://pycon-python-data-devops-docker.eventbrite.ca

Schedule:

We'd like to thank our sponsors for their ongoing support:

27 Mar 2015 4:00am GMT

Montreal Python User Group: Montréal-Python 53: Sanctified Terabit + MTLData + DevOpsMTL + DockerMTL

affiche-mp53

Sketch credit Cynthia Savard

If PyCon is not enough, Montréal-Python has the solution: a meetup! Now that your first incredible day of sprints is over, we are bringing on stage some of PyCon's superstar presenters for encore presentations.

This special Montréal-Python edition will be co-organized by MTLData, DevOpsMTL and DockerMTL.

Trey Causey: Scalable Machine Learning in Python using GraphLab Create

I'll be giving an overview of how to use GraphLab Create to quickly build scalable predictive models and deploy them to production using just an IPython notebook on a laptop.

Nina Zakharenko: Technical Debt - The code monster in everyone's closet

Technical debt is the code monster hiding in everyone's closet. If you ignore it, it will terrorize you at night. To banish it and re-gain your productivity, you'll need to face it head on.

Olivier Grisel: What's new in scikit-learn 0.16 and what's cooking in the master branch.

Scikit-learn is a Machine Learning library from the Python data ecosystem. Olivier will give an overview and some demos of the (soon to be | recently) released 0.16.0 version.

Jérome Petazzoni: Deep dive into Docker storage drivers

We will present how aufs and btrfs drivers compare from a high-level perspective, explaining their pros and cons. This will help the audience to make more informed decisions when picking the most appropriate driver for their workloads.

Pierre-Yves David: Mercurial, with real python bites

In this talk, we'll go over on the advantages of Python that helped the project both in its early life when so much feature needs to be implemented, but also nowaday when major companies like Facebook bet on Mercurial for scaling. We'll also point at the drawback of choosing Python and how some work-arounds had to be found. Finally, we'll look at how the choice of Python have an impact on the user too with a demonstration of the extensions system.

Thanks also to our special sponsors for this event: Docker Inc. and LightSpeed Retail

When:

Monday, April 13h 2015

Where

Notman House 51 Rue Sherbrooke West, Montréal, QC H2X 1X2 https://goo.gl/maps/rg4jI

How

Just grab a ticket here: http://pycon-python-data-devops-docker.eventbrite.ca

Schedule:

We'd like to thank our sponsors for their ongoing support:

27 Mar 2015 4:00am GMT

Vasudev Ram: Which which is which?

By Vasudev Ram

Recently I had blogged about which.py, a simple Python program that I wrote, here:

A simple UNIX-like 'which' command in Python

I also posted the same program on ActiveState Code:

A UNIX-like "which" command for Python (Python recipe)

A reader there, Hongxu Chen, pointed out that my which.py actually implemented the variant "which -a", that is, the UNIX which with the -a (or -all) option included. This variant displays not just the first full pathname of an occurrence of the searched-for name in the PATH (environment variable), but all such occurrences, in any directory in the PATH. That was not what I had intended. It was a bug. I had intended it to only show the first occurrence.

So I rewrote the program to fix that bug, and also implemented the -a option properly - i.e. when -a (or its long form, --all, is given, find all occurrences, otherwise only find the first. Here is the new version:

from __future__ import print_function

# which.py
# A minimal version of the UNIX which utility, in Python.
# Also implements the -a or --all option.
# Author: Vasudev Ram - www.dancingbison.com
# Copyright 2015 Vasudev Ram - http://www.dancingbison.com

import sys
import os
import os.path
import stat

def usage():
sys.stderr.write("Usage: python which.py [ -a | --all ] name ...\n")
sys.stderr.write("or: which.py [ -a | --all ] name ...\n")

def which(name, all):
for path in os.getenv("PATH").split(os.path.pathsep):
full_path = path + os.sep + name
if os.path.exists(full_path):
print(full_path)
if not all:
break

def main():
if len(sys.argv) 2:
usage()
sys.exit(1)
if sys.argv[1] in ('-a', '--all'):
# Print all matches in PATH.
for name in sys.argv[2:]:
which(name, True)
else:
# Stop after printing first match in PATH.
for name in sys.argv[1:]:
which(name, False)

if "__main__" == __name__:
main()

I tested it some and it seems to be working okay both with and without the -a option now. After more testing, I'll upload it to my Bitbucket account. - Vasudev Ram - Online Python training and programming Dancing Bison EnterprisesSignup to hear about new software or info products that I create. Posts about Python Posts about xtopdf Contact Page

Share |
Vasudev Ram

27 Mar 2015 2:52am GMT

Vasudev Ram: Which which is which?

By Vasudev Ram

Recently I had blogged about which.py, a simple Python program that I wrote, here:

A simple UNIX-like 'which' command in Python

I also posted the same program on ActiveState Code:

A UNIX-like "which" command for Python (Python recipe)

A reader there, Hongxu Chen, pointed out that my which.py actually implemented the variant "which -a", that is, the UNIX which with the -a (or -all) option included. This variant displays not just the first full pathname of an occurrence of the searched-for name in the PATH (environment variable), but all such occurrences, in any directory in the PATH. That was not what I had intended. It was a bug. I had intended it to only show the first occurrence.

So I rewrote the program to fix that bug, and also implemented the -a option properly - i.e. when -a (or its long form, --all, is given, find all occurrences, otherwise only find the first. Here is the new version:

from __future__ import print_function

# which.py
# A minimal version of the UNIX which utility, in Python.
# Also implements the -a or --all option.
# Author: Vasudev Ram - www.dancingbison.com
# Copyright 2015 Vasudev Ram - http://www.dancingbison.com

import sys
import os
import os.path
import stat

def usage():
sys.stderr.write("Usage: python which.py [ -a | --all ] name ...\n")
sys.stderr.write("or: which.py [ -a | --all ] name ...\n")

def which(name, all):
for path in os.getenv("PATH").split(os.path.pathsep):
full_path = path + os.sep + name
if os.path.exists(full_path):
print(full_path)
if not all:
break

def main():
if len(sys.argv) 2:
usage()
sys.exit(1)
if sys.argv[1] in ('-a', '--all'):
# Print all matches in PATH.
for name in sys.argv[2:]:
which(name, True)
else:
# Stop after printing first match in PATH.
for name in sys.argv[1:]:
which(name, False)

if "__main__" == __name__:
main()

I tested it some and it seems to be working okay both with and without the -a option now. After more testing, I'll upload it to my Bitbucket account. - Vasudev Ram - Online Python training and programming Dancing Bison EnterprisesSignup to hear about new software or info products that I create. Posts about Python Posts about xtopdf Contact Page

Share |
Vasudev Ram

27 Mar 2015 2:52am GMT

Mikko Ohtamaa: Testing web hook HTTP API callbacks with ngrok in Python

Today many API services provide webhooks calling back your website or system over HTTP. This enables simple third party interprocess communications and notifications for websites. However unless you are running in production, you often find yourself in a situation where it is not possible to get an Internet exposed HTTP endpoint over publicly accessible IP address. These situations may include your home desktop, public WI-FI access point or continuous integration services. Thus, developing or testing against webhook APIs become painful for contemporary nomad developers.

Screen Shot 2015-03-26 at 17.46.39

ngrok (source) is a pay-what-you-want service to create HTTP tunnels through third party relays. What makes ngrok attractice is that the registration is dead simple with Github credentials and upfront payments are not required. ngrok is also open source, so you can run your own relay for sensitive traffic.

In this blog post, I present a Python solution how to programmatically create ngrok tunnels on-demand. This is especially useful for webhook unit tests, as you have zero configuration tunnels available anywhere where you run your code. ngrok is spawned as a controlled subprocess for a given URL. Then, you can tell your webhook service provider to use this URL to make calls back to your unit tests.

One could use ngrok completely login free. In this case you lose the ability to name your HTTP endpoints. I have found it practical to have control over the endpoint URLs, as this makes debugging much more easier.

For real-life usage, you can check cryptoassets.core project where I came up with ngrok method. ngrok succesfully tunneled me out from drone.io CI service and my laptop.

Installation

Installing ngrok on OSX from Homebrew:

brew install ngrok

Installing ngrok for Ubuntu:

apt-get install -y unzip
cd /tmp
wget -O ngrok.zip "https://api.equinox.io/1/Applications/ap_pJSFC5wQYkAyI0FIVwKYs9h1hW/Updates/Asset/ngrok.zip?os=linux&arch=386&channel=stable"
unzip ngrok
mv ngrok /usr/local/bin

Official ngrok download, self-contained zips.

Sign up for the ngrok service and grab your auth token.

Export auth token as an environment variable in your shell, don't store it in version control system:

export NGROK_AUTH_TOKEN=xxx

Ngrok tunnel code

Below is Python 3 code for NgrokTunnel class. See the full source code here.

import os
import time
import uuid
import logging
import subprocess
from distutils.spawn import find_executable


logger = logging.getLogger(__name__)


class NgrokTunnel:

    def __init__(self, port, auth_token, subdomain_base="zoq-fot-pik"):
        """Initalize Ngrok tunnel.

        :param auth_token: Your auth token string you get after logging into ngrok.com

        :param port: int, localhost port forwarded through tunnel

        :parma subdomain_base: Each new tunnel gets a generated subdomain. This is the prefix used for a random string.
        """
        assert find_executable("ngrok"), "ngrok command must be installed, see https://ngrok.com/"
        self.port = port
        self.auth_token = auth_token
        self.subdomain = "{}-{}".format(subdomain_base, str(uuid.uuid4()))

    def start(self, ngrok_die_check_delay=0.5):
        """Starts the thread on the background and blocks until we get a tunnel URL.

        :return: the tunnel URL which is now publicly open for your localhost port
        """

        logger.debug("Starting ngrok tunnel %s for port %d", self.subdomain, self.port)

        self.ngrok = subprocess.Popen(["ngrok", "-authtoken={}".format(self.auth_token), "-log=stdout", "-subdomain={}".format(self.subdomain), str(self.port)], stdout=subprocess.DEVNULL)

        # See that we don't instantly die
        time.sleep(ngrok_die_check_delay)
        assert self.ngrok.poll() is None, "ngrok terminated abrutly"
        url = "https://{}.ngrok.com".format(self.subdomain)
        return url

    def stop(self):
        """Tell ngrok to tear down the tunnel.

        Stop the background tunneling process.
        """
        self.ngrok.terminate()

Example usage in tests

Here is a short pseudo example from cryptoassets.core block.io webhook handler unit tests. See the full unit test code here.

class BlockWebhookTestCase(CoinTestRoot, unittest.TestCase):

    def setUp(self):

        self.ngrok = None

        self.backend.walletnotify_config["class"] = "cryptoassets.core.backend.blockiowebhook.BlockIoWebhookNotifyHandler"

        # We need ngrok tunnel for webhook notifications
        auth_token = os.environ["NGROK_AUTH_TOKEN"]
        self.ngrok = NgrokTunnel(21211, auth_token)

        # Pass dynamically generated tunnel URL to backend config
        tunnel_url = self.ngrok.start()
        self.backend.walletnotify_config["url"] = tunnel_url
        self.backend.walletnotify_config["port"] = 21211

        # Start the web server
        self.incoming_transactions_runnable = self.backend.setup_incoming_transactions(self.app.conflict_resolver, self.app.event_handler_registry)

        self.incoming_transactions_runnable.start()

    def teardown(self):

        # Stop webserver
        incoming_transactions_runnable = getattr(self, "incoming_transactions_runnable", None)
        if incoming_transactions_runnable:
            incoming_transactions_runnable.stop()

        # Stop tunnelling
        if self.ngrok:
            self.ngrok.stop()
            self.ngrok = None

Other

Please see the unit tests for NgrokTunnel class itself.

Subscribe to RSS feed Follow me on Twitter Follow me on Facebook Follow me Google+

27 Mar 2015 12:49am GMT

Mikko Ohtamaa: Testing web hook HTTP API callbacks with ngrok in Python

Today many API services provide webhooks calling back your website or system over HTTP. This enables simple third party interprocess communications and notifications for websites. However unless you are running in production, you often find yourself in a situation where it is not possible to get an Internet exposed HTTP endpoint over publicly accessible IP address. These situations may include your home desktop, public WI-FI access point or continuous integration services. Thus, developing or testing against webhook APIs become painful for contemporary nomad developers.

Screen Shot 2015-03-26 at 17.46.39

ngrok (source) is a pay-what-you-want service to create HTTP tunnels through third party relays. What makes ngrok attractice is that the registration is dead simple with Github credentials and upfront payments are not required. ngrok is also open source, so you can run your own relay for sensitive traffic.

In this blog post, I present a Python solution how to programmatically create ngrok tunnels on-demand. This is especially useful for webhook unit tests, as you have zero configuration tunnels available anywhere where you run your code. ngrok is spawned as a controlled subprocess for a given URL. Then, you can tell your webhook service provider to use this URL to make calls back to your unit tests.

One could use ngrok completely login free. In this case you lose the ability to name your HTTP endpoints. I have found it practical to have control over the endpoint URLs, as this makes debugging much more easier.

For real-life usage, you can check cryptoassets.core project where I came up with ngrok method. ngrok succesfully tunneled me out from drone.io CI service and my laptop.

Installation

Installing ngrok on OSX from Homebrew:

brew install ngrok

Installing ngrok for Ubuntu:

apt-get install -y unzip
cd /tmp
wget -O ngrok.zip "https://api.equinox.io/1/Applications/ap_pJSFC5wQYkAyI0FIVwKYs9h1hW/Updates/Asset/ngrok.zip?os=linux&arch=386&channel=stable"
unzip ngrok
mv ngrok /usr/local/bin

Official ngrok download, self-contained zips.

Sign up for the ngrok service and grab your auth token.

Export auth token as an environment variable in your shell, don't store it in version control system:

export NGROK_AUTH_TOKEN=xxx

Ngrok tunnel code

Below is Python 3 code for NgrokTunnel class. See the full source code here.

import os
import time
import uuid
import logging
import subprocess
from distutils.spawn import find_executable


logger = logging.getLogger(__name__)


class NgrokTunnel:

    def __init__(self, port, auth_token, subdomain_base="zoq-fot-pik"):
        """Initalize Ngrok tunnel.

        :param auth_token: Your auth token string you get after logging into ngrok.com

        :param port: int, localhost port forwarded through tunnel

        :parma subdomain_base: Each new tunnel gets a generated subdomain. This is the prefix used for a random string.
        """
        assert find_executable("ngrok"), "ngrok command must be installed, see https://ngrok.com/"
        self.port = port
        self.auth_token = auth_token
        self.subdomain = "{}-{}".format(subdomain_base, str(uuid.uuid4()))

    def start(self, ngrok_die_check_delay=0.5):
        """Starts the thread on the background and blocks until we get a tunnel URL.

        :return: the tunnel URL which is now publicly open for your localhost port
        """

        logger.debug("Starting ngrok tunnel %s for port %d", self.subdomain, self.port)

        self.ngrok = subprocess.Popen(["ngrok", "-authtoken={}".format(self.auth_token), "-log=stdout", "-subdomain={}".format(self.subdomain), str(self.port)], stdout=subprocess.DEVNULL)

        # See that we don't instantly die
        time.sleep(ngrok_die_check_delay)
        assert self.ngrok.poll() is None, "ngrok terminated abrutly"
        url = "https://{}.ngrok.com".format(self.subdomain)
        return url

    def stop(self):
        """Tell ngrok to tear down the tunnel.

        Stop the background tunneling process.
        """
        self.ngrok.terminate()

Example usage in tests

Here is a short pseudo example from cryptoassets.core block.io webhook handler unit tests. See the full unit test code here.

class BlockWebhookTestCase(CoinTestRoot, unittest.TestCase):

    def setUp(self):

        self.ngrok = None

        self.backend.walletnotify_config["class"] = "cryptoassets.core.backend.blockiowebhook.BlockIoWebhookNotifyHandler"

        # We need ngrok tunnel for webhook notifications
        auth_token = os.environ["NGROK_AUTH_TOKEN"]
        self.ngrok = NgrokTunnel(21211, auth_token)

        # Pass dynamically generated tunnel URL to backend config
        tunnel_url = self.ngrok.start()
        self.backend.walletnotify_config["url"] = tunnel_url
        self.backend.walletnotify_config["port"] = 21211

        # Start the web server
        self.incoming_transactions_runnable = self.backend.setup_incoming_transactions(self.app.conflict_resolver, self.app.event_handler_registry)

        self.incoming_transactions_runnable.start()

    def teardown(self):

        # Stop webserver
        incoming_transactions_runnable = getattr(self, "incoming_transactions_runnable", None)
        if incoming_transactions_runnable:
            incoming_transactions_runnable.stop()

        # Stop tunnelling
        if self.ngrok:
            self.ngrok.stop()
            self.ngrok = None

Other

Please see the unit tests for NgrokTunnel class itself.

Subscribe to RSS feed Follow me on Twitter Follow me on Facebook Follow me Google+

27 Mar 2015 12:49am GMT

26 Mar 2015

feedPlanet Python

Python Software Foundation: World Domination: One Student at a Time!

A couple of years ago, I discovered the edX MIT course 6.00x Intro to Computer Science and Programming Using Python. At the time, I was eager to learn Python and CS basics, so I took the plunge.
The course has been offered through edX each semester since, and at some point it was divided into two courses to allow more time for in-depth study, as the original one-semester course moved very quickly from basics to more advanced topics, such as complexity classes, plotting techniques, stochastic programs, probability, random walks, and graph optimization. I can't say enough good things about the excellence of Professor John Guttag, who developed the course and wrote the accompanying textbook (which is recommended but not required), along with co-teachers, Profs. Eric Grimson and Chris Terman.
I was grateful at the time to have found a free introductory college-level course in computer science that uses Python, rather than C, Java, or another language, as I had already had some acquaintance with Python and wanted to solidify my foundation and gain more skill. Working through the course led me to appreciate the features of Python that make it a wonderful teaching language. Since it is relatively easy to learn, it allows the learner to get up and running quickly, to write code and get results early on, without getting too bogged down and discouraged (something that I, as a humanities rather than a math person, had experienced in the past.) In addition, Python teaches good programming habits, including the importance of good documentation, what Prof. Guttag frequently referred to as "good hygiene." I remember wondering at the time why Python wasn't always the language taught to beginners.
Well, today this is the trend.
According to a July 2014 study by Phillip Guo, Python is Now the Most Popular Introductory Teaching Language at Top U.S. Universities. Guo analyzed the course curricula for the top 39 CS Departments in the US. He used U.S. News' ranking of best computer science schools in 2014, which begins with Carnegie Mellon, MIT, Stanford, and UC Berkeley (he stopped at 39 because apparently there was an 8-way tie for #40), and found that 27 of them teach Python in their Intro courses. Of the top 10 departments, the proportion was higher- 8 of them teach Python. The next most-taught languages the study found were (in descending order): Java, MATLAB, C, C+, Scheme, and Scratch. Moreover, in addition to edX, both Udacity and Coursera use Python for their introductory courses.
Anecdotally, Guo found that professors in academic fields outside of CS are increasingly using Python to fill their students' needs for programming skills. See February's PSF blog post Python in Nature for an explanation and example of this trend by Dr. Adina Howe, Professor of Agriculture and Biosystems Engineering at Iowa State University.
The increasing popularity of Python as the language for introductory CS courses in the US will undoubtedly lead to further growth of the Python community and the language. As Guo explains:
… the choice of what language to teach first reflects the pedagogical philosophy of each department and influences many students' first impressions of computer science. The languages chosen by top U.S. departments could indicate broader trends in computer science education, since those are often trendsetters for the rest of the educational community.
I would love to hear from readers. Please send feedback, comments, or blog ideas to me at msushi@gnosis.cx.

26 Mar 2015 10:42pm GMT

Python Software Foundation: World Domination: One Student at a Time!

A couple of years ago, I discovered the edX MIT course 6.00x Intro to Computer Science and Programming Using Python. At the time, I was eager to learn Python and CS basics, so I took the plunge.
The course has been offered through edX each semester since, and at some point it was divided into two courses to allow more time for in-depth study, as the original one-semester course moved very quickly from basics to more advanced topics, such as complexity classes, plotting techniques, stochastic programs, probability, random walks, and graph optimization. I can't say enough good things about the excellence of Professor John Guttag, who developed the course and wrote the accompanying textbook (which is recommended but not required), along with co-teachers, Profs. Eric Grimson and Chris Terman.
I was grateful at the time to have found a free introductory college-level course in computer science that uses Python, rather than C, Java, or another language, as I had already had some acquaintance with Python and wanted to solidify my foundation and gain more skill. Working through the course led me to appreciate the features of Python that make it a wonderful teaching language. Since it is relatively easy to learn, it allows the learner to get up and running quickly, to write code and get results early on, without getting too bogged down and discouraged (something that I, as a humanities rather than a math person, had experienced in the past.) In addition, Python teaches good programming habits, including the importance of good documentation, what Prof. Guttag frequently referred to as "good hygiene." I remember wondering at the time why Python wasn't always the language taught to beginners.
Well, today this is the trend.
According to a July 2014 study by Phillip Guo, Python is Now the Most Popular Introductory Teaching Language at Top U.S. Universities. Guo analyzed the course curricula for the top 39 CS Departments in the US. He used U.S. News' ranking of best computer science schools in 2014, which begins with Carnegie Mellon, MIT, Stanford, and UC Berkeley (he stopped at 39 because apparently there was an 8-way tie for #40), and found that 27 of them teach Python in their Intro courses. Of the top 10 departments, the proportion was higher- 8 of them teach Python. The next most-taught languages the study found were (in descending order): Java, MATLAB, C, C+, Scheme, and Scratch. Moreover, in addition to edX, both Udacity and Coursera use Python for their introductory courses.
Anecdotally, Guo found that professors in academic fields outside of CS are increasingly using Python to fill their students' needs for programming skills. See February's PSF blog post Python in Nature for an explanation and example of this trend by Dr. Adina Howe, Professor of Agriculture and Biosystems Engineering at Iowa State University.
The increasing popularity of Python as the language for introductory CS courses in the US will undoubtedly lead to further growth of the Python community and the language. As Guo explains:
… the choice of what language to teach first reflects the pedagogical philosophy of each department and influences many students' first impressions of computer science. The languages chosen by top U.S. departments could indicate broader trends in computer science education, since those are often trendsetters for the rest of the educational community.
I would love to hear from readers. Please send feedback, comments, or blog ideas to me at msushi@gnosis.cx.

26 Mar 2015 10:42pm GMT

Frank Wierzbicki: Jython 2.7 release candidate 1 available!

[Update: on Windows machines the installer shows an error at the end. The installer needs to be closed manually, but then the install should still work.]

We will fix this for rc2.] On behalf of the Jython development team, I'm pleased to announce that the first release candidate of Jython 2.7 is available! We're getting very close to a real release finally! I'd like to thank Amobee for sponsoring my work on Jython. I'd also like to thank the many contributors to Jython.

Jython 2.7rc1 brings us up to language level compatibility with the 2.7 version of CPython. We have focused largely on CPython compatibility, and so this release of Jython can run more pure Python apps then any previous release. Please see the NEWS file for detailed release notes. This release of Jython requires JDK 7 or above.

This release is being hosted at maven central. There are three main distributions. In order of popularity:

To see all of the files available including checksums, go here and navigate to the appropriate distribution and version.

26 Mar 2015 7:00pm GMT

Frank Wierzbicki: Jython 2.7 release candidate 1 available!

[Update: on Windows machines the installer shows an error at the end. The installer needs to be closed manually, but then the install should still work.]

We will fix this for rc2.] On behalf of the Jython development team, I'm pleased to announce that the first release candidate of Jython 2.7 is available! We're getting very close to a real release finally! I'd like to thank Amobee for sponsoring my work on Jython. I'd also like to thank the many contributors to Jython.

Jython 2.7rc1 brings us up to language level compatibility with the 2.7 version of CPython. We have focused largely on CPython compatibility, and so this release of Jython can run more pure Python apps then any previous release. Please see the NEWS file for detailed release notes. This release of Jython requires JDK 7 or above.

This release is being hosted at maven central. There are three main distributions. In order of popularity:

To see all of the files available including checksums, go here and navigate to the appropriate distribution and version.

26 Mar 2015 7:00pm GMT

Carl Trachte: IE and Getting a Text File Off the Web - Selenium Web Tools

I've blogged previously about getting information off of a distant server on my employer's internal SharePoint site. Automating this can be a little challenging, especially when there's a change.

My new desktop showed up with Internet Explorer 11 and Windows 7 Enterprise. When I went to run my MineSight multirun (basically a batch file with a GUI front end that our mine planning vendor provides) the file fetch from our SharePoint site didn't work. A little googling led me to Selenium.

As is often the case, I am wayyyy late to the party here. I remember Selenium from Pycon 2010 in Atlanta because they gave us a nice mug with new string formatting on it that I use frequently (both the mug and the formatting):

I was at Pycon 2010 . . . and I have the mug to prove it.


My project manager/boss at the time, Eric, seeing me gush over the string formatting commands, did his usual button-pushing exercise by commenting, "I don't know; why didn't they put something on there like 'from pot import coffee'?" People, y'know?

Back to Selenium - I was able to get what I needed from it with some research and downloading. The steps are basically:


1) Download IEDriverServer.exe
2) Put the executable in a location in your path.
3) Download Python Selenium Bindings and follow the install instructions. I went the Python 3.4 route (versus the Python 2.7 that comes with MineSight) - personal preference on my part.

4) Make sure your Internet Explorer environment/application is set up in a way that won't cause you problems. I could try to describe this, but this blog post from a Selenium developer does it so much better (complete with screenshots): http://jimevansmusic.blogspot.com/2012/08/youre-doing-it-wrong-protected-mode-and.html. When Microsoft talks about "zones" and IE Protected Mode, the zones refer to things like "Trusted Sites," company web, external internet, etc. - all those have to be set to protected mode or things won't work and you'll get a fairly cryptic error message when the script crashes.


For my example, I was able to comment out some of the things I need to do within the MineSight multirun. The DOS window hangs and IEDriverServer stays open within the MineSight multirun and app - I hacked this problem by killing it with an os.system() call. Whatever it takes.
I couldn't efficiently get the script to recognize HTML tag names, so I hacked that with text processing. This is bad, but effective.
The code:
#!C:\Python34\python
"""
Get text from site via Internet Explorer.
"""
INST = 'instructions.txt'
# For killing process inside Multirun.
# import os
from time import sleep as slpx
from selenium import webdriver
# XXX - hack - had difficulty getting
# things by tag - text processed it.
PRETAG = '<pre>'
PRETAGLEN = len(PRETAG)

PRETAGCLOSE = '</pre>'
# Seconds to pause at end.
PAUSE = 3
INSTRUCTIONS = 'http://ftp3.usa.openbsd.org/pub/OpenBSD/5.6/README'
INSTR = 'instructions.txt'
# XXX - may not matter (\r versus \n), in all cases
# but for numbers in multirun, makeshift chomp
# processing made a difference.

RETCHAR = '\r'
# Hack to shutdown DOS window.
# TASKKILL = 'taskkill /im IEDriverServer.exe /F'
def getbody(url):
"""
Given the website address (url),
returns inner HTML text stripped of tags.
"""
browser = webdriver.Ie()
browser.get(url)
text = browser.page_source
browser.close()
text = text[(text.index(PRETAG) + PRETAGLEN):]
text = text[:(text.index(PRETAGCLOSE))]
text = text.split(RETCHAR)
[x.strip() for x in text]
return text
textii = getbody(INSTRUCTIONS)
print('\nDealing with writing of instructions file . . .\n')
textii = ''.join(textii)
f = open(INSTR, 'w')
f.write(textii)
f.close()
print('Instructions copied.')
print('\nPausing {:d} seconds . . .\n'.format(PAUSE))
slpx(PAUSE)

# XXX - can't get window to close in Multirun (MXPERT) - CBT 23MAR2015
# os.system(TASKKILL)


26 Mar 2015 4:41pm GMT

Carl Trachte: IE and Getting a Text File Off the Web - Selenium Web Tools

I've blogged previously about getting information off of a distant server on my employer's internal SharePoint site. Automating this can be a little challenging, especially when there's a change.

My new desktop showed up with Internet Explorer 11 and Windows 7 Enterprise. When I went to run my MineSight multirun (basically a batch file with a GUI front end that our mine planning vendor provides) the file fetch from our SharePoint site didn't work. A little googling led me to Selenium.

As is often the case, I am wayyyy late to the party here. I remember Selenium from Pycon 2010 in Atlanta because they gave us a nice mug with new string formatting on it that I use frequently (both the mug and the formatting):

I was at Pycon 2010 . . . and I have the mug to prove it.


My project manager/boss at the time, Eric, seeing me gush over the string formatting commands, did his usual button-pushing exercise by commenting, "I don't know; why didn't they put something on there like 'from pot import coffee'?" People, y'know?

Back to Selenium - I was able to get what I needed from it with some research and downloading. The steps are basically:


1) Download IEDriverServer.exe
2) Put the executable in a location in your path.
3) Download Python Selenium Bindings and follow the install instructions. I went the Python 3.4 route (versus the Python 2.7 that comes with MineSight) - personal preference on my part.

4) Make sure your Internet Explorer environment/application is set up in a way that won't cause you problems. I could try to describe this, but this blog post from a Selenium developer does it so much better (complete with screenshots): http://jimevansmusic.blogspot.com/2012/08/youre-doing-it-wrong-protected-mode-and.html. When Microsoft talks about "zones" and IE Protected Mode, the zones refer to things like "Trusted Sites," company web, external internet, etc. - all those have to be set to protected mode or things won't work and you'll get a fairly cryptic error message when the script crashes.


For my example, I was able to comment out some of the things I need to do within the MineSight multirun. The DOS window hangs and IEDriverServer stays open within the MineSight multirun and app - I hacked this problem by killing it with an os.system() call. Whatever it takes.
I couldn't efficiently get the script to recognize HTML tag names, so I hacked that with text processing. This is bad, but effective.
The code:
#!C:\Python34\python
"""
Get text from site via Internet Explorer.
"""
INST = 'instructions.txt'
# For killing process inside Multirun.
# import os
from time import sleep as slpx
from selenium import webdriver
# XXX - hack - had difficulty getting
# things by tag - text processed it.
PRETAG = '<pre>'
PRETAGLEN = len(PRETAG)

PRETAGCLOSE = '</pre>'
# Seconds to pause at end.
PAUSE = 3
INSTRUCTIONS = 'http://ftp3.usa.openbsd.org/pub/OpenBSD/5.6/README'
INSTR = 'instructions.txt'
# XXX - may not matter (\r versus \n), in all cases
# but for numbers in multirun, makeshift chomp
# processing made a difference.

RETCHAR = '\r'
# Hack to shutdown DOS window.
# TASKKILL = 'taskkill /im IEDriverServer.exe /F'
def getbody(url):
"""
Given the website address (url),
returns inner HTML text stripped of tags.
"""
browser = webdriver.Ie()
browser.get(url)
text = browser.page_source
browser.close()
text = text[(text.index(PRETAG) + PRETAGLEN):]
text = text[:(text.index(PRETAGCLOSE))]
text = text.split(RETCHAR)
[x.strip() for x in text]
return text
textii = getbody(INSTRUCTIONS)
print('\nDealing with writing of instructions file . . .\n')
textii = ''.join(textii)
f = open(INSTR, 'w')
f.write(textii)
f.close()
print('Instructions copied.')
print('\nPausing {:d} seconds . . .\n'.format(PAUSE))
slpx(PAUSE)

# XXX - can't get window to close in Multirun (MXPERT) - CBT 23MAR2015
# os.system(TASKKILL)


26 Mar 2015 4:41pm GMT

PyCon: For Microsoft, Python support extends far beyond Windows installers

You might have known that Python's 1.0 release came at the start of 1994, but did you know Microsoft shipped its Merchant Server 1.0 product built on Python only a few years later in 1996? Microsoft, this year's Keystone sponsor, has long been a user and supporter of Python, with a history of use within build and test infrastructure and individual users all around the company. There are even a few lawyers writing Python code.

In 2006 they introduced the world to IronPython, a .NET runtime for Python, and later the excellent Python Tools for Visual Studio plug-in in 2011. They continue to release Python code, as it's "a must-have language for any team that releases developer kits or libraries, especially for services on Azure that can be used from any operating system," according to Steve Dower, a developer on Microsoft's Python Tools team.

"Python has very strong cross-platform support, which is absolutely critical these days," says Steve. "It's very attractive for our users to literally be able to 'write once-run anywhere.'

"The breadth of the community is also very attractive, especially the support for scientific use," he continued. Microsoft has been a significant donor to the Jupyter project (formerly IPython) as well as a platinum sponsor of the NumFOCUS Foundation.

Along with supporting those projects, they have also been providing MSDN subscriptions to the core Python team to assist with development and testing on Windows. Beyond supporting the existing developers, they've jumped in the ring themselves as one of the few companies to employ developers working on CPython itself. "Python has done an amazing job of working well on Windows, and we hope that by taking an active involvement we can push things along further," offers Steve, whose work includes being a core developer on the CPython project.


Steve's CPython work has focused around Windows issues, including an improved installer for 3.5. Additionally, the team was able to come up with a special package for Python users: Microsoft Visual C++ Compiler for Python 2.7. Due to Python 2.7 being built on the Visual C++ 2008 runtime, which is no longer supported, they created this package to provide the necessary tools and headers to continue building extension modules for Python 2.7, which will live through at least 2020 as was announced at last year's language summit.



Along with efforts on Python itself, they're hard at work on improving tooling for the upcoming Visual Studio 2015 and Python 3.5 releases. "Practically everything we do will integrate with Visual Studio in some way," says Steve of Python Tools for Visual Studio. "PTVS has been free and open-source from day one, and combined with Visual Studio Community Edition makes for a powerful, free multi-lingual IDE."

As for what's next with PTVS, Steve says, "we try and be responsive to the needs of our users, and we are an open-source project that accepts contributions, so there's always a chance that the next amazing feature won't even come from our team. We've also recently joined forces with the Azure Machine Learning team and are looking forward to adding more data science tooling as well.

"We want new and experienced developers alike to have the best tools, the best libraries, the best debugging and the best services without having to give up Linux support, Visual Studio, CPython, git, or whatever tools they've already integrated into their workflow."

When it comes to PyCon, they see it as "a learning opportunity for Microsoft, as well as a chance for us to show off some of the work we've been doing." "For those of us at Microsoft who always knew how great the Python community is, it's also been great to bring our colleagues and show them.

"We love that PyCon is about building and diversifying the community, and not about sales, marketing and business deals," says Steve. If you head to their booth in the expo hall, you'll find out first hand that they're there to talk about code and building great things. They're looking forward to showing off some great new demos and have exciting new things to talk about.

The PyCon organizers thank Microsoft for another year of sponsorship and look forward to another great conference!

26 Mar 2015 10:14am GMT

PyCon: For Microsoft, Python support extends far beyond Windows installers

You might have known that Python's 1.0 release came at the start of 1994, but did you know Microsoft shipped its Merchant Server 1.0 product built on Python only a few years later in 1996? Microsoft, this year's Keystone sponsor, has long been a user and supporter of Python, with a history of use within build and test infrastructure and individual users all around the company. There are even a few lawyers writing Python code.

In 2006 they introduced the world to IronPython, a .NET runtime for Python, and later the excellent Python Tools for Visual Studio plug-in in 2011. They continue to release Python code, as it's "a must-have language for any team that releases developer kits or libraries, especially for services on Azure that can be used from any operating system," according to Steve Dower, a developer on Microsoft's Python Tools team.

"Python has very strong cross-platform support, which is absolutely critical these days," says Steve. "It's very attractive for our users to literally be able to 'write once-run anywhere.'

"The breadth of the community is also very attractive, especially the support for scientific use," he continued. Microsoft has been a significant donor to the Jupyter project (formerly IPython) as well as a platinum sponsor of the NumFOCUS Foundation.

Along with supporting those projects, they have also been providing MSDN subscriptions to the core Python team to assist with development and testing on Windows. Beyond supporting the existing developers, they've jumped in the ring themselves as one of the few companies to employ developers working on CPython itself. "Python has done an amazing job of working well on Windows, and we hope that by taking an active involvement we can push things along further," offers Steve, whose work includes being a core developer on the CPython project.


Steve's CPython work has focused around Windows issues, including an improved installer for 3.5. Additionally, the team was able to come up with a special package for Python users: Microsoft Visual C++ Compiler for Python 2.7. Due to Python 2.7 being built on the Visual C++ 2008 runtime, which is no longer supported, they created this package to provide the necessary tools and headers to continue building extension modules for Python 2.7, which will live through at least 2020 as was announced at last year's language summit.



Along with efforts on Python itself, they're hard at work on improving tooling for the upcoming Visual Studio 2015 and Python 3.5 releases. "Practically everything we do will integrate with Visual Studio in some way," says Steve of Python Tools for Visual Studio. "PTVS has been free and open-source from day one, and combined with Visual Studio Community Edition makes for a powerful, free multi-lingual IDE."

As for what's next with PTVS, Steve says, "we try and be responsive to the needs of our users, and we are an open-source project that accepts contributions, so there's always a chance that the next amazing feature won't even come from our team. We've also recently joined forces with the Azure Machine Learning team and are looking forward to adding more data science tooling as well.

"We want new and experienced developers alike to have the best tools, the best libraries, the best debugging and the best services without having to give up Linux support, Visual Studio, CPython, git, or whatever tools they've already integrated into their workflow."

When it comes to PyCon, they see it as "a learning opportunity for Microsoft, as well as a chance for us to show off some of the work we've been doing." "For those of us at Microsoft who always knew how great the Python community is, it's also been great to bring our colleagues and show them.

"We love that PyCon is about building and diversifying the community, and not about sales, marketing and business deals," says Steve. If you head to their booth in the expo hall, you'll find out first hand that they're there to talk about code and building great things. They're looking forward to showing off some great new demos and have exciting new things to talk about.

The PyCon organizers thank Microsoft for another year of sponsorship and look forward to another great conference!

26 Mar 2015 10:14am GMT

Tryton News: Pycon 2015

This year, there will be 2 Foundation members (Sharoon Thomas and Cédric Krier) present during the PyCon 2015 at Montréal. PyCon is the largest annual conference for the Python community which Tryton is a part of.

If you want to meet Tryton's people, we will host an Open Space and sprint on Tryton will be organized.

26 Mar 2015 10:00am GMT

Tryton News: Pycon 2015

This year, there will be 2 Foundation members (Sharoon Thomas and Cédric Krier) present during the PyCon 2015 at Montréal. PyCon is the largest annual conference for the Python community which Tryton is a part of.

If you want to meet Tryton's people, we will host an Open Space and sprint on Tryton will be organized.

26 Mar 2015 10:00am GMT

PyPy Development: PyPy 2.5.1 Released

PyPy 2.5.1 - Pineapple Bromeliad

We're pleased to announce PyPy 2.5.1, Pineapple Bromeliad following on the heels of 2.5.0. You can download the PyPy 2.5.1 release here:
http://pypy.org/download.html
We would like to thank our donors for the continued support of the PyPy project, and for those who donate to our three sub-projects, as well as our volunteers and contributors. We've shown quite a bit of progress, but we're slowly running out of funds. Please consider donating more, or even better convince your employer to donate, so we can finish those projects! The three sub-projects are:
  • Py3k (supporting Python 3.x): We have released a Python 3.2.5 compatible version we call PyPy3 2.4.0, and are working toward a Python 3.3 compatible version
  • STM (software transactional memory): We have released a first working version, and continue to try out new promising paths of achieving a fast multithreaded Python

  • NumPy which requires installation of our fork of upstream numpy, available on bitbucket
We would also like to encourage new people to join the project. PyPy has many layers and we need help with all of them: PyPy and Rpython documentation improvements, tweaking popular modules to run on pypy, or general help with making Rpython's JIT even better.

What is PyPy?

PyPy is a very compliant Python interpreter, almost a drop-in replacement for CPython 2.7. It's fast (pypy and cpython 2.7.x performance comparison) due to its integrated tracing JIT compiler.

This release supports x86 machines on most common operating systems (Linux 32/64, Mac OS X 64, Windows, and OpenBSD), as well as newer ARM hardware (ARMv6 or ARMv7, with VFPv3) running Linux.

While we support 32 bit python on Windows, work on the native Windows 64 bit python is still stalling, we would welcome a volunteer to handle that.

Highlights

  • The past months have seen pypy mature and grow, as rpython becomes the goto solution for writing fast dynamic language interpreters. Our separation of Rpython from the python interpreter PyPy is now much clearer in the PyPy documentation and we now have seperate RPython documentation. Tell us what still isn't clear, or even better help us improve the documentation.
  • We merged version 2.7.9 of python's stdlib. From the python release notice:
    • The entirety of Python 3.4's ssl module has been backported. See PEP 466 for justification.
    • HTTPS certificate validation using the system's certificate store is now enabled by default. See PEP 476 for details.
    • SSLv3 has been disabled by default in httplib and its reverse dependencies due to the POODLE attack.
    • The ensurepip module has been backported, which provides the pip package manager in every Python 2.7 installation. See PEP 477.

  • The garbage collector now ignores parts of the stack which did not change since the last collection, another performance boost
  • errno and LastError are saved around cffi calls so things like pdb will not overwrite it
  • We continue to asymptotically approach a score of 7 times faster than cpython on our benchmark suite, we now rank 6.98 on latest runs
Please try it out and let us know what you think. We welcome success stories, experiments, or benchmarks, we know you are using PyPy, please tell us about it!
Cheers
The PyPy Team

26 Mar 2015 9:45am GMT

PyPy Development: PyPy 2.5.1 Released

PyPy 2.5.1 - Pineapple Bromeliad

We're pleased to announce PyPy 2.5.1, Pineapple Bromeliad following on the heels of 2.5.0. You can download the PyPy 2.5.1 release here:
http://pypy.org/download.html
We would like to thank our donors for the continued support of the PyPy project, and for those who donate to our three sub-projects, as well as our volunteers and contributors. We've shown quite a bit of progress, but we're slowly running out of funds. Please consider donating more, or even better convince your employer to donate, so we can finish those projects! The three sub-projects are:
  • Py3k (supporting Python 3.x): We have released a Python 3.2.5 compatible version we call PyPy3 2.4.0, and are working toward a Python 3.3 compatible version
  • STM (software transactional memory): We have released a first working version, and continue to try out new promising paths of achieving a fast multithreaded Python

  • NumPy which requires installation of our fork of upstream numpy, available on bitbucket
We would also like to encourage new people to join the project. PyPy has many layers and we need help with all of them: PyPy and Rpython documentation improvements, tweaking popular modules to run on pypy, or general help with making Rpython's JIT even better.

What is PyPy?

PyPy is a very compliant Python interpreter, almost a drop-in replacement for CPython 2.7. It's fast (pypy and cpython 2.7.x performance comparison) due to its integrated tracing JIT compiler.

This release supports x86 machines on most common operating systems (Linux 32/64, Mac OS X 64, Windows, and OpenBSD), as well as newer ARM hardware (ARMv6 or ARMv7, with VFPv3) running Linux.

While we support 32 bit python on Windows, work on the native Windows 64 bit python is still stalling, we would welcome a volunteer to handle that.

Highlights

  • The past months have seen pypy mature and grow, as rpython becomes the goto solution for writing fast dynamic language interpreters. Our separation of Rpython from the python interpreter PyPy is now much clearer in the PyPy documentation and we now have seperate RPython documentation. Tell us what still isn't clear, or even better help us improve the documentation.
  • We merged version 2.7.9 of python's stdlib. From the python release notice:
    • The entirety of Python 3.4's ssl module has been backported. See PEP 466 for justification.
    • HTTPS certificate validation using the system's certificate store is now enabled by default. See PEP 476 for details.
    • SSLv3 has been disabled by default in httplib and its reverse dependencies due to the POODLE attack.
    • The ensurepip module has been backported, which provides the pip package manager in every Python 2.7 installation. See PEP 477.

  • The garbage collector now ignores parts of the stack which did not change since the last collection, another performance boost
  • errno and LastError are saved around cffi calls so things like pdb will not overwrite it
  • We continue to asymptotically approach a score of 7 times faster than cpython on our benchmark suite, we now rank 6.98 on latest runs
Please try it out and let us know what you think. We welcome success stories, experiments, or benchmarks, we know you are using PyPy, please tell us about it!
Cheers
The PyPy Team

26 Mar 2015 9:45am GMT

Continuum Analytics Blog: The Art of Abstraction - Continuum + Silicon Valley Data Science White Paper

How Separating Code, Data, and Context Will Make Your Business Better

26 Mar 2015 12:00am GMT

Continuum Analytics Blog: The Art of Abstraction - Continuum + Silicon Valley Data Science White Paper

How Separating Code, Data, and Context Will Make Your Business Better

26 Mar 2015 12:00am GMT

25 Mar 2015

feedPlanet Python

Mike Driscoll: The Python 101 Screencast Kickstarter is Now Live!

mousecovertitlejpg_sm_title

My latest project is turning my book, Python 101, into a Screencast. I have started a Kickstarter to raise funds to help in this endeavor. You can check it out here:

https://www.kickstarter.com/projects/34257246/the-python-101-screencast

The basic idea is to take each chapter of the book and turn it into a screencast. There are 44 chapters currently that will be turned into mini-videos. I've already realized I can add a lot of other items in a screencast that are easier to show than to write about, so there will definitely be additional content. I hope you will join me in this project.

Thanks,
Mike

25 Mar 2015 1:19pm GMT

Mike Driscoll: The Python 101 Screencast Kickstarter is Now Live!

mousecovertitlejpg_sm_title

My latest project is turning my book, Python 101, into a Screencast. I have started a Kickstarter to raise funds to help in this endeavor. You can check it out here:

https://www.kickstarter.com/projects/34257246/the-python-101-screencast

The basic idea is to take each chapter of the book and turn it into a screencast. There are 44 chapters currently that will be turned into mini-videos. I've already realized I can add a lot of other items in a screencast that are easier to show than to write about, so there will definitely be additional content. I hope you will join me in this project.

Thanks,
Mike

25 Mar 2015 1:19pm GMT

ClusterHQ: Moving a database container with Docker Swarm and Flocker

Please note: because this demo uses Powerstrip, which is only meant for prototyping Docker extensions, we do not recommend this configuration for anything approaching production usage. When Docker extensions become official, Flocker will support them. Until then, this is just a proof-of-concept.

Today we are going to demonstrate migrating a database container and its data across hosts using only the Docker client as the trigger.

Imagine we are running a database container with data being saved in a Docker volume and now we want to upgrade the hardware for the host the database container is running on. Clearly, we need a way of moving the container and the data as a single atomic unit.

Docker Swarm is capable of scheduling the container to be run on a particular host (using constraints) - we are going to demonstrate how to combine Flocker with Swarm and migrate the data alongside the container by combining the following tools:

Swarm + Flocker + Weave + Powerstrip + Powerstrip-flocker + Powerstrip-weave

Overview

Here is an overview of the components that are used to make this example work:

overview

Scenario

We have 2 simple services in our stack - a HTTP API and a Database API, also exposed over HTTP. We have used Flocker to handle our volumes and Weave to handle our networking.

We quickly discover that the node with the spinning disk which hosts our database container is too slow. We need an SSD drive and this means migrating our database container (along with its data) to another host.

Ideally - we want to run our database container on a second machine and for the data to just move with the container. Because we are using Powerstrip-flocker together with Swarm - we can stop the container on the first node, start it up on the second node and our data will have followed the database container - using only the Docker client!

Before

Here is a diagram of the setup before we have moved the database container:

layout-pre

After

Here is a diagram of the setup after we have moved the database container (and its data + IP address):

layout-post

Try it yourself! Requirements for the demo

First you need to install: VirtualBox + Vagrant

Start

To run the demo virtual machines:

$ git clone https://github.com/binocarlos/powerstrip-swarm-demo
$ cd powerstrip-swarm-demo
$ vagrant up

Run

We have included a script that will run through each of the commands in the demo automatically:

$ vagrant ssh master
master$ sudo bash /vagrant/run.sh demo

Manual example

If we run each step of the example manually, we can see clearly what is happening on each step.

Step 1

First we SSH onto the master and export DOCKER_HOST:

$ vagrant ssh master
master$ export DOCKER_HOST=localhost:2375

Step 2

Then we start the HTTP server on node1:

master$ docker run -d \
  --name demo-server \
  -e constraint:storage==disk \
  -e WEAVE_CIDR=10.255.0.11/24 \
  -e API_IP=10.255.0.10 \
  -p 8080:80 \
  binocarlos/multi-http-demo-server:latest

Step 3

Then we start the DB server on node1:

master$ docker run -d \
  --hostname disk \
  --name demo-api \
  -e constraint:storage==disk \
  -e WEAVE_CIDR=10.255.0.10/24 \
  -v /flocker/data1:/tmp \
  binocarlos/multi-http-demo-api:latest

Step 4

Then we hit the web service a few times to increase the number:

master$ curl -L http://172.16.255.251:8080
master$ curl -L http://172.16.255.251:8080
master$ curl -L http://172.16.255.251:8080
master$ curl -L http://172.16.255.251:8080
master$ curl -L http://172.16.255.251:8080

Step 5

Then we kill the database container:

master$ docker rm -f demo-api

Step 6

Now we start the DB server on node2:

master$ docker run -d \
  --hostname ssd \
  --name demo-api \
  -e constraint:storage==ssd \
  -e WEAVE_CIDR=10.255.0.10/24 \
  -v /flocker/data1:/tmp \
  binocarlos/multi-http-demo-api:latest

Step 7

Then we hit the web service a few times to ensure that it:

master$ curl -L http://172.16.255.251:8080
master$ curl -L http://172.16.255.251:8080
master$ curl -L http://172.16.255.251:8080
master$ curl -L http://172.16.255.251:8080
master$ curl -L http://172.16.255.251:8080

Step 8

Now we close the 2 containers

master$ docker rm -f demo-api
master$ docker rm -f demo-server

Info

You can see the state of the swarm by doing this on the master:

$ vagrant ssh master
master$ DOCKER_HOST=localhost:2375 docker ps -a

This displays the containers used for Powerstrip, Flocker and weave

You can see the state of the weave network by doing this on node1 or node2:

$ vagrant ssh node1
node1$ sudo bash /vagrant/install.sh weave status

Conclusion

We have moved both an IP address and a data volume across hosts using nothing more than the Docker client!

What do you think? Join the discussion over on HackerNews.

The post Moving a database container with Docker Swarm and Flocker appeared first on ClusterHQ.

25 Mar 2015 1:11pm GMT

ClusterHQ: Moving a database container with Docker Swarm and Flocker

Please note: because this demo uses Powerstrip, which is only meant for prototyping Docker extensions, we do not recommend this configuration for anything approaching production usage. When Docker extensions become official, Flocker will support them. Until then, this is just a proof-of-concept.

Today we are going to demonstrate migrating a database container and its data across hosts using only the Docker client as the trigger.

Imagine we are running a database container with data being saved in a Docker volume and now we want to upgrade the hardware for the host the database container is running on. Clearly, we need a way of moving the container and the data as a single atomic unit.

Docker Swarm is capable of scheduling the container to be run on a particular host (using constraints) - we are going to demonstrate how to combine Flocker with Swarm and migrate the data alongside the container by combining the following tools:

Swarm + Flocker + Weave + Powerstrip + Powerstrip-flocker + Powerstrip-weave

Overview

Here is an overview of the components that are used to make this example work:

overview

Scenario

We have 2 simple services in our stack - a HTTP API and a Database API, also exposed over HTTP. We have used Flocker to handle our volumes and Weave to handle our networking.

We quickly discover that the node with the spinning disk which hosts our database container is too slow. We need an SSD drive and this means migrating our database container (along with its data) to another host.

Ideally - we want to run our database container on a second machine and for the data to just move with the container. Because we are using Powerstrip-flocker together with Swarm - we can stop the container on the first node, start it up on the second node and our data will have followed the database container - using only the Docker client!

Before

Here is a diagram of the setup before we have moved the database container:

layout-pre

After

Here is a diagram of the setup after we have moved the database container (and its data + IP address):

layout-post

Try it yourself! Requirements for the demo

First you need to install: VirtualBox + Vagrant

Start

To run the demo virtual machines:

$ git clone https://github.com/binocarlos/powerstrip-swarm-demo
$ cd powerstrip-swarm-demo
$ vagrant up

Run

We have included a script that will run through each of the commands in the demo automatically:

$ vagrant ssh master
master$ sudo bash /vagrant/run.sh demo

Manual example

If we run each step of the example manually, we can see clearly what is happening on each step.

Step 1

First we SSH onto the master and export DOCKER_HOST:

$ vagrant ssh master
master$ export DOCKER_HOST=localhost:2375

Step 2

Then we start the HTTP server on node1:

master$ docker run -d \
  --name demo-server \
  -e constraint:storage==disk \
  -e WEAVE_CIDR=10.255.0.11/24 \
  -e API_IP=10.255.0.10 \
  -p 8080:80 \
  binocarlos/multi-http-demo-server:latest

Step 3

Then we start the DB server on node1:

master$ docker run -d \
  --hostname disk \
  --name demo-api \
  -e constraint:storage==disk \
  -e WEAVE_CIDR=10.255.0.10/24 \
  -v /flocker/data1:/tmp \
  binocarlos/multi-http-demo-api:latest

Step 4

Then we hit the web service a few times to increase the number:

master$ curl -L http://172.16.255.251:8080
master$ curl -L http://172.16.255.251:8080
master$ curl -L http://172.16.255.251:8080
master$ curl -L http://172.16.255.251:8080
master$ curl -L http://172.16.255.251:8080

Step 5

Then we kill the database container:

master$ docker rm -f demo-api

Step 6

Now we start the DB server on node2:

master$ docker run -d \
  --hostname ssd \
  --name demo-api \
  -e constraint:storage==ssd \
  -e WEAVE_CIDR=10.255.0.10/24 \
  -v /flocker/data1:/tmp \
  binocarlos/multi-http-demo-api:latest

Step 7

Then we hit the web service a few times to ensure that it:

master$ curl -L http://172.16.255.251:8080
master$ curl -L http://172.16.255.251:8080
master$ curl -L http://172.16.255.251:8080
master$ curl -L http://172.16.255.251:8080
master$ curl -L http://172.16.255.251:8080

Step 8

Now we close the 2 containers

master$ docker rm -f demo-api
master$ docker rm -f demo-server

Info

You can see the state of the swarm by doing this on the master:

$ vagrant ssh master
master$ DOCKER_HOST=localhost:2375 docker ps -a

This displays the containers used for Powerstrip, Flocker and weave

You can see the state of the weave network by doing this on node1 or node2:

$ vagrant ssh node1
node1$ sudo bash /vagrant/install.sh weave status

Conclusion

We have moved both an IP address and a data volume across hosts using nothing more than the Docker client!

What do you think? Join the discussion over on HackerNews.

The post Moving a database container with Docker Swarm and Flocker appeared first on ClusterHQ.

25 Mar 2015 1:11pm GMT

10 Nov 2011

feedPython Software Foundation | GSoC'11 Students

Benedict Stein: King Willams Town Bahnhof

Gestern musste ich morgens zur Station nach KWT um unsere Rerservierten Bustickets für die Weihnachtsferien in Capetown abzuholen. Der Bahnhof selber ist seit Dezember aus kostengründen ohne Zugverbindung - aber Translux und co - die langdistanzbusse haben dort ihre Büros.


Größere Kartenansicht




© benste CC NC SA

10 Nov 2011 10:57am GMT

09 Nov 2011

feedPython Software Foundation | GSoC'11 Students

Benedict Stein

Niemand ist besorgt um so was - mit dem Auto fährt man einfach durch, und in der City - nahe Gnobie- "ne das ist erst gefährlich wenn die Feuerwehr da ist" - 30min später auf dem Rückweg war die Feuerwehr da.




© benste CC NC SA

09 Nov 2011 8:25pm GMT

08 Nov 2011

feedPython Software Foundation | GSoC'11 Students

Benedict Stein: Brai Party

Brai = Grillabend o.ä.

Die möchte gern Techniker beim Flicken ihrer SpeakOn / Klinke Stecker Verzweigungen...

Die Damen "Mamas" der Siedlung bei der offiziellen Eröffnungsrede

Auch wenn weniger Leute da waren als erwartet, Laute Musik und viele Leute ...

Und natürlich ein Feuer mit echtem Holz zum Grillen.

© benste CC NC SA

08 Nov 2011 2:30pm GMT

07 Nov 2011

feedPython Software Foundation | GSoC'11 Students

Benedict Stein: Lumanyano Primary

One of our missions was bringing Katja's Linux Server back to her room. While doing that we saw her new decoration.

Björn, Simphiwe carried the PC to Katja's school


© benste CC NC SA

07 Nov 2011 2:00pm GMT

06 Nov 2011

feedPython Software Foundation | GSoC'11 Students

Benedict Stein: Nelisa Haircut

Today I went with Björn to Needs Camp to Visit Katja's guest family for a special Party. First of all we visited some friends of Nelisa - yeah the one I'm working with in Quigney - Katja's guest fathers sister - who did her a haircut.

African Women usually get their hair done by arranging extensions and not like Europeans just cutting some hair.

In between she looked like this...

And then she was done - looks amazing considering the amount of hair she had last week - doesn't it ?

© benste CC NC SA

06 Nov 2011 7:45pm GMT

05 Nov 2011

feedPython Software Foundation | GSoC'11 Students

Benedict Stein: Mein Samstag

Irgendwie viel mir heute auf das ich meine Blogposts mal ein bischen umstrukturieren muss - wenn ich immer nur von neuen Plätzen berichte, dann müsste ich ja eine Rundreise machen. Hier also mal ein paar Sachen aus meinem heutigen Alltag.

Erst einmal vorweg, Samstag zählt zumindest für uns Voluntäre zu den freien Tagen.

Dieses Wochenende sind nur Rommel und ich auf der Farm - Katja und Björn sind ja mittlerweile in ihren Einsatzstellen, und meine Mitbewohner Kyle und Jonathan sind zu Hause in Grahamstown - sowie auch Sipho der in Dimbaza wohnt.
Robin, die Frau von Rommel ist in Woodie Cape - schon seit Donnerstag um da ein paar Sachen zur erledigen.
Naja wie dem auch sei heute morgen haben wir uns erstmal ein gemeinsames Weetbix/Müsli Frühstück gegönnt und haben uns dann auf den Weg nach East London gemacht. 2 Sachen waren auf der Checkliste Vodacom, Ethienne (Imobilienmakler) außerdem auf dem Rückweg die fehlenden Dinge nach NeedsCamp bringen.

Nachdem wir gerade auf der Dirtroad losgefahren sind mussten wir feststellen das wir die Sachen für Needscamp und Ethienne nicht eingepackt hatten aber die Pumpe für die Wasserversorgung im Auto hatten.

Also sind wir in EastLondon ersteinmal nach Farmerama - nein nicht das onlinespiel farmville - sondern einen Laden mit ganz vielen Sachen für eine Farm - in Berea einem nördlichen Stadteil gefahren.

In Farmerama haben wir uns dann beraten lassen für einen Schnellverschluss der uns das leben mit der Pumpe leichter machen soll und außerdem eine leichtere Pumpe zur Reperatur gebracht, damit es nicht immer so ein großer Aufwand ist, wenn mal wieder das Wasser ausgegangen ist.

Fego Caffé ist in der Hemmingways Mall, dort mussten wir und PIN und PUK einer unserer Datensimcards geben lassen, da bei der PIN Abfrage leider ein zahlendreher unterlaufen ist. Naja auf jeden Fall speichern die Shops in Südafrika so sensible Daten wie eine PUK - die im Prinzip zugang zu einem gesperrten Phone verschafft.

Im Cafe hat Rommel dann ein paar online Transaktionen mit dem 3G Modem durchgeführt, welches ja jetzt wieder funktionierte - und übrigens mittlerweile in Ubuntu meinem Linuxsystem perfekt klappt.

Nebenbei bin ich nach 8ta gegangen um dort etwas über deren neue Deals zu erfahren, da wir in einigen von Hilltops Centern Internet anbieten wollen. Das Bild zeigt die Abdeckung UMTS in NeedsCamp Katjas Ort. 8ta ist ein neuer Telefonanbieter von Telkom, nachdem Vodafone sich Telkoms anteile an Vodacom gekauft hat müssen die komplett neu aufbauen.
Wir haben uns dazu entschieden mal eine kostenlose Prepaidkarte zu testen zu organisieren, denn wer weis wie genau die Karte oben ist ... Bevor man einen noch so billigen Deal für 24 Monate signed sollte man wissen obs geht.

Danach gings nach Checkers in Vincent, gesucht wurden zwei Hotplates für WoodyCape - R 129.00 eine - also ca. 12€ für eine zweigeteilte Kochplatte.
Wie man sieht im Hintergrund gibts schon Weihnachtsdeko - Anfang November und das in Südafrika bei sonnig warmen min- 25°C

Mittagessen haben wir uns bei einem Pakistanischen Curry Imbiss gegönnt - sehr empfehlenswert !
Naja und nachdem wir dann vor ner Stunde oder so zurück gekommen sind habe ich noch den Kühlschrank geputzt den ich heute morgen zum defrosten einfach nach draußen gestellt hatte. Jetzt ist der auch mal wieder sauber und ohne 3m dicke Eisschicht...

Morgen ... ja darüber werde ich gesondert berichten ... aber vermutlich erst am Montag, denn dann bin ich nochmal wieder in Quigney(East London) und habe kostenloses Internet.

© benste CC NC SA

05 Nov 2011 4:33pm GMT

31 Oct 2011

feedPython Software Foundation | GSoC'11 Students

Benedict Stein: Sterkspruit Computer Center

Sterkspruit is one of Hilltops Computer Centres in the far north of Eastern Cape. On the trip to J'burg we've used the opportunity to take a look at the centre.

Pupils in the big classroom


The Trainer


School in Countryside


Adult Class in the Afternoon


"Town"


© benste CC NC SA

31 Oct 2011 4:58pm GMT

Benedict Stein: Technical Issues

What are you doing in an internet cafe if your ADSL and Faxline has been discontinued before months end. Well my idea was sitting outside and eating some ice cream.
At least it's sunny and not as rainy as on the weekend.


© benste CC NC SA

31 Oct 2011 3:11pm GMT

30 Oct 2011

feedPython Software Foundation | GSoC'11 Students

Benedict Stein: Nellis Restaurant

For those who are traveling through Zastron - there is a very nice Restaurant which is serving delicious food at reasanable prices.
In addition they're selling home made juices jams and honey.




interior


home made specialities - the shop in the shop


the Bar


© benste CC NC SA

30 Oct 2011 4:47pm GMT

29 Oct 2011

feedPython Software Foundation | GSoC'11 Students

Benedict Stein: The way back from J'burg

Having the 10 - 12h trip from J'burg back to ELS I was able to take a lot of pcitures including these different roadsides

Plain Street


Orange River in its beginngings (near Lesotho)


Zastron Anglican Church


The Bridge in Between "Free State" and Eastern Cape next to Zastron


my new Background ;)


If you listen to GoogleMaps you'll end up traveling 50km of gravel road - as it was just renewed we didn't have that many problems and saved 1h compared to going the official way with all it's constructions sites




Freeway


getting dark


© benste CC NC SA

29 Oct 2011 4:23pm GMT

28 Oct 2011

feedPython Software Foundation | GSoC'11 Students

Benedict Stein: Wie funktioniert eigentlich eine Baustelle ?

Klar einiges mag anders sein, vieles aber gleich - aber ein in Deutschland täglich übliches Bild einer Straßenbaustelle - wie läuft das eigentlich in Südafrika ?

Ersteinmal vorweg - NEIN keine Ureinwohner die mit den Händen graben - auch wenn hier mehr Manpower genutzt wird - sind sie fleißig mit Technologie am arbeiten.

Eine ganz normale "Bundesstraße"


und wie sie erweitert wird


gaaaanz viele LKWs


denn hier wird eine Seite über einen langen Abschnitt komplett gesperrt, so das eine Ampelschaltung mit hier 45 Minuten Wartezeit entsteht


Aber wenigstens scheinen die ihren Spaß zu haben ;) - Wie auch wir denn gücklicher Weise mussten wir nie länger als 10 min. warten.

© benste CC NC SA

28 Oct 2011 4:20pm GMT