Monday, July 11, 2011

Sunday, July 10, 2011

Gist Github

A while ago, I used the subdomain feature of pastebin to keep track of my public pastes (e.g. hanworks.pastebin.com), but it seems that pastebin has disabled this feature, making retrieval of old pastes difficult (of course, you can sign up). Hence, I am moving over to the really awesome github gist, which supports various markups such as markdown and reST on top of source code syntax highlighting. I also like the fact that there is a "revisions feature" to see previous revisions.

In other news, github released Github for Mac (more about the design)

Saturday, July 09, 2011

Geeks and Geezers

A long time ago, I read Harvard Geeks and Geezers: How Eras, Values and Defining Moments Shape Leaders (by Warren G. Bennis and Robert J. Thomas)

"Big four" qualities of leadership:

1. Adaptive capacity
2. Engaging others through shared meaning
3. A distinctive voice
4. Integrity

The book also stressed the power and influence of the crucible, and it create exceptional leaders.

Stuff about Python

The stuff here should be seen in the context of CPython unless otherwise stated.

Basic
  1. "import this" easter egg
  2. the pass keyword
  3. Remember to have __init__.py to you modules. You can put code in __init__.py too! (e.g. for initializations, and functions in there can be imported)
  4. Single underscores should be used for private variables.
  5. re.match() only attempts to match a pattern at the beginning of a string where re.search() will match a pattern anywhere in a string.
  6. Readline configuration for python
  7. Else clauses on for loops (or even try-except statements)
  8. Function closures

Advanced
  1. unittest module
    There is so much magic happening behind the scenes that I recommend taking a look at the source code to understand what's going on.
  2. Design Patterns in Python
  3. More Design Patterns (slides) (from Google)
  4. Use coroutines via enhanced generators (PEP 342). A cool networking/threading library written using coroutines. More about coroutines via PFPL chp 33.3
  5. Mixins
  6. Decorators (tutorial, advanced)
  7. What you should know about exec and compile
  8. New and old classes
Implementations of Py
  • CPython
  • JPython
  • IronPython
  • StacklessPython

Note: This post is a work in progress.

Thursday, July 07, 2011

web2py

Free open source full-stack framework for rapid development of fast, scalable, secure and portable database-driven web-based applications. Written and programmable in Python. LGPLv3 License
Read more...

Wonders how web2py compares against django.

Sunday, June 26, 2011

Idiosyncrasies of Python

  1. If say thread A does a thread join on thread B, thread A will block (and be uninterruptible by signals) until thread B completes. (more info here)
  2. The Global Interpreter Lock in CPython. JPython and IronPython have no GIL. To get around GIL, consider using the multiprocessing module, i.e. processes instead of threads.

(More to come!)

Nginx on Ubuntu

$ sudo apt-get install nginx
$ sudo /etc/init.d/nginx start
$ sudo /etc/init.d/nginx stop

Hit 127.0.0.1:80/ and you should see "Welcome to nginx!"

Config path: /etc/ningx/
Default virtual hosts config path: /etc/nginx/sites-enabled/
Default doc root: /usr/share/nginx/www

Docs: nginx primer for folks who come from apache

Monday, June 20, 2011

Build Engineering

One interesting aspect of software development that I have been exposed to lately is build engineering.

Particularly, I have been reading up on:

Terminology 101

This list is likely to be continuously updated.
  • Serialization is often known as pickling (mainly used in python) and marshalling (more for binary data).
  • Cache priming is also known as cache warming (e.g. by populating the cache with data)
  • Mainline/baseline (aka "vanilla" for Linux Kernel Dev) is similar to the master branch of the code repository.
  • Continuous build != nightly builds, since bugs can lie dormant for 24 hrs for nightly builds.
  • XP = Extreme Programming
  • Coroutines are "computer program components that generalize subroutines to allow multiple entry points for suspending and resuming execution at certain locations"
  • Log rotation is "the regular (nightly or weekly, typically) moving of an existing log file to some other file name and starting fresh with an empty log file".

Sunday, June 12, 2011

Servers on Mac

Personal tips for setting up MAMP (Mac, Apache, MySQL, PHP):

The main reason why you have apache on mac is because of sharing (system preferences -> sharing -> web sharing). And by default, apache is configured to listen on port 80 and include a bunch of config files in /private/etc/apache2/[users,other]
Virtual hosts are not setup by default.

Things I do for running a development server:
- changed port to listen on another port (say 8000, 8080)
- set up http auth for security reasons

Stuff I put in my .zshrc:


alias couch_start="sudoge launchctl load -w /Library/LaunchDaemons/org.apache.couchdb.plist"
alias couch_stop="sudo launcctl unload /Library/LaunchDaeons/org.apache.couchdb.plist"
alias couch_restart="sudo launchctl stop org.apache.couchdb"

alias apache_start="sudo apachectl start"
alias apache_stop="sudo apachectl stop"
alias apache_restart="sudo apachectl restart"

alias mysql_start="sudo /usr/local/mysql/support-files/mysql.server start"
alias mysql_stop="sudo /usr/local/mysql/support-files/mysql.server stop"
alias mysql_restart="sudo /usr/local/mysql/support-files/mysql.server restart"

alias mysql="/usr/local/mysql/bin/mysql"