Using virtualenv to manage multiple Python/Django environments in the same machine

Developing Python applications sometimes it’s useful to be able to test the code with different environments, for example a particular version of Python or a specific Django version etc… Setting up many different virtual machines would be really too much work and even using a chroot environment is not what you need in some cases. Thanks to virtualenv is it possible to create a self contained Python environment with all the specific libraries you may need. Using virtualenv is very easy:

  • Creating the virtual environment: virtualenv myenv –no-site-packages
  • Entering the virtual environment: source myenv/bin/activate
  • Deactivating the virtual environment: deactivate

That’s it! Once you’re inside the virtual environment you will be using the Python libraries inside it. I suggest you to install all the Python libraries you need using pip.

UDS happening online only: pros and cons

When last week Canonical announced the usual UDS was not going to happen I was a bit shocked and disappointed: starting from the next UDS (that is going to happen tomorrow!) the event will be online only and every 3 months. During these days I’ve been thinking a lot about this move and I will tell you what are the pros and cons, in my opinion, followed by some final thoughts.

Pros

Having 4 UDS every year, instead of 2, is surely a better thing. I’m a big fan of Scrum methodology, so I think that iterating more often is better than iterating less. If there are any mistakes you can correct them and iterating again before releasing the final product.

Potentially more people can partecipate to the event (even the opposite is true and I will explain why). People won’t need to move from home, travel, pay any expense etc… they just need a computer and a good Internet connection.

It’s cheaper for everyone: I can just imagine how expensive could be for Canonical to organize a similar event. Booking a big hotel, paying travel and expenses to near one houndred of community people. People who didn’t get any sponsorization had to pay all the travel expenses to attend the event.

Cons

Potentially less people can partecipate to the event. Yes, like I said before even this sentence is true and I will explain why. First of all, using Google+ there are at least three countries that will be cut out: China, Thailand and Vietnam. Google+ is not available in those countries.

Are you sure that special people will be able to follow the event? For example blind people won’t be able to chat or to ask question in the chat.

Only 10 people will be able to talk. In normal UDS sessions more people could raise the hand and ask a question or interact with the track leaders. Who will choose the 10 people with audio+video streaming rights?

We will completly miss the social aspect of the UDS. If you think this was only a secondary part, please go on. I felt more committed to work and collaborate with people I met in person than with someone I’ve never met before.

Announcing an event, even if online, just one week before it happens. Really? Some people had already taken vacation from work, booked flights etc… not counting many people that can’t take 2 days off from work just with 1 week notice period. It’s also almost impossible that community members have the time to schedule a blueprint and be able to discuss about a subject.

Final thoughts

From a cutting costs point of view I really can’t say anything. Organizing UDS was surely very expensive for Canonical and nobody can blame them if they decided to spend those money in a different way.

What really concerns me: is UDS still useful? My opinion is that at least since latest 2 or 3 UDS the presence of the Community was not so relevant, because I had the clear sensation that the most important decisions were made by Canonical before the UDS and then there was just some details tuning. Another proof of my thoughts is the today announcement: despite the fact that I 100% agree with Unity switching to Qt/QML (I already proposed this 2 years ago during Budapest UDS, but nobody listened to me) I completly disagree with the way the decision was made: not a single involvement or discussion with the community.

I would apreaciate more openness and honesty from Canonical. Do you want to take all the decisions? That’s fine, but at least state it clearly.

Using Twitter Bootstrap with Node.js, Express and Jade

I’ve decided to write this post as a note to myself. I’m still learning Node.js and digging into Express/Jade, but I’ve read many people using the nice Twitter Bootstrap and I was wondering if there was a way to integrate all these technologies. The short answer is: yes, we can!

Note: once again, I’m not a Node.js expert and surely there are other ways to achieve this task (for example there is a Node.js module called twitter-bootstrap, but I haven’t tried it). This tutorial is based on another tutorial I found, but it was not very updated and it had a more complicated way to install Bootstrap, so I decided to write a new one basing it on the original http://www.rs.au.com/31/how-to-install-bootstrap-v2-0-2-in-expressjs-v3-0-0

Preparing the environment

I will assume that you’re running any Linux distribution (in my case I’m using Ubuntu 12.10, but feel free to use your own distribution). Be sure to have installed a recent version of nodejs and npm packages (I’m using Node.js 0.8.20 and npm 1.2.11).

Create a project folder and install the required dependencies

mkdir node-bootstrap
cd node-bootstrap
npm install express
npm install jade

Create the basic project structure with Express

andrea@andrea-Inspiron-660:~/Documents/sviluppo/nodejs/node-bootstrap$ node_modules/express/bin/express nodebootstrap

create : nodebootstrap
create : nodebootstrap/package.json
create : nodebootstrap/app.js
create : nodebootstrap/public
create : nodebootstrap/public/javascripts
create : nodebootstrap/public/images
create : nodebootstrap/public/stylesheets
create : nodebootstrap/public/stylesheets/style.css
create : nodebootstrap/routes
create : nodebootstrap/routes/index.js
create : nodebootstrap/routes/user.js
create : nodebootstrap/views
create : nodebootstrap/views/layout.jade
create : nodebootstrap/views/index.jade

install dependencies:
$ cd nodebootstrap && npm install

run the app:
$ node app

You should already have installed all the needed dependencies, even without executing npm install, anyway executing it won’t hurt.

Download and install Bootstrap

Download Twitter Boostrap from the official website http://twitter.github.com/bootstrap/assets/bootstrap.zip and unzip it under the nodebootstrap/public folder.

Bootstrap integration with Jade template system

At this point you need to edit the views/layout.jade file and include the references to Bootsrap

!!!
html
  head
    title= title
    link(rel='stylesheet', href='/bootstrap/css/bootstrap.min.css')
    link(rel='stylesheet', href='/bootstrap/css/bootstrap-responsive.min.css')
    link(rel='stylesheet', href='/stylesheets/style.css')
    script(src='http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js')
    script(src='/bootstrap/js/bootstrap.min.js')
  body
    block content

Test the Bootstrap integration

At this point we will modify views/index.jade that is the default template used to render the index

extends layout

block content
  div.top
    form.form-horizontal(method="post", id="loginForm")
      label Username
      input.span3(id="username", type="text", name="User", placeholder="Enter your username")
      label Password
      input.span3(id="password", type="password", name="Password")
      input.btn(type="submit", value="Log In")
  div.container
    div.content
      table.table.table-striped
        thead
          tr
            th Table
            th Heading
        tbody
          tr
            td Blah
            td Test
          tr
            td Hello
            td World

  div.footer

Now go back to the terminal and execute the app:

andrea@andrea-Inspiron-660:~/Documents/sviluppo/nodejs/node-bootstrap/nodebootstrap$ node app.js
Express server listening on port 3000

Open your favourite browse and visit http://localhost:3000 to see your first Bootstrap + Node.js application app and running.

Fundraising for CuteSoma (Soma.fm mobile client) development

Developing CuteSoma and maintaining it for three different platforms (Nokia N9, Windows Phone, BlackBerry 10) is really taking me a lot of time. I’ve many features in mind to add but I can’t dedicate much spare time to them and to do it I should take time from other paid projects. I’ve also discarded the idea to make CuteSoma a paid app, because it’s been always free (except the Windows Phone one that was non-free for just a month, but only 6 people “SIX” bought the app).

So I decided to open a fundraising campaign on Indiegogo that is a service like KickStarter, but it’s available all around the world (not just in USA and UK like Kickstarter).

What do I Need & What You Get

I would like to raise at least 5.000€ to be able to keep maintaining the existing features and to implement new one. Developing for 3 different platforms really takes a lot of time. I also need to find a way to get a Windows Phone 8 device because at the moment I cannot test some features using just the emulator.

What the application currently does:

  • You can view the list of Soma.fm channels
  • You can listen any channel

Features I would like to add:

  • Scrobbling song to Last.fm
  • Write a new MediaSource for Windows Phone (the default one is quite bugged and I need to implement one from scratch)
  • Port the BlackBerry10 version to the native CascadesUI

The Impact

Funding the development of CuteSoma you will make thousands of people really happy, because they will be able to listen to Soma.fm on their Nokia N9, Windows Phone and BlackBerry 10 devices. You will also make me feel apreciated for all the hours I’m spending to write the code :)

Completly Opensource

Yes. CuteSoma is completly opensource. I keep my source code on GitHub and BitBucket and it’s always updated. All the CuteSoma versions are released under the GPL license.

Other Ways You Can Help

If you want to contribute but you can’t or you don’t want to send money, you could help me in the following ways:

1) Download and use the application:

2) Tweet/Blog about this fund raising campaign: http://www.indiegogo.com/projects/cutesoma-soma-fm-client/x/2353169

How to install latest stable Node.js on Ubuntu

If you develop with Node.js and you want to be sure to have the latest stable version, luckly there is a PPA for it. All you need is to follow these instructions:

sudo apt-get install python-software-properties python g++ make
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs npm

That’s it!

Reference: https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager