Skip to content

Instantly share code, notes, and snippets.

FROM ubuntu:18.04
RUN apt-get update && apt-get install -y python3-pip virtualenv
RUN virtualenv -p python3 /env
COPY setup.py /root
RUN . /env/bin/activate && \
cd /root && \
@tgpfeiffer
tgpfeiffer / scaml2html.scala
Created April 2, 2017 09:41
Convert a Docbook-structured Scaml file to single-page/multi-page HTML Raw
// convert the HAML/SCAML layout file to Docbook XML
val engine = new org.fusesource.scalate.TemplateEngine
val output = engine.layout("src/main/docbook/handbook.scaml")
val file = (target in Compile).value / "handbook.xml"
IO.write(file, output)
// create Docbook HTML
import scala.sys.process._
// TODO make this independent of local user's environment
val xsltool = "xsltproc"
@tgpfeiffer
tgpfeiffer / gist:f2512a3fa932b1434ad0
Created December 29, 2014 14:00
Add QR codes to each link
<!-- paste this into the head element of an HTML file to append QR codes to each link -->
<script src="http://code.jquery.com/jquery-1.11.2.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.qrcode/1.0/jquery.qrcode.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("a").each(function(idx, item){
var a = $(item);
var href=a.attr("href");
a.qrcode({
text: href,
@tgpfeiffer
tgpfeiffer / KafkaDoesntShutdown.scala
Created June 5, 2014 09:36
Kafka does not shutdown properly
import org.apache.log4j.{LogManager, Level}
import org.apache.spark.SparkContext
import org.apache.spark.streaming.kafka.KafkaUtils
import org.apache.spark.streaming.{Seconds, StreamingContext}
import scala.concurrent._
import ExecutionContext.Implicits.global
object KafkaDoesntShutdown {
def main(args: Array[String]) {
// get all threads
@tgpfeiffer
tgpfeiffer / SparkExamplesMinimal.scala
Last active August 29, 2015 14:01
ClassNotFoundException when using Mesos
package spark
import org.apache.spark
import org.apache.spark.rdd.RDD
import org.apache.spark.SparkConf
object SparkExamplesMinimal {
def asInt(s: String): Option[Int] = {
try {
Some(Integer.parseInt(s))
@tgpfeiffer
tgpfeiffer / HostAndPath.scala
Created June 6, 2013 07:22
A replacement for S.hostAndPath that takes into account Lift running on a host with a different port and SSL setting than the reverse proxy in front of it.
def realHostAndPath(forceNoSsl: Boolean = false): String =
S.request.flatMap(req => (Box !! req.request).map(r => {
// X-Forwarded-Host contains host *and* port (if not standard)
r.header("X-Forwarded-Host") match {
case Full(hostAndPort) =>
r.scheme match {
case "http" if r.header("X-SSL").isDefined =>
"https://" + hostAndPort + S.contextPath
case "http" if r.header("X_FORWARDED_PROTO") == Full("https") && !forceNoSsl =>
// this (correct) URL is not liked well by Java applets, so we allow to override it
@tgpfeiffer
tgpfeiffer / V.scala
Created April 26, 2013 22:04
Helper object to work around S.?(...) working only within a valid session in Lift.
package code
import java.util.{ResourceBundle, Locale}
import xml.{Node, NodeSeq}
import net.liftweb.util.Helpers.tryo
import net.liftweb.http.{Templates, LiftRules, S}
import net.liftweb.common._
import net.liftweb.util.{BundleBuilder, Helpers, NamedPF, Props}
@tgpfeiffer
tgpfeiffer / MongoSequence.scala
Created April 1, 2013 11:46
A Lift helper class to generate sequential long values when using MongoDB with Record.
package code.model
import net.liftweb.mongodb.BsonDSL._
import net.liftweb.record.field._
import net.liftweb.util.Helpers._
import net.liftweb.common._
import net.liftweb.mongodb.record._
import field._
import com.mongodb.{DBObject, BasicDBObject}
@tgpfeiffer
tgpfeiffer / japanese-full.tex
Last active November 15, 2021 17:57
How to typeset Japanese with advanced features in (Xe)LaTeX.
\documentclass[12pt]{article}
\usepackage{xltxtra, setspace}
%% fonts
% xeCJK options from <http://mesokosmos.blogger.de/stories/1818274/>:
\usepackage[%
boldfont,
CJKnumber,
@tgpfeiffer
tgpfeiffer / basics.feature
Created March 19, 2013 17:17
Lettuce and Lift
Feature: Basic Appearance
Scenario: Loading Front Page
Given I go to "http://localhost:8080"
Then I should see "WorldWide Conferencing"
Scenario: Login fails
Given I go to "http://localhost:8080/user_mgt/login"
When I fill in "username" with "me@privacy.net"
And I fill in "password" with "xyz"