Skip to content

Instantly share code, notes, and snippets.

@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,
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 / 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 / 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 / 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"
@tgpfeiffer
tgpfeiffer / EndlessList.scala
Last active October 3, 2016 15:25
AJAX loading of new items in Lift (with Non-AJAX fallback)
class EndlessList {
/**
* Gets a "page" (e.g., 10 items) of content entities from the database.
*/
def getPage(page: Int): (Seq[Content], Boolean) = {
val realPage: Int = if (page < 1) 1 else page
val limit = 10
val contents = Content.findAll(
(/* conditions */),
@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 / LocalizedLink.scala
Created February 20, 2013 21:55
An extended Link for the use of a single Loc for multiple languages.