Skip to content

Instantly share code, notes, and snippets.

Jonathan Barber jbarber

View GitHub Profile
@jbarber
jbarber / moose.pl
Last active Aug 29, 2015
Moose meta-example
View moose.pl
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 Jul 7, 2014
Go routine on a changable timer
View timer.go
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 / xml-parse.go
Created Jul 9, 2014
Example of parsing XML in Go, including extracting attributes
View xml-parse.go
package main
import (
"encoding/xml"
"log"
"strings"
)
type document struct {
Title string `xml:"title"`
@jbarber
jbarber / limiter.go
Last active Aug 29, 2015
Function that returns updated values once every time period, no matter how often it is called
View limiter.go
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 Oct 13, 2014
Shibboleth example login
View shibboleth-login.clj
(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 Aug 29, 2015
Get LDAP TLS certificate in PEM format
View get-ldap-tls
#!/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 Aug 29, 2015
Example of liberator resource with post redirect and setting flash
View gist:143351e2db1bebb4c910
(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 Mar 12, 2015
Huffman encoding example
View huffman.clj
(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 Apr 2, 2015
Example perl DBUS service with AnyEvent::DBUS
View dbus.pl
#!/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 Apr 2, 2015
Example of Net::SIP and AnyEvent with hanging up caller
View sip-hangup.pl
#!/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;
You can’t perform that action at this time.