List packages:
dpkg --get-selections > outfile.txt
Reinstall:
dpkg --get-selections < outfile.txt
http://ubuntuforums.org/showthread.php?t=261366
Monday, November 12, 2012
Monday, April 30, 2012
Django/Web Modules
Modernizer - Feature Detection for JS
http://modernizr.com/
Django-flash - Rails-like django flash messages:
https://github.com/danielfm/django-flash
Facebook-Graph - Django facebook graph API
https://github.com/feinheit/django-facebook-graph
django-cumulus - Rackspace manager
Django Storages
http://modernizr.com/
Django-flash - Rails-like django flash messages:
https://github.com/danielfm/django-flash
Facebook-Graph - Django facebook graph API
https://github.com/feinheit/django-facebook-graph
django-cumulus - Rackspace manager
Django-ittybitty - Django based URL Shortener:
django-ittybitty
http://django-storages.readthedocs.org/en/latest/
django-storages
django-storages
Python-Postmark - API for http://postmarkapp.com/
Django Cache Utils
stripe-python - API for Stripe.com (like Braintree)
FrogBugz - online ticket tracking system
http://www.fogcreek.com/fogbugz/pricing.html
Form Builder
http://www.wufoo.com
Factual - service for data information and places. GeoData
http://v2.factual.com/
CartoDB - open source data browser db
https://github.com/Vizzuality/cartodb
GeoCoda - Online Geocoding tool
https://geocoda.com/
Census Tiger Dataset
http://www.census.gov
SendGrid - Email Web applications
http://sendgrid.com/
RapidSSL - Cheap SSL Host
django-tables2 - manipulate html tables programmatically similar to Django forms.
http://django-tables2.readthedocs.org/en/latest/index.html
django-message-extends - extensions to Django messages such as sticky messages and assigned messages
https://github.com/AliLozano/django-messages-extends
Form Builder
http://www.wufoo.com
Factual - service for data information and places. GeoData
http://v2.factual.com/
CartoDB - open source data browser db
https://github.com/Vizzuality/cartodb
GeoCoda - Online Geocoding tool
https://geocoda.com/
Census Tiger Dataset
http://www.census.gov
SendGrid - Email Web applications
http://sendgrid.com/
RapidSSL - Cheap SSL Host
django-tables2 - manipulate html tables programmatically similar to Django forms.
http://django-tables2.readthedocs.org/en/latest/index.html
django-message-extends - extensions to Django messages such as sticky messages and assigned messages
https://github.com/AliLozano/django-messages-extends
Simple Logging
Simple Logging
In someplace like python shell, __init__.py, or settings.py (pre Django 1.3):
import logging
logger = logging.getLogger('mymodule.test')
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s - %(name)s - %(lineno)s - %(levelname)s - %(message)s")
# Configure log to file
filelog = logging.FileHandler("mylogfile.log", 'a')
filelog.setLevel(logging.INFO)
filelog.setFormatter(formatter)
logger.addHandler(filelog)
# Configure log to stdout
conlog = logging.StreamHandler()
conlog.setLevel(logging.DEBUG)
conlog.setFormatter(formatter)
logger.addHandler(conlog)
In place you want to log in, like views.py:
import logging
logger = logging.getLogger('mymodule.test')
logger.debug("My Log text")
logger.info("My info text")
Another example of simple logging:
import logging
logger = logging.getLogger('mymodulename')
logger.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
logger.addHandler(ch)
---------------------------------------------------
A simple example:
import logging
logging.basicConfig(filename='test.log', level=logging.DEBUG)
logging.info("INFO")
logging.debug("DEBUG")
logging.error("ERROR")
Sources:
http://dancingpenguinsoflight.com/2009/03/simple-and-effective-python-logging/
http://www.blog.pythonlibrary.org/2012/08/02/python-101-an-intro-to-logging/
In someplace like python shell, __init__.py, or settings.py (pre Django 1.3):
import logging
logger = logging.getLogger('mymodule.test')
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s - %(name)s - %(lineno)s - %(levelname)s - %(message)s")
# Configure log to file
filelog = logging.FileHandler("mylogfile.log", 'a')
filelog.setLevel(logging.INFO)
filelog.setFormatter(formatter)
logger.addHandler(filelog)
# Configure log to stdout
conlog = logging.StreamHandler()
conlog.setLevel(logging.DEBUG)
conlog.setFormatter(formatter)
logger.addHandler(conlog)
In place you want to log in, like views.py:
import logging
logger = logging.getLogger('mymodule.test')
logger.debug("My Log text")
logger.info("My info text")
Another example of simple logging:
import logging
logger = logging.getLogger('mymodulename')
logger.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
logger.addHandler(ch)
---------------------------------------------------
A simple example:
import logging
logging.basicConfig(filename='test.log', level=logging.DEBUG)
logging.info("INFO")
logging.debug("DEBUG")
logging.error("ERROR")
Sources:
http://dancingpenguinsoflight.com/2009/03/simple-and-effective-python-logging/
http://www.blog.pythonlibrary.org/2012/08/02/python-101-an-intro-to-logging/
Saturday, March 31, 2012
Dulwich Command Notes
# Load Git repo into object
from dulwich.repo import Repo
repo = Repo("/home/jjasinsk/Sites/env/proj/gitdjango/")
# Find sha hash of Git repo head
repo.head()
# 'e80b3ada92d2a02ce353c83683a6533e25240a1a'
# Find the Commit object of the repo head
repo[repo.head()]
# Commit e80b3ada92d2a02ce353c83683a6533e25240a1a
# Find all the repo tags
repo.refs.subkeys('refs/tags')
# set(['v0.0.1'])
# Find all the repo branches
repo.refs.subkeys('refs/heads')
# set(['master', 'develop'])
# Find all the repo refs and their sha hashes
repo.get_refs()
# {'HEAD': 'e80b3ada92d2a02ce353c83683a6533e25240a1a',
'refs/heads/develop': 'b53fe83f58f293decae39a70106a5ae78886ba5e',
'refs/tags/v0.0.1': '5554750c44f8dc17ab9dc5926129cf409d06d0bb',
'refs/heads/master': 'e80b3ada92d2a02ce353c83683a6533e25240a1a'}
# Find all the commits tracing back to head Commit
# Find all the commits tracing back to head Commit
repo.revision_history(repo.head())
# [Commit fcc1e1eb645f6731c4a8701b5facf852738850a9,
Commit 39eaa48156e3df2fd2cbe9922e33787cbafdad90,
Commit e80b3ada92d2a02ce353c83683a6533e25240a1a,
...
TAG OBJECTS
# Get the Tag object by looking up it's ref path
repo['refs/tags/v0.0.1']
repo['refs/tags/v0.0.1']
# Tag 5554750c44f8dc17ab9dc5926129cf409d06d0b;
# Find Tag by sha hash
repo.get_object('5554750c44f8dc17ab9dc5926129cf409d06d0bb')
# Tag 5554750c44f8dc17ab9dc5926129cf409d06d0bb
repo.tag("5554750c44f8dc17ab9dc5926129cf409d06d0bb")
# Tag 5554750c44f8dc17ab9dc5926129cf409d06d0bb
repo['5554750c44f8dc17ab9dc5926129cf409d06d0bb']
# Tag 5554750c44f8dc17ab9dc5926129cf409d06d0bb
# Find information about a tag
# Find information about a tag
t = repo['5554750c44f8dc17ab9dc5926129cf409d06d0bb']
# Find tagger
t.tagger
# 'Joe Jasinski joe.jasinski@example.com'
# Find tag date
# Find tag date
from datetime import datetime
datetime.utcfromtimestamp(t.tag_time)
datetime.datetime(2012, 3, 30, 6, 58, 53)
# Print tag contents
# Print tag contents
print t.as_pretty_string()
# ...
# Find Tag sha hash (id)
# Find Tag sha hash (id)
t.id
# '5554750c44f8dc17ab9dc5926129cf409d06d0bb'
# Find Tag message
OR
s = t.sha()
s = t.sha()
s.hexdigest()
# '5554750c44f8dc17ab9dc5926129cf409d06d0bb'
# Find Tag message
t.message
# 'test tag\n'
# Find Tag Type
# Find Tag Type
t.get_type()
# 4
COMMIT OBJECTS
# Find Commit object from ref spec
repo['refs/heads/master']
repo['refs/heads/master']
# Commit e80b3ada92d2a02ce353c83683a6533e25240a1a
# Look up commit several different ways
repo.get_object('b53fe83f58f293decae39a70106a5ae78886ba5e')
# Commit b53fe83f58f293decae39a70106a5ae78886ba5e
repo.commit("b53fe83f58f293decae39a70106a5ae78886ba5e")
# Commit b53fe83f58f293decae39a70106a5ae78886ba5e
repo['b53fe83f58f293decae39a70106a5ae78886ba5e']
# Commit b53fe83f58f293decae39a70106a5ae78886ba5e
# Find Commit hash
repo.ref('refs/heads/master')
# 'e80b3ada92d2a02ce353c83683a6533e25240a1a'
# Find commit author
repo['refs/heads/master'].author
# 'Joe Jasinski joe.jasinski@example.com'
# Find committer
repo['refs/heads/master'].committer
# 'Joe Jasinski joe.jasinski@example.com'
# Find Commit message
repo['refs/heads/master'].message
# 'updated style\n'
# Find commit time
from datetime import datetime
datetime.utcfromtimestamp(repo['refs/heads/master'].commit_time)
# Find Trees associated with commit
repo['b53fe83f58f293decae39a70106a5ae78886ba5e'].tree
'b3437c8329fc3f6306936c7ca1986cefc1629862'
repo[c.tree].items()
[TreeEntry(path='.gitignore', mode=33188, sha='13609a506289eba22b61df5eab0f89b7aede323d'),
TreeEntry(path='example', mode=16384, sha='f8e95712570c4316868ee9af32088324e8d3e498'),
TreeEntry(path='gitdjango', mode=16384, sha='32b164fac85e5b40dd8d4265a0a8df765bf57300'),
TreeEntry(path='manage.py', mode=33261, sha='2605e3768e2bab92ef0550d452036472e9a6a210'),
...
repo[repo[c.tree].items()[0].sha]
TREE OBJECTS
# Find Tree associated with hash
repo.get_object('b3437c8329fc3f6306936c7ca1986cefc1629862')
repo.get_object('b3437c8329fc3f6306936c7ca1986cefc1629862')
# Tree b3437c8329fc3f6306936c7ca1986cefc1629862
# Find all items under a Tree
repo[b3437c8329fc3f6306936c7ca1986cefc1629862].items()
# Find all items under a Tree
repo[b3437c8329fc3f6306936c7ca1986cefc1629862].items()
BLOB OBJECTS
# Find Blob associated with hash
repo.get_blob("2605e3768e2bab92ef0550d452036472e9a6a210")
# Blob 2605e3768e2bab92ef0550d452036472e9a6a210
repo['2605e3768e2bab92ef0550d452036472e9a6a210']
# Blob 2605e3768e2bab92ef0550d452036472e9a6a210
MISC
# Iterate through all objects under a gree
for entry in repo.object_store.iter_tree_contents(repo['refs/heads/master'].tree):
for entry in repo.object_store.iter_tree_contents(repo['refs/heads/master'].tree):
print entry
# TreeEntry(path='.gitignore', mode=33188, sha='13609a506289eba22b61df5eab0f89b7aede323d')
# TreeEntry(path='example/__init__.py', mode=33188, sha='e69de29bb2d1d6434b8b29ae775ad8c2e48c5391')
# TreeEntry(path='example/__init__.pyc', mode=33188, sha='ced988bb5f3f22f4f1956bf852f106b23eea5c09')
# ...
# Find a the hash of an object by specifying a filesystem path
from dulwich.object_store import tree_lookup_path
(mode, hash) = tree_lookup_path(repo.get_object, repo['refs/heads/master'].tree, 'gitdjango/models.py')
# Find an object filehandle relative to inside the .git directory
repo.get_named_file('../requirements.pip')
# open file '/home/jjasinsk/Sites/env/proj/gitdjango/.git/../requirements.pip', mode 'rb' at 0x101cdf938
f.read()
# 'Django==1.4\nGitPython==0.3.2.RC1\nasync==0.6.1\ngitdb==0.5.4\ninclude-server==3.1-toolwhip.1\nsmmap==0.8.2\nwsgiref==0.1.2\n'
Friday, March 09, 2012
Monitoring Connections
Find IPs that have the most connections
netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1
http://www.webhostingtalk.com/showthread.php?t=673467
Find Listening Connections (open ports)
netstat -an | grep -i listening
Other Netstat Commands:
netstat -ntl
netstat -nputw
netstat -a -n -p
netstat -tulpn
netstat -tunapl
http://unix.stackexchange.com/questions/56453/how-can-i-monitor-all-outgoing-requests-connections-from-my-machine
netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1
http://www.webhostingtalk.com/showthread.php?t=673467
Find Listening Connections (open ports)
netstat -an | grep -i listening
Other Netstat Commands:
netstat -ntl
netstat -nputw
netstat -a -n -p
netstat -tulpn
netstat -tunapl
http://unix.stackexchange.com/questions/56453/how-can-i-monitor-all-outgoing-requests-connections-from-my-machine
Thursday, March 08, 2012
Basic Vagrant Usage
Doing a 'vagrant box add boxname.box' creates a .vagrant.d/ directory in your home directory. This directory stores base boxes installed. Doing a 'vagrant init' in some other directory creates a Vagrantfile inside of that directory which specifies which base box to use and provides any other provisioning information.
List vagrant base boxes installed:
vagrant box list
# returns list of boxnames and type
mybox (virtualbox)
Add a new vagrant base box named "my_box" based on box image:
vagrant box add my_box http://files.vagrantup.com/lucid32.box
Remove a base box:
vagrant box remove my_box type
# for a virtualbox use virtualbox as the type
Location of vagrant base boxes:
cd ~/.vagrant.d/
Create a directory where customizations off the of the base box should take place. then run the following:
cd ~/Sites/VM/test/
vagrant init
vagrant init lucid32 # as an alternative to explicitly indicate which base box to use
Destroy a virtual machine. Destroy's the virtual machine:
vagrant destroy
SSH into a virtual machine:
vagrant ssh
Running a packaged virtual machine
vagrant box add my_box /path/to/the/package.box
vagrant init my_box
vagrant up
Suspend a virtual machine (save state to disk):
vagrant suspend
Resume a suspended virtual machine:
vagrant resume
Some Customizations to the default config (Pre-vagrant 1.1):
Vagrant::Config.run do |config|
# this is basically a way to programmatically invoke the
# 'VBoxManage modifyvm' command from within Vagrant
vagrant box list
# returns list of boxnames and type
mybox (virtualbox)
Add a new vagrant base box named "my_box" based on box image:
vagrant box add my_box http://files.vagrantup.com/lucid32.box
Remove a base box:
vagrant box remove my_box type
# for a virtualbox use virtualbox as the type
Location of vagrant base boxes:
cd ~/.vagrant.d/
Create a directory where customizations off the of the base box should take place. then run the following:
cd ~/Sites/VM/test/
vagrant init
vagrant init lucid32 # as an alternative to explicitly indicate which base box to use
Example Vagrant file in ~/Sites/VM/test/Vagrantfile
Vagrant::Config.run do |config|
config.vm.box = "lucid32" # specify which base box to use
end
Run a virtual machine. Builds a virtual machine using box and Vagrantfile and runs it. You must be inside the given vagrant directory (~/Sites/VM/test) in order for this to work.
vagrant up
Destroy a virtual machine. Destroy's the virtual machine:
vagrant destroy
SSH into a virtual machine:
vagrant ssh
Running a packaged virtual machine
vagrant box add my_box /path/to/the/package.box
vagrant init my_box
vagrant up
Suspend a virtual machine (save state to disk):
vagrant suspend
Resume a suspended virtual machine:
vagrant resume
Vagrant::Config.run do |config|
# this is basically a way to programmatically invoke the
# 'VBoxManage modifyvm' command from within Vagrant
# NOTE: this requires a fairly new version of vagrant
# to use this syntax.
config.vm.customize ["modifyvm", :id, "--memory", 1024]
# By default vagrant boots boxes headless. This enables the
# Virtualbox GUI
config.vm.boot_mode = :gui
# to use this syntax.
config.vm.customize ["modifyvm", :id, "--memory", 1024]
# By default vagrant boots boxes headless. This enables the
# Virtualbox GUI
config.vm.boot_mode = :gui
# Path to ssh private key used to log into box with
# vagrant ssh. If it's a relative path, it will be relative
# to the dir holding the Vagrantfile
# vagrant ssh. If it's a relative path, it will be relative
# to the dir holding the Vagrantfile
config.ssh.private_key_path = 'vagrant_id_dsa'
# Creates a shared folder on host called myshared in the
# same directory as the Vagrantfile. On the guest, it
# mounts the shared folder as /my/shared. The :create
# setting creates the directory on the host if it doesn't
# exist.
# same directory as the Vagrantfile. On the guest, it
# mounts the shared folder as /my/shared. The :create
# setting creates the directory on the host if it doesn't
# exist.
config.vm.share_folder 'my-shared', '/my/shared/', 'myshared', {:create, true}
end
Some Customizations to the default config (Post-vagrant 1.1):
Vagrant.configure("2") do |config|
# setup port forwarding
config.vm.network :forwarded_port, guest: 8000, host: 18000, auto_correct: true
config.vm.network :forwarded_port, guest: 5432, host: 15432, auto_correct: true
config.vm.provider :virtualbox do |vb|
# Don't boot with headless mode
vb.gui = true
# Use VBoxManage to customize the VM. For example to change memory:
vb.customize ["modifyvm", :id, "--memory", "1024"]
# Create a shared folder (host path, guest path)
config.vm.synced_folder "../data", "/vagrant_data"
end
Turn on Debugging
export VAGRANT_LOG=debug
List of vagrant base boxes:
http://vagrantbox.es/
Get SSH configuration for machines:
vagrant ssh-config
Host swarm_manager
HostName 127.0.0.1
User vagrant
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /Users/jjasinski/Sites/test_docker_swarm/.vagrant/machines/swarm_manager/virtualbox/private_key
IdentitiesOnly yes
LogLevel FATAL
Host swarm_node1
HostName 127.0.0.1
User vagrant
Port 2200
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /Users/jjasinski/Sites/test_docker_swarm/.vagrant/machines/swarm_node1/virtualbox/private_key
IdentitiesOnly yes
LogLevel FATAL
Some Customizations to the default config (Post-vagrant 1.1):
Vagrant.configure("2") do |config|
# setup port forwarding
config.vm.network :forwarded_port, guest: 8000, host: 18000, auto_correct: true
config.vm.network :forwarded_port, guest: 5432, host: 15432, auto_correct: true
config.vm.provider :virtualbox do |vb|
# Don't boot with headless mode
vb.gui = true
# Use VBoxManage to customize the VM. For example to change memory:
vb.customize ["modifyvm", :id, "--memory", "1024"]
# Create a shared folder (host path, guest path)
config.vm.synced_folder "../data", "/vagrant_data"
end
Turn on Debugging
export VAGRANT_LOG=debug
List of vagrant base boxes:
http://vagrantbox.es/
Get SSH configuration for machines:
vagrant ssh-config
Host swarm_manager
HostName 127.0.0.1
User vagrant
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /Users/jjasinski/Sites/test_docker_swarm/.vagrant/machines/swarm_manager/virtualbox/private_key
IdentitiesOnly yes
LogLevel FATAL
Host swarm_node1
HostName 127.0.0.1
User vagrant
Port 2200
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /Users/jjasinski/Sites/test_docker_swarm/.vagrant/machines/swarm_node1/virtualbox/private_key
IdentitiesOnly yes
LogLevel FATAL
Thursday, March 01, 2012
Finding table sizes in postgres
Finding table sizes in postgres
Taken from: http://wiki.postgresql.org/wiki/Disk_Usage
Taken from: http://wiki.postgresql.org/wiki/Disk_Usage
SELECT nspname || '.' || relname AS "relation", pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size" FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE nspname NOT IN ('pg_catalog', 'information_schema') AND C.relkind <> 'i' AND nspname !~ '^pg_toast' ORDER BY pg_total_relation_size(C.oid) DESC LIMIT 20;
Thursday, February 09, 2012
Copy File through Compressed Tar
Copy and Compress File through an ssh connection
tar jcvf - myfile.txt | ssh myhost.com "cat > myfile.tar.bz2"
tar jcvf - myfile.txt | ssh myhost.com "cat > myfile.tar.bz2"
Django Session Introspection
Get Data Stored in a Session
from django.contrib.sessions import models
s = models.Session.objects.get(session_key='05adfa345a54525cad912')
s.get_decoded()
Subscribe to:
Posts (Atom)