Skip to content

Instantly share code, notes, and snippets.

View jbarber's full-sized avatar

Jonathan Barber jbarber

View GitHub Profile
@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 / 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 / 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 / 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 / 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 / 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 / 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 / dbus.pl
Created April 2, 2015 14:36
Example perl DBUS service with AnyEvent::DBUS
#!/usr/bin/env perl
# Simple (!) Net::DBus service example using AnyEvent::DBus to run the event
# loop. You can examine the service with the following command:
# gdbus introspect --session --dest=pt.up.fe.door -o /pt/up/fe/door
#
# And invoke the unlock method as follows:
# dbus-send --session --dest=pt.up.fe.door /pt/up/fe/door pt.up.fe.door.unlock
#
# Once the unlock method is invoked, the program terminates.
@jbarber
jbarber / sip-hangup.pl
Created April 2, 2015 14:49
Example of Net::SIP and AnyEvent with hanging up caller
#!/usr/bin/env perl
# Make call when program receives SIGHUP, hangup when call is answered
use strict;
use warnings;
use 5.10.0;
use Net::SIP 0.687;
#use Net::SIP::Debug 1;
@jbarber
jbarber / ovs-db.py
Created June 3, 2015 16:53
Get information from openvswitch ovsdb
#!/usr/bin/env python
import ovs.db.idl
import ovs.poller
ovs.vlog.Vlog.set_levels_from_string("console:dbg")
ovs.vlog.Vlog.init()
remote = 'unix:/var/run/openvswitch/db.sock'
# If not present, will read from default path