Skip to content

Instantly share code, notes, and snippets.

View jbarber's full-sized avatar

Jonathan Barber jbarber

View GitHub Profile
@jbarber
jbarber / huffman.clj
Created March 12, 2015 12:50
Huffman encoding example
(defn freq2leaves
"Convert a sequence of symbols and their frequency into a sequence of hash-maps with keys :sym :freq"
[xs] (map #(hash-map :sym (first %) :freq (second %)) xs))
(defn huffman
"Perform Huffman encoding for the sequence xs of hash maps from freq1leaves.
Return tree of hash-maps with keys :freq and either :symbol (when a leaf) or
:children (when an internal node). :children is a vector of the child nodes."
[xs]
(letfn [(sort-queue [xs] (sort #(compare (:freq %1) (:freq %2)) xs))
@jbarber
jbarber / gist:143351e2db1bebb4c910
Last active August 29, 2015 14:15
Example of liberator resource with post redirect and setting flash
(ns user
(:require [liberator core representation]
[ring.middleware params session flash]
[ring.mock.request]))
;; Return HTTP 303 - have to manage Location ourselves
((->
(liberator.core/resource
:available-media-types ["text/html" "application/x-www-form-urlencoded"]
:allowed-methods [:get :post]
@jbarber
jbarber / get-ldap-tls
Last active August 29, 2015 14:10
Get LDAP TLS certificate in PEM format
#!/usr/bin/env perl
use strict;
use warnings;
use Net::SSLeay qw(get_peer_certificate);
use Net::LDAP;
my $ldap = Net::LDAP->new("ldap.fe.up.pt") or die $!;
$ldap->start_tls or die $!;
$ldap->bind or die $!;
@jbarber
jbarber / shibboleth-login.clj
Created October 13, 2014 12:13
Shibboleth example login
(comment (defproject otrs "0.1.0-SNAPSHOT"
:description "Example of Shibboleth login to OTRS with htmlunit"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.6.0"]
[net.sourceforge.htmlunit/htmlunit "2.15"]]))
(ns otrs.core
(:import (com.gargoylesoftware.htmlunit WebClient)))
@jbarber
jbarber / limiter.go
Last active August 29, 2015 14:03
Function that returns updated values once every time period, no matter how often it is called
package main
import (
"fmt"
"time"
)
// This function returns a function that returns the current time. The current
// time is only updated when the returned function is called, and at most once
// during every period
@jbarber
jbarber / xml-parse.go
Created July 9, 2014 14:21
Example of parsing XML in Go, including extracting attributes
package main
import (
"encoding/xml"
"log"
"strings"
)
type document struct {
Title string `xml:"title"`
@jbarber
jbarber / timer.go
Created July 7, 2014 21:54
Go routine on a changable timer
package main
/*
Example of creating go routine with time based channel - this time can be
adjusted by the parent, so it can postpone (or bring forwards) whatever the
child should do. This could be useful for creating a polling mechanism which
you occasionally want to run sooner.
The parent creates the channel and passes it to the go routine to wait for 10
seconds. This channel is used to communicate how long the child should wait
@jbarber
jbarber / moose.pl
Last active August 29, 2015 13:58
Moose meta-example
use strict;
use warnings;
use Moose;
my $meta = Moose::Meta::Class->create_anon_class();
$meta->add_attribute("foo" => (is => "rw", isa => "Int"));
$meta->make_immutable;
my $object = $meta->new_object(foo => 2);
@jbarber
jbarber / get-yum-url.py
Created January 27, 2014 09:19
Show the URLs that YUM would get RPMs from
#!/usr/bin/env python
import os
import sys
import yum
yb = yum.YumBase()
yb.setCacheDir()
#pkgs = yb.pkgSack.searchNames(["perl"])
pkgs = yb.pkgSack.searchNames(sys.argv[1:])
@jbarber
jbarber / redmine.pl
Created December 18, 2013 17:01
Simple example of hacking the redmine issue tracker via it's API
#!/usr/bin/env perl
# This script provides a basis for futzing about with redmine via it's API
# You will also need to refer to TFM at:
# http://www.redmine.org/projects/redmine/wiki/Rest_Issues
# to fully learn how to manipulate the system.
# It's my impression from the Redmine bugtrackker that there seem to be plenty
# of bugs in the Redmine API implimentation, and that the implimentation
# doesn't cover everything you can do via the GUI.