There are many things I like to do when starting a django project. I started to compile those in a script I’m using. The gist is linked below.
#!/bin/bash # # Author: Abdallah Deeb
# Requirements: python, pip, virtualenv, virutalenvwrapper, git # # Edit the following 2 lines PROJECTNAME=proj APPNAME=myapp if [ -n "$2" ] then APPNAME="$2" fi if [ -n "$1" ] then PROJECTNAME=$1 fi source `which virtualenvwrapper.sh` echo "Starting a new Django project: $PROJECTNAME" # Make a virtualenv mkvirtualenv $PROJECTNAME # Install latest django and start the project/app pip install django django-admin.py startproject $PROJECTNAME cd $PROJECTNAME django-admin.py startapp $APPNAME mv $PROJECTNAME conf # conf is much nicer than projname replace $PROJECTNAME conf -- manage.py conf/settings.py conf/wsgi.py conf/urls.py chmod +x manage.py workon $PROJECTNAME # Initialize and use git git init git add . git commit -a -m 'initial commit'
and the raw gist download
Codio is awesome. Coolio would have been a better name, but I guess that’s taken!
It’s free, but don’t let that fool you. What you get is a beautifully simple yet powerful IDE in your browser. It works great even on my tablet, so I can edit/update/deploy even on the road (or on the couch half asleep, and here’s where git comes in handy!). It supports github out of the box. And has a cool terminal with SSH and everything. Yay!
Now if that was not awesome enough, these guys went out of their way and added an even cooler feature:
Every project gets its own Box: an instantly available server-side development environment with full terminal access.
So you get to do it all without leaving their site. I wanted to try playing with a pet project I’m working on using django. It was pretty easy to get it all setup (especially that the code was on github, but you could as simply upload the code).
Here’s a step by step tutorial to get django up and running on codio.
Open a terminal:
Tools > Terminal
I’m using MySQL, so:
parts install mysql parts mysql start mysqladmin -u root password StrongPassword mysql -u root -pStrongPassword mysq> create database dbname; mysql> grant all privileges on dbname.* to 'dbuser'@'localhost' identified by 'dbpasswd'; mysql> flush privileges; mysql> \q
Also make sure to install python using the ‘parts’ command:
parts install python2
(see the related issue on github.com: https://github.com/codio/boxparts/issues/80)
Create the requirements.txt file if you don’t have that already. Hint: run ‘pip freeze > requirements.txt’ to save those. So in requirements.txt:
Django MySQL-python #distribute #wsgiref
Run the following in the codio.com terminal:
parts install pip
pip install -r requirements.txt
Upload the django project, or import it from GitHub then:
python manage.py syncdb
python manage.py runserver 0.0.0.0:8009
I still need to get it running through apache.
I’ll get on that later tonight.
parts install apache2_mod_wsgi # also installs apache2 and apr_util ============ apache2 ============ To start the Apache server: $ parts start apache2 To stop the Apache server: $ parts stop apache2 Apache config is located at: $ /home/codio/.parts/etc/apache2/httpd.conf Default document root is located at: $ /home/codio/workspace ============ apache2_mod_wsgi ============ If Apache2 httpd is already running, you will need to restart it: $ parts restart apache2 Default configuration for wsgi is: WSGIScriptAlias / /home/codio/workspace You can change default in /home/codio/.parts/etc/apache2/config/wsgi.conf file
So I changed the file in /home/codio/.parts/etc/apache2/config/wsgi.conf to:
LoadModule wsgi_module /home/codio/.parts/packages/apache2_mod_wsgi/3.4/mod_wsgi.so WSGIScriptAlias / /home/codio/workspace/conf/wsgi.py # <-- this is where I put my wsgi.py file WSGIPythonPath /home/codio/workspace
Order deny,allow Require all granted
Then start apache, and visit your site at http://UNIQUE-NAME.codio.io:3000/:
parts start apache2
You will probably see a ‘500 Internal Server Error’ message. So tail the apache ErrorLog file in the terminal to see what went wrong:
tail -f /home/codio/.parts/var/apache2/log/error_log
Here’s what I see (and I haven’t figured the fix yet):
 mod_wsgi (pid=912): Target WSGI script '/home/codio/workspace/conf/wsgi.py' cannot be loaded as Python module.  mod_wsgi (pid=912): Exception occurred processing WSGI script '/home/codio/workspace/conf/wsgi.py'.  Traceback (most recent call last):  File "/home/codio/workspace/conf/wsgi.py", line 5, in
 from django.core.wsgi import get_wsgi_application  File "/home/codio/.parts/packages/python2/2.7.6/lib/python2.7/site-packages/django/core/wsgi.py", line 1, in  from django.core.handlers.wsgi import WSGIHandler  File "/home/codio/.parts/packages/python2/2.7.6/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 6, in  from io import BytesIO  File "/home/codio/.parts/packages/python2/2.7.6/lib/python2.7/io.py", line 51, in  import _io  ImportError: /home/codio/.parts/packages/python2/2.7.6/lib/python2.7/lib-dynload/_io.so: undefined symbol: PyUnicodeUCS2_Replace
to be continued…
… issue fixed by installing python using the ‘parts’ command above
Most email clients can request a return receipt. One way to set this up in Thunderbird for example is to go to “Preferences > Advanced > General > Return Receipts …” and check the “When sending messages, always request a return receipt”
The problem with this approach is that when the person you’re emailing has set his email client to reject that request (or does that manually every time), you will not get a receipt back. And honestly speaking there is no way to force that. Now there are some services out there that promise to track your mail when that’s read, and those rely on embedding a transparent gif that will call home when the message is opened. I tried a few of these services: the free ones did not deliver (or seemed too shady for my taste) and the paid ones did not look too good either. So I cooked up a quick solution that I can use when needed (like when I’m tracking my brother on his honeymoon trip *evil grin*)
The code is below, pretty self explanatory. You will need a transparent gif/png. That’s easy too 😉
I wrote previously about building dns zone files mostly by querying DNS and saving the results to a file.
The method is not perfect, and it will not be possible to get all the records. In fact, you could get all the records incorporated in the result file if you already have a list and feed it to your code.
I also added a guessing feature.
I like VeriteCo’s TimelineJS. It’s elegant, easy to use and very useful. I don’t like editing Google a google spreadsheet every time I want to update the timeline although it might be easier for some people. So, I wrote a small pluggable app for django to embed a timeline in django templates.
The code is loosely based on the code for the WordPress plugin. And I’ll try to copy over more code and fixes from that soon.
For now, it’s a working app with an admin backend to enter the timeline information and events, and to edit the options. It’s also a custom template tag that you can use to embed the timeline in your own templates.
Should be easy enough to use it.
pip install django-timelinejs
then include it in your INSTALLED_APPS and ./manage.py syncdb
Drop me a note if you find a bug or want some help. You can use the issues in GitHub for that.
The only way to get a full listing of a DNS zone is to use AXFR to request a zone transfer. But that’s usually locked and not available. So building the zone file for a domain is basically guesswork or manual labour at best.
Note: I use DNSPython
Here’s a quick script to test SMTP connections
I saw a couple of National Geographic wallpapers and those are pretty nice. I did not find an API on their site to download those on a regular basis, but it seemd pretty simple to just download them.
I just uploaded my code as a gist per https://gist.github.com/3002699 (the gist code should be more up to date than the following code)
And I added the script in my crontab:
Let me know if you have any notes/comments/changes
Here’s the code