Random   •   Archives   •   About   •   RSS

If I swallow lots of air will I be lighter?

After dinner tonight, my four year old Carter asked me, "If I swallow lots of air will I be lighter?". I thought about the question for a moment and then told him it depends on what surrounds you.

If you are surrounded by:
  • air and you swallow lots of air ...

Output all instance identifiers of an AWS VPC to JSON

At work today I needed an easy way to collect private IP addresses of every instance in one of our production VPCs.

I ended up adding a tool to http://botoform.com to perform this task.

bf --profile <aws_profile> dump <vpc_name_tag> instances --output-format json

For example:

bf --profile customer3 dump ...

Set DNS resolver options

The right way to persist resolver options across many Linux distributions.


Bind9 on Joyent Triton

Tricks to reduce Bind9's large memory footprint on Joyent Triton.


Migrating from WordPress to Pelican

Five hints to save time during your migration from WordPress.


Boto3 get main route table

Library work around.


List all installed package names in Python

You only need a two lines of code to access package names and versions.


Filtering AWS resources with Boto3

References to take you from filtering novice to expert.


Working with botocore's ~/.aws/config

Don't reinvent the wheel, use Botocores Config facilities for work with AWS.


My Mentor


Change default gateway on all SmartOS Zones and KVM guests


SmartOS Ubuntu guest, apt-get not working because IPv6

My brutal yet simple work around.


A Python script which searches for available interpreters


Migrating libvirt KVM guest to SmartOS KVM guest

Stop worrying and replace your Linux hypervisor with SmartOS.


Setting region programmatically in Boto3


Securely publish Jenkins build artifacts on Salt Master

Your project deserves an asset pipeline.


Set postgres user password on PostgreSQL SmartOS Zone


Risk, Process, and Balance

The operations of a company will have intrinsic risk. Risk occurs each time we decide to take an action or an inaction. This means that anything we choose to do, or not do, has associated risk.

An organization which has an unhealthy aversion to risk has a much higher chance ...


autofs /net automount stopped working

So autofs randomly stopped working on one of my Ubuntu hosts (this issue has been found on Arch as well so its most likely a change upstream). I found this error in the logs:

attempting to mount entry /net/freenas.example.net
get_exports: lookup(hosts): exports lookup failed for freenas ...

Custom Rundeck HipChat notification templates

Today I built a GUI and workflow around Ansible using Rundeck. Tonight I started diving into sending HipChat notifications and after a bit of research, I managed to create a custom notification template for each Rundeck project.

Modify your project's configuration file, on Ubuntu it was in /var/rundeck ...


Build release pipelines on S3 with s3p

This weekend I finished my first sprint on s3p which is a Python library and CLI application that manages release pipelines on AWS S3. I put a lot of effort into the readme.rst file, so look there for usage and examples.

The main purpose of s3p is to use ...


Dealing with pagination in Python

So I'm working with an API (AWS ElastiCache) that offers mandatory pagination of results. I need to get all results, so I took some time to work out this logic.

def combine_results(function, key, marker=0, **kwargs):
    """deal with manditory pagination of AWS result descriptions"""
    results = []
    while marker != None ...

Turn python dict into a key=value string and back again

I'm currently refactoring a script that tags AWS resources and I came up with this one liner to generate pretty output. It basically turns {'tag1':'value1','tag2':'value2'} into tag1=value1, tag2=value2. Here is the code:

', '.join(['='.join(key_value) for key_value in {'a':'1','b':'2'}.items() ])

Oh ...


Migrating MongoDB from Ubuntu to SmartOS

I installed the mongodb 14.2.0 (uuid a5775e36-2a02-11e4-942a-67ae7a242985) dataset and launched a new zone. The zone automatically creates a username and password for admin and "quickbackup". You can find these passwords by running the following command inside the zone:

cat /var/svc/log/system-zoneinit\:default.log | grep -i mon ...

Set Root Password SmartOS Percona MySQL Zone

I used project-fifo to launch the percona (14.2.0) MySQL dataset. I couldn't get into the MySQL instance so I reached out on IRC. Johngrasty, a friendly guy in the #smartos IRC channel, provided a command to display the randomly generated MySQL password emitted to the zone-init log ...


rabbits

Digital Rabbit Drawing.


reality shattered

Emotional overload


Heka, World2!

This article expands on my “Hello World” for Heka blog post. Check that one out first if you are new to Heka.

In this guide we introduce using Heka over the network by utilizing two Hekad processes on localhost. For discussion purposes we name one of the Hekad processes "sender ...


Mailpile Salt States for Ubuntu or Debian

I wrote these Salt States to install Mailpile on an Ubuntu host. Fun fact, it took me 20 minutes to write these states and they worked the first time I ran them. Disclaimer - I used a throw away server and wasn't concerned that buckets of packages were installed to ...


You can hack on FreeNAS 9

This post analyses the FreeNAS 9 code base and discusses the various places users may feel confident to hack on.

FreeNAS uses the following software stack:

Django
A Python Web Application Framework which complies with WSGI
Nginx
A very fast web server which may act as a reverse proxy server ...

Nginx with SSL and mixed content errors with upstream WSGI servers

Mixed content errors occur because Nginx (the front-end server) communicates to the upstream WSGI server using http. WSGI does not know (or care) about the SSL session between Nginx and the user. The WSGI server will naively generate URIs and serve assets as http.

To fix mixed content errors, we ...


How to patch Heartbleed OpenSSL defect (libssl) on Ubuntu

Lots of people claim that you need to upgrade openssl package, but this will not fix the issue.

The issue is not the openssl package, it is one of the libraries that the package relies on (libssl).

The output of openssl version -a command ...


IRC Bot (Foxbot) runs canned remote executions using Salt Stack

I extended my IRC Bot Foxbot today to allow it to run canned remote executions on behalf of users in an IRC channel. This is only a prototype or proof-of-concept. Be very careful not to allow users to inject their own commands. Foxbot must be running on the Salt Master ...


Filter Salt Stack Return Data Output

Sometimes you only want to see what has changed, and that is OK.

Create a file like this:

filter.py

#!/usr/bin/python

from json import loads
from json import dumps

import fileinput

stdin_lines = [line for line in fileinput.input()]

ret = loads(''.join(stdin_lines))

for minion_id, data in ret.items ...

Replace the Nagios Scheduler and NRPE with Salt Stack

Note: I will update this post as I progress.

So the idea is to use Salt Stack's remote execution to communicate with all nodes and run the Nagios checks and collect the return output instead of using the NRPE client/service protocol. This reduces the number of agents running ...


Configuration Management and the Golden Image

When operations first became a thing, system administrators stood up servers using a base image from their favourite distribution. Things were done manually. Some administrators created their own distros, some wrote customised shell scripts to be run once-and-only-once to provision software and settings. This method worked, but it was slow ...


Automatic Backups

My tools for creating automatic backups for various systems


tar-back

tar-back is a backup utility to tar and gzip target filesystems.
It supports a custom retention, filter exclusions, and backup directory.

I use tar-back in combination with cron to perform regular backups of all localhost filesystems into /archive/fs. I then have a central long term storage server that collects ...


mysql-back

mysql-backis a backup utility script to dump (backup) and gzip every MySQL database on a host.

I use mysql-back in combination with cron to perform regular database dumps of MySQL servers to the /archive/db partition on localhost. I then have a central long term storage server that collects ...


The Three Deployment Management Strategies

There are three deployment management strategies that could be used to maintain a system. Each has pros and cons which I outline in this document.

run once

A proceedure that is run once and only once to setup a system's configuration values and settings. A semaphore or flag generally ...


How to reset HP iLO Lights-Out User and Password Settings with IPMItool

Do NOT follow guides that suggest to make a DOS boot disk, this is over complicated.

Use the ipmitool which ships with most Unix based operating systems. I tested on SmartOS and Ubuntu Linux. Use a live boot disk if you must.

  1. Run ipmitool user list to list all users ...

How I added two Seagate 240G SSDs as SmartOS L2ARC

How I added two Seagate 240G SSDs as SmartOS L2ARC

  1. removed icepacks from two western digital velociraptors
  2. installed ssds into icepacks
  3. installed icepacks into HP hotswap trays
  4. installed trays into HP prolaient g6 server

How to list all drive installed in Solaris, Open Solaris, or SmartOS

iostat -eE
format

AVAILABLE ...

Test Game Engine with Python and SFML

Over this holiday season, Christmas and New Years, I took the time to mess with some Game Development. I wrote a demo game engine using Python and SFML. I plan to use this post to track my progress.

Video Evolution Playlist

2014-01-01


Heka, World!

This post serves as a "Hello World" for the data collection and processing software called Heka. Heka is written in Go and was open sourced by Mozilla, the same fabulous group that brings us Firefox!

I intend to use Heka to replace Logstash agents by sending logs directly to ElasticSearch ...


sensu-salt

A while back I explained how to Create your own fleet of servers with Digital Ocean and salt-cloud. Today I will extend that post and show how I deployed a test environment for Sensu, an open source monitoring framework.

Before I test out new infrastructure software, I always attempt to ...


Hackathon 2013 Virtualization

As a warning before we dive into things, this post is less of a formal publication and more of a stream of conscience.

My employer newcars.com has allowed the technical staff to host hackathon! Over the past couple weeks I have had quite a few ideas tumbling around in ...


Backup all virtual machines on a SmartOS hypervisor with smart-back.sh

This post will explain how to create a cronjob to backup of every virtual machine on a SmartOS hypervisor.

Create the following bash script in /opt/smart-back.sh:

#!/usr/bin/bash

# Backup all virtual machines on a SmartOS hypervisor
# Author:  russell@ballestrini.net
# Website: http://russell.ballestrini.net/

# Backup directory ...

Simplify deployments with Upstart and uWSGI

As you know from my previous post, I recently deleted LinkPeek.com and after struggling to get it back online, I vowed to start utilizing configuration management. During this exercise, I noticed that the architecture I use in production seems overly complicated.

The current production deployment stack:

  • Nginx listen on ...

Postfix Salt State Formula


Control a MongoDB collection in configuration management

This post explains how to use configuration management (Salt Stack) to completely control a MongoDB collection. In our example we want to control a store's collection of plans.

First we create a JSON representation of the collection.

mongodb/plan.json:

{
  "_id" : { "$oid" : "4ef8b9e2be329f491d98f74b" },
  "cost" : 20, "description" : "development",
  "name" : "good ...

Configuration Management vs Remote Execution

It's about time to learn the difference.


Understanding Salt Stack user and group management

This state will create a user:

russell:
  user:
    - present

This state will create a user and a group. This also makes the user part of the group, and handles creating the group first:

russell:
  group:
    - present
  user:
    - present
    - groups:
      - russell
    - require:
      - group: russell

This state handles user and group generation ...


Create your own fleet of servers with Digital Ocean and salt-cloud

Have you heard about Digital Ocean? They offer a polished user interface, KVM guests with SSD storage, and an API to interact with a cloud of hypervisors. API integration got you down? Don't worry, salt-cloud has already integrated Digital Ocean among it's list of providers! The rest of ...


Add a custom header to all Salt managed files using pillar and jinja templates

Salt-stack (salt) provides a solution for centralized configuration management and remote execution. One of the most basic things Salt provides is the ability to manage the contents of a file or a directory of files. Using Salt we can dictate the state of our minions and as a result we ...


High load and CPU usage craftbukkit compared to vanilla minecraft

I started researching the best ways to use salt to provision minecraft servers. I wrote a salt state formula for the vanilla minecraft server deployment. The deployment worked out great so I decided to try my luck with plugins.

In order to use plugins and mods we need to use ...


Honey! I just DELETED LinkPeek.com

During the day I am an ops sys-admin. During the night I am a husband, father of two, and a CEO of a bootstrapped start-up. After launch, my first project was to schedule regular backups of user data and archive off-site. My goal was to create backups but never need ...


Survey Baby Monkey

baby monkey fxhp cartoon


Automatic event hangout with cron

Create an online only, hangout event

Create a new event with a date far into the future, like the year 2015. Go to the event's options > advanced and enable 'this event is online only' which will create a unique Hangout URI.

Create a cronjob

Create a cronjob on each ...


Guido name dropped tornado python tulip and pep-3156

Pycon 2013 was excellent, in fact it was my first one I have attended.

I found it odd that django and Pyramid had plenty of talks but nobody mentioned tornado.

The only person that brought up tornado was Guido himself, who has been researching and developing async python since December ...


virt-back's Domfetcher class returns doms from libvirt API


How to overload default function arguments in python using lambda

Python Lambda functions are very powerful but I often forget how they work or the fun things they do. This post will document how to use a lambda to provide different default arguments to a function.

We will use the human function found in ago.py as an example - because ...


ago.py human readable timedelta 0.0.4 release


We have released ago.py 0.0.4

Special thanks to David Beitey for supplying ideas and python code for this update!

All changes are backward compatible.

Change log:

  • added support for future dates
  • added optional past_tense ...

Tips for getting pull requests approved

Pull rejection sucks!

You have just coded, implemented, and submitted a pull request. A short while later the request is declined by an upstream maintainer and you feel crushed. We have all been there. Today I'm going to show you a better way. This article will teach you how ...


how to drain an iPhone battery without needing passcode

  1. Press home button [ ]
  2. Slide camera button up
  3. Slide mode to video
  4. Turn on flash
  5. Put iPhone on table with light pointed down
  6. Walk away inconspicuously

Extra points if you set the camera to record (just don't record yourself or sounds) which will fill up the iPhone capacity.


Explaining cache with python

What is cache? I define cache as "a saved answer to a question". Caching can speed up an application if a computationally complex question is asked frequently. Instead of the computing the answer over and over, we can use the previously cached answer. This post will present one method of ...


The Pyramid community taught me the importance of test driven development

Sontek's patch

I greeted the UPS man in the middle of the street to sign for my new Lenovo ThinkPad T430. Because this was My first brand-new laptop purchase I rationalized the time I spent tracking the package from the factory in China to my hands in Connecticut. Once ...


miniuri parser and ago human timedelta

I just packaged and published a couple of python modules to pypi:

To install them, run:

Install:

pip install --upgrade ago miniuri

If you want to view their source code, look here:

I hope you enjoy them.


My top five suggestions for an independent developer creating a new product or service

1. Write everyday. Build a blog for the project and write about milestones, progress, and hurdles. Also keep a personal blog and write about hobbies. Read some theory about "copy writing" and search engine optimization. Write personalized email responses to customers. Great communication skills will have the most impact on ...


Prevent a certain program from running too long in bash

Update - I opensourced this script here: bash kira

I came up this this script to kill certain programs after they run for too long. This works like similar to a timeout. Warning this script is pretty harsh and kills the program.

#!/bin/bash
PROGRAM=replace-with-program-name
PIDSFILE=/tmp/kill-these.pids

for ...

Always attempt to scale vertically first

I spent the weekend fretting because one of my servers was basically being DOS'd by paying customers. During the outage I started thinking about the best way to scale and how I could make the code-base more efficient.

Linux top reported high load, in the 20's. Eventually I ...


High load on web server after updating from Ubuntu 10.04 to Ubuntu 12.04 LTS

Charts that show the load difference.


How to rescue logs and config from a failed Citrix NetScaler App Gateway

Today our production Citrix NetScaler broke. The box wouldn't boot and our only backup copy of the config was on the NetScaler itself.

Being the only Unix guy around I attempted to help out the admins working the outage. I SSH'd into the development NetScaler and noticed it ...


The most valuable registration field: How did you hear about us?


How did you hear about us?


I first answered this question when joining Linode. I remember thinking "Wow, this is a great time to ask me!" because the real answer was still in my short term memory.


When I launched LinkPeek I applied this technique. After an amazing launch (thank ...


I just purchased Instagram for 1B and all I got was this lousy image filter

Facebook purchased Instagram on Monday, April 9th 2012 for $1,000,000,000 US. Instagram, a free to use image sharing iPhone application, has absolutely NO REVENUE STREAM. The application is free to download, free to use, and has no monetization support from advertisements.

$1000000000.00 / 30000000 users = 33.33 ...

Trouble mounting filesystem on KVM guest after reboot

Just found this out the hard way...

It looks like the attachment of /KVMROOT/guest-dev-app.img on guest-dev did not persist when the KVM host rebooted for patching.

As it appears the virsh attach-disk command works a lot like the mount command.

In order to have a disk attachment persist ...


nosslsearch cname is a bad idea and solution


Google SafeSearch and SSL Search for Schools suggests implementing the following changes to the network:
To utilize the no SSL option for your network, configure the DNS entry for www.google.com to be a CNAME for nosslsearch.google.com.

** Here are the reasons why this is a bad idea ...

"I see" said the blind man, to the deaf dog, as he walked off the cliff.


"I see" said the blind man, to the deaf dog, as he walked off the cliff.


As far as I can tell, I am the originator of this version of this quote.

EDIT: changed "originator of the quote" to "originator of this version of this quote".


What do you name your python virtualenv?


What do you name your python virtualenv?

I name my virtualenv 'virtpy'. Is there a standard name being used out there?

Maybe we can come to a consensus as a standard name? Please feel free to post your virtualenv names here as a sort of poll.


How to save hundreds of dollars on groceries without clipping coupons

Jenn explains how she drastically decreased our grocery bill.


How to capture HTTPS SSL TLS packets with wireshark

This article will explain how to use wireshark to capture TCP/IP packets. Specifically I will show how to capture encrypted (HTTPS) packets and attempt to document the "dance" a client and server do to build an SSL tunnel.

What is Wireshark?

Wireshark is a network protocol analyzer for Windows ...


Zenoss or Nagios monitoring of HTTPS using client certificate authentication

I recently needed to monitor an HTTPS API for response time and availability. At first I planned to just use the Nagios check_http command.

After gathering more requirements I learned that the API was protected by client certificate authentication. After some research I quickly found that no solution existed to ...


Jake, Finn, and Ice King

My Adventure Time art, painted with MyPaint and wacom tablet.


My 4 month old's 15 minutes of fame


Block cipher lab


Consider the following block cipher. Suppose that each block cipher T simply reverses the order of the eight input bits (so that, for example 11110000 becomes 00001111).
Further suppose that the 64-bit scrambler does not modify any bits. With n = 3 iterations and the original 64-bit input equal to 10100000 ...

Monoalphabetic Cipher and Inverse Written in Python


Here is my implementation of a Monoalphabetic Cipher written with a python dictionary:
monoalpha = {
    'a': 'm',
    'b': 'n',
    'c': 'b',
    'd': 'v',
    'e': 'c',
    'f': 'x',
    'g': 'z',
    'h': 'a',
    'i': 's',
    'j': 'd',
    'k': 'f',
    'l': 'g',
    'm': 'h',
    'n': 'j',
    'o': 'k',
    'p': 'l',
    'q': 'p',
    'r': 'o ...

Why does a Hash provide better message integrity then an Internet checksum?

Why does a Hash provide better message integrity then an Internet checksum?

Hash function and checksum function both return a value which cannot be reversed.

An Internet checksum (TCP checksum or IP checksum) is designed to detect common errors quickly and efficiently. An Internet checksum does not attempt to prevent ...

Symmetric Encryption vs Public Key Encryption

How many keys are involved for symmetric key encryption? How about public key encryption?

Suppose you have N people who want to communicate with each other using symmetric keys. All communication between any two people, i and j, is visible to group N. Only person i and person j can ...


Attributes of an 8-block cipher

Consider an 8-block cipher and answer the following:

How many possible input blocks does this cipher have?

How many possible mappings are there?

If we view each mapping as a key, then how many possible keys does this cipher have?

To find the input blocks of this cipher we raise ...


Reasons why some Internet entities might want secure communication


What are the differences between message confidentiality and message integrity


Today I lost a customer

Today I lost a customer.

I added some new code to LinkPeek to accept coupons and I didn't think of an edge case. This ended up creating an uncaught exception in my server side code which ultimatly served the newly subscribing customer an HTTP 500 error page.

The damage ...


LinkPeek.com, webpage to image, was a by-product

tldr; When faced with pivoting or killing a project, take a good look at all possible by-products. Don't miss the hidden gem in a project's slag!

Last year I built yoursitemakesmebarf.com, a novelty web application which allowed anonymous link submission. The software would automatically take screenshots of ...


flash mob office meeting definition

Flash Meeting

In a office or cubicle environment a group of uninvited people gather and hover around your desk to talk to you. A meeting forms in immaculate conception as you sit bewildered at your desk.

Other names: Flash Meeting, Flash Mob Meeting, Flash Office Meeting


LinkPeek.com Number One on Hacker News


How to Incorporate Custom Configuration in a Pyramid Application

Imagine that you have just built a wiki, blog, or cms web application that will be deployed multiple times by different people. You would like to provide the ability to configure some aspects of the program without the end user altering your python or template code. This guide explains how ...


Career development is a game of chutes and ladders

find out what is the ladder.


I'm petrified of launching my web application


I'm petrified of launching my web application because I'm fearful that I won't ...
  • acquire users
  • support my users well
  • scale in a timely manner
  • react quickly to feedback
  • monetize the application

But most of all I'm scared that nobody will like me. I'm scared of ...


Webmaster tools alerted issue turned out Pylon session files flooded inodes


Occupy Wall Street Stack vs Queue

Occupy Wall Street contributors claim to use a "stack" to determine speaking arrangements.

I plan to explain how the term "stack" used in this scenario does not align itself with the mathematical or computer science definition.

The term stack means First In Last Out or "FILO". For example: a person ...


Adding inline image support to a gmail messages

Enable ability to insert images into a message body. You can upload and insert image files in your computer, or insert images by URLs. This lab will not work if you have offline enabled.

  1. Go to google labs: https://mail.google.com/mail/#settings/labs
  2. Search "images".
  3. Enable "Inserting images ...

Cell shading practice, A sketched skull, and an old wind mill photograph


I cancelled my xbox live automatic renewal


r8168 driver issues after Ubuntu 11.10 upgrade kernel linux 3.0

I had network issues after upgrading to Ubuntu 11.10 which has the linux 3.0 kernel.

I used this guide to compile the r8168 driver however, I needed to alter the Makefile to support for linux 3.0 kernel.

Edit src/Makefile:

#KEXT  := $(shell echo $(KVER) | sed -ne 's ...

A better way to show website backlinks

Early web pilgrims of the Internet fashioned search queries like
link:russell.ballestrini.net to gather backlinks for a domain.

I however advocate a revolutionary search pattern like -

"russell.ballestrini.net" -site:russell.ballestrini.net

to gather an improved representation of backlinks.

Click here to try now!


CSS frameworks not rendering properly on all browsers

Read on for the one line fix.


LinkPeek.com web address thumbnail api alpha release

Convert any webpage to an image.


How do I calculate the M in my MVP?

Is my idea too minimal?


New Baby Homecoming

family += 1


Hacker Olive Oil Lamp Crafted From Home Materials

Really fast and clean design.


A system administrators guide to installing and maintaining multiple python environments

Some operating systems depend on a specific version of python to function properly. For example, Yum on Redhat Enterprise Linux 5 (RHEL5) depends on python 2.4.3. This version of python lacks support from many utilities ...


Deliberating the Viewers vs. Doers concept

America has succumbed to "spectatoritis".


Python Image Grabber pig.py

Download all the images from a URI with this simple tool!


Security Professionals: Yes we appear vulnerable but that attack vector will never happen

In loom of recent internet attacks many institutions have started scrambling in attempt to "strengthen" their security stance. I agree that auditing our systems and networks for potential flaws seems appropriate at this time to prevent getting "caught with our pants down". Incidentally, I have recently witnessed the introduction of ...


virt-back: restoring from backups

In a perfect world we should create backups but never need them. Although this statement holds truth, creating guest backups provides many more benefits.

The most common reasons system administrators restore from a virt-back guest backup:

  • recovering from data corruption
  • recovering deleted files
  • recovering from a virus infection
  • recovering from ...

Programming is like Alchemy

except instead of exchanging matter, we programmers exchange time.


The Great Gist Heist

Please listen to my story before jumping to conclusions.


a hack to gain 80 percent efficiency when creating github projects


Add a Breadcrumb Subscriber to a Pyramid project using 4 simple steps


Google Bot Attempts to Crawl Shortest Urls First


ATT Uverse Residential Gateway Broadband LED flashes red intermittently


Connecticut killed affliate marketing with Amazon.com


Dropbox Encryption with TrueCrypt

The best security acts like an onion.


Voice Over IP with TeamSpeak

This article will cover running a Voice Over IP service like TeamSpeak on a VPS.

Voice Over IP allows users to communicate using audio over the Internet.

When planning for this article I originally was going to cover ventrilo, but their download link was obfuscated behind a heinous php session ...


Porting the ChaosTheory Wordpress theme to Pylowiki


virt-back: a python libvirt backup utility for kvm xen virtualbox

backup your virtual maching guests.


Response to L-Theanine: a 4000 Year Old Mind-Hack

Solve problems and write code in your sleep.


I just used Google to purchase Chinese food takeout for two


Graphic Design Powerhouse: Wacom Bamboo, Ubuntu, and MyPaint


How did Stack Overflow get initial traction?

Stack Overflow was a progressive and natural evolution of the standard clunky forum.

Using ajax it created a more fun and clean user experience.

Using badges and karma to gain responsibility allow forums post to become a game. People naturally like to see progression and growth, being able to watch ...


A homegrown python bread crumb module

I have placed bread.py, a python breadcrumb module, into the public domain.

The bread object accepts a url string and grants access to the url crumbs (parts) or url links (list of hrefs to each crumb).

Tutorial: Add a Breadcrumb Subscriber to a Pyramid project using 4 simple steps ...


four2go!: A new spin on an old classic


The Barrymores stole my heart then crushed it

© Russell Ballestrini.