15 December 2014

LUEE Episode 91: Straight White Christmas

In this episode of Life, the Universe & Everything Else, Ashlyn is joined by Laura, Gem, and Lauren to discuss oppression, privilege, and intersectionality, both in society at large and as it relates to the skeptical community, and then the panel caps off the episode with a game of Name That Holiday Tradition!

Life, the Universe & Everything Else is a program promoting secular humanism and scientific skepticism that is produced by the Winnipeg Skeptics and the Humanists, Atheists & Agnostics of Manitoba.

Note: Due to technical issues, we needed to switch over to our backup recording near the end of the episode, so we apologize for the decrease in audio quality. And continuing in our tradition of stealing games from other podcasts, this episode's game is in the spirit of Pat Roach's "Name That" from The Reality Check. If you don’t listen to that excellent podcast, you probably should!

Correction: The ability to read is apparently not one of Gem's strengths, as he insisted on pronouncing "Befana" as "Bellfana" for most of the recording. Sorry about that.

Links: Privilege (social inequality) (Wikipedia) | Privilege 101: A Quick and Dirty Guide (Everyday Feminism) | Straight White Male: The Lowest Difficulty Setting There Is (Whatever) | Facts are Cool | Glavin: Canadians have no reason to be smug about race (Ottawa Citizen) | This Teacher Taught His Class A Powerful Lesson About Privilege | Equality and Justice | Social Justice 101: Intersectionality (We Got So Far To Go) | Intersectionality (Geek Feminism Wiki) | Intersectionality 101 (Shit Reddit Says) | AAS Issues Statement on "Shirtgate"/"Shirtstorm" (American Astronomical Society) | A pornographer (and atheist) explains why the science guy’s shirt crash-landed | Casual sexism: When a shirt is more than a shirt. | Dismayingly Dawkins | It's Time to Push Back Against Feminist Bullies | Karl Stefanovic wears the same suit for a year | Aamer Rahman (Fear of a Brown Planet) - Reverse Racism (YouTube) | Befana (Wikipedia) | 7 Winter Solstice Celebrations (Encyclopedia Britannica) | 13 Unusual Holiday Traditions From Around the World (Reader's Digest) | Yule Lads (Wikipedia) | Kwanzaa (Wikipedia) | Lohri (Wikipedia) | Sadeh: A Middle Eastern Coffeehouse Experience

Contact Us: Facebook | Twitter | Email

Listen: Direct Link | iTunes | Stitcher | RSS Feed

10 November 2014

LUEE Episode 90: "Resonance: Beings of Frequency"

In this episode of Life, the Universe & Everything Else, Gem, Ashlyn, Ian, and Laura discuss some terrible films (and one that's pretty good), including "Resonance: Beings of Frequency", a YouTube film that rivals "Thrive" in the contest for most misleading documentary.

Life, the Universe & Everything Else is a program promoting secular humanism and scientific skepticism that is produced by the Winnipeg Skeptics and the Humanists, Atheists & Agnostics of Manitoba.

Links: Resonance: Beings of Frequency | Schumann resonances (Wikipedia) | Alpha wave (Wikipedia) | Electroencephalography (Wikipedia) | Electromagnetic fields and public health (WHO) | WiFi and Cell Phones: Should You Really Be Worried? (The Winnipeg Skeptics) | Investigation of Anti-WiFi Activism in Canada (Bad Science Watch) | Bees, CCD, and Cell phones: Still no Link. (Bug Girl's Blog) | Guest Post: Honey bees, CCD, and the Elephant in the Room (Bug Girl's Blog) | The Coming Beepocalypse (Bug Girl's Blog) | SkeptiCamp Winnipeg: Self-Proclaimed Diet Gurus and the Shams They Peddle (The Winnipeg Skeptics) | An Honest Liar (2014) (IMDb) | Hungry for Change (2012) (IMDb) | Left Behind (2014) (IMDb)

Contact Us: Facebook | Twitter | Email

Listen: Direct Link | iTunes | Stitcher | RSS Feed

13 October 2014

LUEE Episode 89: Logical Fallacies, Live from SkeptiCamp!

In this episode of Life, the Universe & Everything Else, we're recording live from SkeptiCamp Winnipeg! Gem, Ashlyn, and Lauren talk about logical fallacies and deductive reasoning, and Gem hosts a game of Name That Logical Fallacy!

Life, the Universe & Everything Else is a program promoting secular humanism and scientific skepticism that is produced by the Winnipeg Skeptics and the Humanists, Atheists & Agnostics of Manitoba.

Links: SkeptiCamp Winnipeg 2014 | The Winnipeg Skeptics | Validity (Wikipedia) | Soundness (Wikipedia) | Formal fallacy (Wikipedia) | List of fallacies (Wikipedia) | Begging the question (Wikipedia) | Begging the Question (RationalWiki) | Straw man (RationalWiki) | No True Scotsman (RationalWiki) | Argumentum ad Hominem (RationalWiki) | Poisoning the well (RationalWiki) | Appeal to antiquity (RationalWiki) | Fallacy fallacy (RationalWiki)

Contact Us: Facebook | Twitter | Email

Listen: Direct Link | iTunes | Stitcher | RSS Feed

02 October 2014

Why Don't You Atheists Criticize Islam?

This is a question that I hear a lot, actually. And not just from Christians who want to redirect criticism—also from former Muslims who are frustrated by what appears to them to be a softness in the way some white, middle-class atheists (like me) treat Islam. For example, a friend of mine recently wrote on Facebook:

If you apply the principles of critical thinking to Christianity but not to Islam because Muslims are generally not white, you are probably a racist. ‪#‎Atheists‬

This is a complex topic, so I reached out to my friend for clarification. I asked if he had a particular example in mind when chastising his fellow atheists for failing to apply critical thinking when it comes to Islam, because I was having difficulty coming up with such an example. It strikes me that the reason for this might have to do with a fundamental disagreement about our priorities and about our approach. (And, as an aside, I'm not convinced that a failure to identify or levy just criticism as described above would qualify as racism, even if it does occur as described.)

To be fair, I certainly know some atheists who focus their criticism on the religions with the most influence in their area, and others who are more concerned about further marginalizing groups of people in their community who already face a significant amount of discrimination—but neither of those seem to be due to a lack of critical thinking. I myself am perfectly willing to say that I think that the metaphysical beliefs of inherent in Islam are misguided, and that the teachings of Muhammed are often inaccurate and frequently seem to have social repercussions that are downright awful.

But when I make these criticisms (and sometimes I do) I also try to be careful in the way that I phrase them, because I don't want to simply add my voice to what seems to be (even from an outsider's perspective) a cacophony of hatred and xenophobia that many Muslims are already subjected to. To reframe the idea in a different context, tweeting legitimate criticism (which does exist!) of games journalism under the #GamerGate hashtag will probably drown out whatever nuanced point you're making in a torrent of hate. We risk not only making the lives of these people more difficult, but also—and this is important—we give those who would rather ignore our concerns a convenient excuse to dismiss the very real and important criticisms that we level at their religious ideologies.

For me, personally, I'd rather not make anyone's life more difficult (particularly when they belong to a group that already has to deal with a lot of persecution). But I'd also rather give my message the best possible chance of being heard. And for that, I must think carefully about how I present my criticisms.

It turned out that this particular post was sparked by my friend's frustration at the Yale Humanists' involvement in a recent attempt to cancel an address by Ayaan Hirsi Ali. According to Hemant over at Friendly Atheist, "they called for her speech to be limited to her own experiences (meaning she wouldn't be allowed to speak about her perception of Islam in general) and for another speaker with 'academic credentials' to also be invited." Neither request was accepted, and her speech went forward as planned.

Personally, I don't think that I would be particularly interested in hearing Ayaan Hirsi Ali speak. But that's has more to do with her professed admiration for Henry Kissinger and Benjamin Netanyahu, and the fact that she's a fellow at the American Enterprise Institute: it has nothing to do with her criticism of Islam. (And that's not at all to say that her stance on Islam is wrong simply as a result of those associations, or that we shouldn't expose ourselves to views that we disagree with—absolutely we should! But we all get to decide how we spend our time, and frankly I think I'd have a better time if I did something else.) I do not support the Yale Humanists in the stance that they decided to take.

Getting back to the subject of exercising care in the way we address Islam, this friend of mine concedes that while my view is a common one among the "liberal left", he does not agree with it. He recommended that I read this Huffington Post article by Ali A. Rizvi, a writer and physician whom I often find entertaining and informative: A Conversation Between Two Atheists from Muslim Backgrounds. Here, unfortunately, I'm hard pressed to find things that I agree with, outside of the broadest of strokes.

The article claims that liberals believe that "the United States is the worst country on Earth" and that "we are no better if not worse than the Middle East when it comes to women's rights and gay rights". Both of these statements strike me as totally absurd straw men (and they are not the only ones). I can only guess that these ideas are borne out from observing liberals (like me) criticize the treatment of marginalized groups in North America, when those same groups are treated so much worse elsewhere. I'm having trouble seeing a substantive difference between this sentiment and "Dear Muslima", which is completely awful for reasons that should be obvious.

PZ Myers points out a few of the problems with the false dilemma presented here:

That the US is not quite as bloody-minded domestically (we’re pretty bloody-minded when it comes to foreign policy, unfortunately) as, say, Afghanistan does not mean we need to shut up and not worry about cleaning our own house. It does not mean we must live in denial about the diminished career opportunities for women in America because women in Saudi Arabia are being stoned to death for adultery.

We must remain focused on injustice everywhere. We cannot excuse a lesser crime here because a greater crime occurs somewhere else.

Even if you’re focused entirely on the greatest offenses against humanity, there are good practical reasons to address them everywhere. For example: Ireland is a western democracy; I’d rather live there than in the Sudan, or Uganda, or Iran. It’s a very nice place, for the most part, with some ugly history and unfortunate relics of theocracy lurking about, like their blasphemy law and their acknowledgment of a deity in their constitution. Minor problems compared to countries that are actively and oppressively theocratic, right? But some Islamic nations love to point to the blasphemy laws in Ireland as legitimizing their own tyrannical laws.

Further, the Irish people can work to change their laws to a more enlightened state; Irish or Americans or French people can’t do much to change Iranian law, other than by setting a good example, or more unfortunately, throwing threats and bombs at them until they change (and the record shows that those tactics aren’t particularly effective).


How would Muslims feel if we declared that they have to shut up and stop with the pity party until North Korea is cleaned up? Because of course there is only room for one Hell on earth, and all the rest of the planet is a paradise.

I worry that this talk of the problems with some hegemonic "liberal left" serves to distract us from the conversations that we need to have. There are very real problems, social and political, both locally and abroad, that are exacerbated by religion (among other ideologies): I see Islam as a major player, here. So we need to honestly ask ourselves and each other, as fellow human beings, how these problems can be best addressed. We need to be free to criticize the ideas of others honestly, and we need to keep our goals in mind.

I'm not just trying to middle-road this: my views on this subject are complex, and resist the simple caricature presented in Rizvi's article. Some of them were expressed in the episode of Life, the Universe & Everything Else that that I hosted last year where we talked about Québec's proposed (now failed) "Charter of Values". If you're interested in what I think, it might be enlightening.

Addendum: As pointed out on Twitter by @Cynicalreality, a more concise and equally accurate response to the titular question here is simply, "we do". Unfortunately, I've never been much good at "concise", and there were a few related issues that I wanted to talk about anyway.

Second Addendum: If you want a nuanced critique of some of the problems these discussions face, I recommend reading this guest-post on Pharyngula by Sadaf Ali of Ex-Muslims of North America: Ben Affleck, You Are Not Helping.

22 September 2014

Configuring Flask, uWSGI, and Nginx

In a departure from what I often write about, I'm going to talk a little bit about something that is tangentially related to what I actually do for a living: running a web server. So I'm going to give a brief tutorial on setting up uWSGI (in Emperor mode) and Nginx so that you can run one or more Python Flask instances on a server.

Why? Well, I'm far from a pro at anything related to networking or web development, but I have been writing a few web tools lately just for fun. Initially, I had several different Flask/Werkzeug instances running in what was essentially a dev mode on different ports on my server, and I had each of these ports forwarded. But...

...this was ungainly, running multiple Werkzeug instances was inefficient, I didn't want to have to forward all of those ports, and damn it, I wanted to do things right. But, as this isn't my area of expertise, it took me a while to put all of these pieces together, because many of the examples that I was able to find were light on the details. I'm putting this here in the hope that someone else in my situation might find it useful.


So here are the relevant details. I'm running Ubuntu 12.04 (I know, I know, I should update) and I'm using Python 2.7.2, Flask 0.10, uWSGI 2.0.6, and Nginx 1.1.19. If you are missing any of these, you'll want to install them with your package manager of choice. For example:

$ sudo apt-get install python
$ sudo apt-get install uwsgi
$ sudo apt-get install nginx
$ pip install flask

The goal here is to run multiple Flask servers on one machine without having to worry about port numbers and the like. We'll start with just one, and I'm sure that you can figure the rest out from there.


First you need a Flask application to run. How about this one? I wrote it a few months ago because I wanted to translate GET requests to POST requests.

Navigate to the directory you'd like to install it to (probably /opt/ or /var/www/), then clone it. You'll want to verify that it runs locally on its own first.

$ cd /opt
$ git clone https://github.com/spurll/post.git
$ post/run.py

In a web browser on the same server, navigate to http://localhost:9999 and verify that the application is accessible. If you're running headless (as I am) you can always spawn the process to the background with post/run.py & and then curl localhost:9999 and verify that you don't get an error back. You can now kill the Python process.

Flask is now set up!


First, test that uWSGI will run your application correctly on its own:

$ cd /opt/post
$ uwsgi --socket --protocol=http -w run:app

In this case, run is the name of the Python source file that contains our application (/opt/post/run.py) and app is the name of the Werkzeug/Flask application object contained in that file. Verify that the application is accessible again from http://localhost:9999 as above.

If everything is working correctly, kill the uWSGI instance. It's now time to configure uWSGI's Emperor mode. This allows us to essentially have one master process that oversees all of our web applications, starting (and restarting) them when needed and logging as appropriate. You will probably have to install a few plugins, too, using your package manager of choice. For example:

$ sudo apt-get install uwsgi-plugin-python
$ sudo apt-get install uwsgi-plugin-http

By default, your uWSGI master configuration file will probably be located at /etc/init/uwsgi.conf. Edit it with your editor of choice (I'm a Vim guy, myself):

$ sudo vim /etc/init/uwsgi.conf

It should look something like this:

description "uWSGI"
start on runlevel [2345]
stop on runlevel [06]

env UWSGI=/usr/bin/uwsgi
env LOGTO=/var/log/uwsgi/emperor.log

exec $UWSGI --master --emperor /etc/uwsgi/apps-enabled --die-on-term --uid www-data --gid www-data --logto $LOGTO

You can change the location of the Emperor's log file by changing the LOGTO environment variable. You can also modify which user (--uid) and group (--gid) the Emperor will run as.

Now it's time to configure the applications. Your application-specific configuration files (in this case, for the POST program that we installed to /opt/post/) will probably be found at /etc/uwsgi/apps-available/. Create a new file there and call it post.ini. It should like something like this:


# Variables
base = /opt/post
app = run
callable = app

# Generic Configuration
plugins = http,python
pythonpath = %(base)
socket = /opt/run/%n.sock
module = %(app)
logto = /var/log/uwsgi/%n.log

Here, base is the base directory of our application (the directory that contains the module we want to run), app contains the name of the module to run (in this case run, for run.py), callable is the name of the Werkzeug/Flask callable application object (if you don't supply this, uWSGI will assume that it's called application), and socket defines the location of the socket you'd like Nginx to use when communicating with your uWSGI server. The %n references the name of our file (sans extension) to maintain consistency.

You'll need to ensure that the location of your sockets (in this case, /opt/run/) exists and that the appropriate user (in this case, www-data) has write permissions.

This configuration assumes that you want to run your program using the modules installed on your system's Python. To run the application in a virtual environment, add a line defining home:

home = %(base)/virtualenv

Where virtualenv is the directory containing the Python virtual environment you'd like to use. (In our case, that would be at /opt/post/virtualenv/, if we were using a virtual environment.)

Once you're ready, create a symbolic link to place the post.ini file you've created in the apps-enabled directory:

$ sudo ln -s /etc/uwsgi/apps-available/post.ini /etc/uwsgi/apps-enabled/post.ini

You can start the uWSGI process (if you haven't already) like this:

$ sudo service uwsgi start

As soon as your Emperor process sees an application configuration file in apps-enabled it will start up a uWSGI instance to serve requests for that application. If you'd like to set up additional Flask applications at this time, simply install them and create uWSGI configuration files for each (and don't forget to link them to apps-enabled!). If you're having trouble, take a look at the logs.

The uWSGI Emperor is now set up!


We're almost there!

The default configuration file for Nginx should be located at /etc/nginx/sites-available/default. Feel free to edit this one, or create your own. By default, Nginx will point requests on port 80 (the default HTTP port) to /usr/share/nginx/www. If you'd like to point them somewhere else (such as /var/www/) you can change that here. Here's a brief Nginx configuration file that you can use to run connect your uWSGI server to the outside world:

# server unix:///path/to/your/site.sock; # For a file socket.
# server;                 # For a port.

upstream post {
    server unix:///opt/run/post.sock;

server {
    listen 80;
    server_name your.server.url;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    root /var/www;
    index index.html index.htm;

    # GET to POST
    location /post {
        include uwsgi_params;
        uwsgi_param SCRIPT_NAME /post;
        uwsgi_modifier1 30;
        uwsgi_pass post;

Replace your.server.url with the URL for your server (you can use localhost for testing purposes). This configuration assumes that you'd like your application to be accessible at http://your.server.url/post. If you'd like it to take the place of the main page at http://your.server.url/, things are even simpler:

    # GET to POST
    location / {
        include uwsgi_params;
        uwsgi_pass post;

Once you're done, create a soft link to /etc/nginx/sites-enabled/ for each of the entries in /etc/nginx/sites-available/. Now you can start your Nginx service.

$ sudo service nginx start

Every time you modify the Nginx configuration file, you'll have to restart the it.

Port Forwarding

If you're running this server from your home or office and you need external access, don't forgot to forward port 80 so that Nginx is accessible. Instructions for your router are probably available here.


I used several sites while putting this all together. If you're stuck, they may contain additional information that I neglected to include here. Here are the most helpful of the bunch:

Deploying Flask on uWSGI
Multiple Django and Flask Sites with Nginx and uWSGI Emperor
How to Setup Nginx

I also had some help from my friends and colleagues BCJ and Curtis when I was initially setting up Nginx. Thanks, gents!