I’m now a fan of Heroku. How cool is it to be able to deploy a Python app to free hosting?!
But in spite of great docs at Getting Started with Python on Heroku there were a few issues I had to handle. The main problems were because the instructions assumed you wanted to start with their demo app and not your own – which meant that they only explained things like requirements.txt and Procfile after you needed to have already made them (they were already present in the demo version).
Note – I am already familiar with git so I don’t explain that here – see Starting a simple Flask app with Heroku for more fleshed-out instructions.
Anyway, here is what I needed to do at the start:
1) Change the
app.run(host='0.0.0.0') line to
port = int(os.environ.get("PORT", 33507))
Otherwise the app would fail because of a problem with the port when I ran
heroku ps:scale web=1
Starting process with command `python main.py`
Web process failed to bind to $PORT within 60 seconds of launch
2) I really needed to use virtualenvwrapper and create a requirements.txt file e.g.
pip freeze > requirements.txt
Otherwise heroku wouldn’t know what dependencies my app needed fulfilled to work successfully.
3) I needed to make a Procfile:
web: python main.py
Note, this was a toy flask app so not using gunicorn etc. Probably should look into that later:
4) Setting debug mode off probably isn’t essential for deployment but probably a good idea anyway:
app.debug = False before deploying.
Yes – I know, there are better alternatives to IDLE out there, but I am used to it for quick and dirty changes to python files (I use eclipse + pydev for more serious work). And I am increasingly making the switch to Python 3. So when I double click on a py file, odds are I want to open it with IDLE for Python 3 not Python 2.
Start by making sure you have a desktop file like the following:
gksudo gedit /usr/share/applications/idle-python3.4.desktop
Name=IDLE (using Python-3.4)
Comment=Integrated Development Environment for Python (using Python-3.4)
Then make the desktop entry the default for python files:
Note – no trailing semi-colon.
And in Linux Mint:
identify appropriate .desktop file
add the appropriate .desktop file reference at the front of the python line as appropriate.
First a disclosure – I will be getting two free e-books for promoting the Packt Sale ;-). But I wouldn’t bother writing this up unless I thought Packt books would be of some value to me – so that makes it a genuine endorsement. For reference, here are the three I’m weighing up:
- Learning IPython for Interactive Computing and Data Visualization
- Git: Version Control for Everyone
- Responsive Web Design with jQuery
Apparently the deal is:
- Unlimited purchases during the offer period
- Offer is automatically applied at checkout
I procrastinated a bit so there are only a couple of days left (ends 26th March). So be fast! Here’s the promotion link
Existing documentation for installing iNZight on Ubuntu covers a wide range of possible scenarios in Step 1. For my own specific case, however, I needed to translate it into a series of precise step-by-step instructions.
So here are the instructions that worked for me for Step 1. Once that is done, just follow steps 2 onwards in the official docs.
STEP 1 STEP-BY-STEP
It is probably best you don’t already have R already installed. And if you’re using iNZight, you probably won’t. But if you do, purge it! Installation may or may not work depending on the version of R you install so remove one source of difference from what the support people will have tested.
ctrl-alt-t to open terminal window
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9
sudo gedit /etc/apt/sources.list
and then append
deb-src http://cran.stat.auckland.ac.nz/bin/linux/ubuntu saucy/
Note: must have trailing slash (/) at end
- Click on “Save” button on toolbar or enter ctrl s on keyboard to save
sudo apt-get update
sudo apt-get install r-base
- Open R by typing R into terminal
- From R prompt:
update.packages(ask = FALSE)
y to everything
to quit the R prompt.
- Then follow steps 2 onwards in the official instructions …
Get the appropriate version of the VirtualBox extension pack installed – I found the correct version in here: Download VirtualBox (Old Builds): VirtualBox 4.2
Add self to vboxusers group as per Set up USB for Virtualbox. Must reboot for change to take effect.
sudo usermod -aG vboxusers
Then follow the additional steps. For Windows XP at least, must add a filter before opening so that the USB is recognised by the File Manager and displayed as an extra drive.
My Mother found Windows 8 very bewildering (actually, so did I) and asked me to install Ubuntu (13.10) instead on her Samsung 700 tablet/notebook. I thought I’d set it up dual boot so I could occasionally use Windows 8 for testing purposes and in case there was any sofware that we needed in the future that was Windows only.
- Power off
- Put bootable Ubuntu USB in
- Boot but hold down F2
- In the BIOS config (it was touchscreen which was quite nice):
- Secure Boot: Off
- OS Mode Selection: CSM and UEFI OS
- PXE boot: On
- Reboot but hold down F2
- Boot to Device now showed: UEFI: DSE MicroDrive 2GB 1.00 (or however your USB identifies itself)
- Boot into Ubuntu installer
- Shrink Windows partition (the NTFS one)
- Add a large Ext4 partition for Ubuntu and a smaller swap partition
- Install Ubuntu onto the new Ext4 partition with / as mount point
- Reboot and set everything up. Success :-).
Preferences>PyDev>Editor>Code Style>Code Formatter – Tick “Right trim lines?”
Preferences>PyDev>Editor>Typing – untick After ‘(‘ indent to its level (indents by
tabs if unchecked)
Number of indentation levels to add: 1
Switch pylint off so pydev code analysis can do its job:
Preferences>PyDev>Editor>PyLint Untick “Use pylint?”.
Preferences>General>Editors>Text Editors>Annotations>Occurences (PyDev) set to #6BF459 so bright enough to see when very small but can read text on top.
Displayed tab width: 4
Tick “Insert spaces for tabs”
Tick “Show print margin” and set to 80.
Tick “Show line numbers”.
The problem – I had taken a video on a smart phone upside down and needed to rotate it (Note – rotating is not the same as flipping). Here is the successful command I used on Ubuntu:
avconv -i "my_input_video.mp4" -r 25 -vf transpose=1,transpose=1 my_output_video.mp4
Note – I needed to rotate it so chaining two 90 degree transpose commands (transpose=1 is a single 90 degree transposition) worked (see How can I rotate video by 180 degrees with avconv).
Note the -r 25. I don’t pretend to understand all the options of ffmpeg/avconv but the -r 25 forced the conversion to use a manageable number of frames. Without it, converting one particular video was failing, thrashing the CPU, and taking forever. There was a message in the ffmpeg/avconv output about MB rate > level limit. Another video worked fine without -r 25 but if you have the same problem with MB rate give -r 25 a try. Or better yet, learn more about what you’re doing ;-). I didn’t have the time or inclination so tried to do the least I could to get a good result.
The problem – my wife had an mpg4 but it wouldn’t play on the machine upstair. Needed an AVI instead. I couldn’t be bothered learning all the various settings of ffmpeg (libav is a fork) but found an acceptable (albeit inefficient) way of getting the same quality in the AVI as in the MPG4. OK, the file size was 3-4x larger, so I would recommend optimising things if doing multiple conversions, but this is a good and simple answer for the occasional one-off.
ffmpeg -i original.mp4 -sameq converted_version.avi