Never been to CodeSnippets before?

Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world (or not, you can keep them private!)

About this user

Jacques Marneweck http://www.powertrip.co.za/

one liner to get a hourly 'histogram' of apache accesslog stats

cat access_log | awk -F: '{print $2}' | sort | uniq -c | awk '{ print $2 " " $1}'

Memcache SMF

// description of your code here

<?xml version='1.0'?>
<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
<service_bundle type='manifest' name='export'>
  <service name='network/memcached' type='service' version='0'>
    <create_default_instance enabled='false'/>
    <single_instance/>
    <dependency name='loopback' grouping='require_all' restart_on='error' type='service'>
      <service_fmri value='svc:/network/loopback:default'/>
    </dependency>
    <exec_method name='start' type='method' exec='/opt/local/sbin/memcached -d -l 127.0.0.1 -u nobody -m 2048' timeout_seconds='30'>
      <method_context/>
    </exec_method>
    <exec_method name='stop' type='method' exec=':kill' timeout_seconds='30'>
      <method_context/>
    </exec_method>
    <template>
      <common_name>
        <loctext xml:lang='C'>memcached</loctext>
      </common_name>
      <documentation>
        <doc_link name='memcached Official' uri='http://www.danga.com/memcached/'/>
      </documentation>
    </template>
  </service>
</service_bundle>

Installs pecl memcache php5 extension on a Joyent Accelerator

//

#!/bin/sh
# Installs pecl memcache php5 extension on a Joyent Accelerator
#
# $Id$

VERSION=2.2.3
TEMPDIR=`/usr/bin/mktemp`

cd ${TEMPDIR}
/usr/sfw/bin/wget http://pecl.php.net/get/memcache-${VERSION}.tgz
/opt/local/bin/tar -zxvf memcache-${VERSION}.tgz
cd memcache-${VERSION}
/opt/local/bin/phpize
./configure
/usr/bin/make
/usr/bin/make install
/opt/local/bin/gsed -i"" "s/;extension=memcache.so/extension=memcache.so/" /opt/local/etc/php.ini

A shell script for setting up the initial lighttpd setup for you

Creates directories and gets the various files for you.

#!/bin/sh
# Setup Lighttpd
#
# Copyright (c) 2006 Jacques Marneweck
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# $Id: setup-lighttpd 21 2006-11-24 21:06:17Z jacques $

/bin/mkdir ~/var/
/bin/mkdir ~/var/log/
/bin/mkdir ~/var/run/
/bin/mkdir ~/etc/rc.d/
/bin/mkdir ~/etc/lighttpd/
/bin/mkdir ~/etc/lighttpd/vhosts.d/

cd ~/etc/lighttpd/
/usr/local/bin/curl -o lighttpd.conf "http://help.textdrive.com/index.php?pg=file&from=2&id=77"
cd ~/etc/lighttpd/vhosts.d/
/usr/local/bin/curl -o APPNAME.conf "http://help.textdrive.com/index.php?pg=file&from=2&id=82"
cd ~/etc/rc.d/
/usr/local/bin/curl -o lighttpd.sh "http://help.textdrive.com/index.php?pg=file&from=2&id=79"
/usr/local/bin/curl -o rails.sh "http://help.textdrive.com/index.php?pg=file&from=2&id=80"

/bin/chmod 755 lighttpd.sh
/bin/chmod 755 rails.sh

touch ~/var/log/lighttpd.access.log
touch ~/var/log/lighttpd.error.log

Johan Sørensen's code to do buffered file uploads in rails

Ruby code to do a buffered file write. Writes chunks of a file to disk from a form post. Ala Johan Sørensen.

File.open("<some path>", "wb") do |f|
  while buff = file_field.read(4096)
    f.write(buff)
  end
end

Look for files in a directory in reverse date order

Looking for files in a directory in reverse date order.

ls -la | sort -nr -k 7

Getting HTTP Auth to play nice with PHP run under FastCGI

<?php
/**
 * Get HTTP Auth to work with PHP+FastCGI
 *
 * @author  Jacques Marneweck <jacques@php.net>
 * @license PHP License v3.01
 */

/**
 * Get HTTP Auth to work with PHP+FastCGI
 */

    

if (isset($_SERVER["AUTHORIZATION"]) && !empty($_SERVER["AUTHORIZATION"])) {

    list ($type, $cred) = split (" ", $_SERVER['AUTHORIZATION']);

    if ($type == 'Basic') {
        list ($user, $pass) = explode (":", base64_decode($cred));
        $_SERVER['PHP_AUTH_USER'] = $user;
        $_SERVER['PHP_AUTH_PW'] = $pass;
    }

}

Not processing javascript in smarty templates

Use {literal}...{/literal} tags around the javascript within your smarty template:

{literal}
<script language="text/javascript">
...
</script>
{/literal}

What to do when new kernel does not work

Ocassionally things go bad(tm). This has bit me for the second time in approx 3 years now, but generally one needs to load the old FreeBSD kernel to start debugging and going through a box with a fine toothcomb.

The following snipbit gives you an idea what steps to take when rebooting the server so that you can load the previous working copy of the FreeBSD kernel:
When the boot menu appears hit the spacebar to stop the countdown.
Press "6" for "to escape to loader prompt"
unload
load /boot/kernel.old/kernel
boot

Now the old working FreeBSD kerenl is booting up. It would be recommended to copy the last working version to /boot/kernel.last for example so that you can "load /boot/kernel.last/kernel", especially if you are going to be building your kernel multiple times on a server.

proxy.pac file for Firefox / Mozilla / et. al.

Quite useful for mobile users who work at different locations and require different proxy server settings for each location, just point your Automatic Proxy Configuration URL to your local proxy.pac file and it automatically pics up if it should use a proxy server or not.

function FindProxyForURL(url, host)
{
   if (isPlainHostName(host) ||
       dnsDomainIs(host, ".foobar"))
       return "DIRECT";
    else
        if (isInNet(myIpAddress(), "192.168.99.0", "255.255.0.0"))
            return "PROXY 192.168.99.2:3128; DIRECT";
        else
            return "DIRECT";
}