Skip to content

Instantly share code, notes, and snippets.

@soheilhy
soheilhy / queue.go
Last active August 29, 2015 14:25
An incomplete, inefficient implementation of EnQHanlder.Rcv
const (
// Dictionary names.
active = "active"
dequed = "dequed"
)
func (h EnQHandler) Rcv(msg beehive.Msg, ctx beehive.RcvContext) error {
// TODO: assign a unique ID.
enq := msg.Data().(Enque)
@soheilhy
soheilhy / queue.go
Last active August 29, 2015 14:25
Skeleton of EnQHandler
import (
"github.com/kandoo/beehive"
)
// EnQHandler handles Enque messages.
type EnQHandler struct{}
func (h EnQHandler) Rcv(msg beehive.Msg, ctx beehive.RcvContext) error {...}
func (h EnQHandler) Map(msg beehive.Msg, ctx beehive.MapContext) beehive.MappedCells {...}
@soheilhy
soheilhy / ring.go
Last active August 29, 2015 14:25
Task ring buffer
// TaskRing is an efficient, gob-compatible ring buffer for Tasks.
// TaskRing always wastes one element.
type TaskRing struct {
...
Stats Stats
}
// Stats represents the statistics of the task ring buffer.
type Stats struct {
Deque uint64 // Deque represents the total nubmer of dequeued tasks.
@soheilhy
soheilhy / queue.go
Last active August 29, 2015 14:24
Messages in taskq
// Enqueue enqueus a task.
type Enque struct {
Task // The task to be enqueued.
}
// Deque represents a message emitted to dequeue a task from a queue.
type Deque struct {
Queue // The queue to dequeue a task from.
}
@soheilhy
soheilhy / queue.go
Last active August 29, 2015 14:23
Basic structures in taskq
// Queue represents a named queue.
type Queue string
// Task represents a task in a queue.
type Task struct {
ID uint64 `json:"id"` // Task's globally unique ID assigned by taskq.
Queue Queue `json:"queue"` // Task's queue.
Body []byte `json:"body"` // Task's client data.
}
@soheilhy
soheilhy / mochatutorial.md
Last active March 18, 2022 05:23
Mocha Tutorial

Testing Node.JS applications using Mocha

Mocha is a unittest framework for Node. In this document, we explain how you can test your javascript code and also your HTTP servers.

Installing Mocha

Use npm to install Mocha:

npm install mocha

MongoDB + NodeJS Tutorial

Prerequisites

  • You have node.js and npm installed on your machine.
  • If you use CDF:
    • Use bash or zsh as your shell.
    • Make sure npm installs packages locally as you don't have root permissions. To do so, you can edit ~/.npmrc and add the following line:
      • prefix=$NODE_HOME
    • $NODE_HOME is the directory in which you have installed node.js.
@soheilhy
soheilhy / nginxproxy.md
Last active March 22, 2024 08:54
How to proxy web apps using nginx?

Virtual Hosts on nginx (CSC309)

When hosting our web applications, we often have one public IP address (i.e., an IP address visible to the outside world) using which we want to host multiple web apps. For example, one may wants to host three different web apps respectively for example1.com, example2.com, and example1.com/images on the same machine using a single IP address.

How can we do that? Well, the good news is Internet browsers

var http = require('http');
var hello = function(req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write('Hello! <br />');
res.write('<br />' +
'URL:' + req.url + '<br />' +
'Method:' + req.method + '<br />');
};
@soheilhy
soheilhy / gist:3077008
Created July 9, 2012 14:56
A generic routing service
class RoutingService[REQUEST <: Request, RESPONSE](
val routes: PartialFunction[Request, Service[REQUEST, RESPONSE]])
extends Service[REQUEST, RESPONSE] {
protected[this] val requestToService = routes
def apply(request: REQUEST): Future[RESPONSE] = {
val service = requestToService(request)
service(request)
}