Skip to content

Instantly share code, notes, and snippets.

Setting up PC-EFTPOS to work with Virtual PinPad is a P-ITA, so do the following dance, and things might work.

  1. During setup, remember to select "PINPad will be attached..." PINPad will be attached....
  2. In EFT Client UI, change COM Port to TCPIP
  3. Press Stop and relaunch EFT Client UI again
  4. Setup Virtual PinPad https://pceftpos.com/media/KnowledgeBase/How%20To%20Set%20Up%20A%20Virtual%20PINPad%20to%20work%20with%20PC-EFTPOS.pdf
  5. Try changing to 2011 but 2012 should be the correct value. 2011 should be used for sending payment to EFT Client, and 2012 should be used for connecting Virtual PinPad to EFT Client.
    • Using port 2011 can seem to work and you may still be able to see PC_EFTPOS DEMO READY but don't be fooled because sending a transaction amount will be unsuccessful.
  6. You might have to close the virtual pinpad and open it again, until you see PC_EFTPOS DEMO READY.
import re
import sys
from decimal import Decimal
def in_seconds(time_str):
hour, minute = map(int, time_str.split(':'))
return hour * 60 * 60 + minute * 60
def seconds_to_hours(seconds):
return seconds / 60 / 60
node_modules/browserify/bin/cmd.js --standalone bundle --debug main.js -t [ babelify --presets [ env ] --plugins [ mopt ] ] -o $BUNDLE_FILE_NAME
! Caps_Lock behaves as Control_L
remove Lock = Caps_Lock
keysym Caps_Lock = Control_L
add Control = Control_L
! Disable Control_L
keycode 37 = NoSymbol
! Left-handed mouse
pointer = 3 2 1
(defn quote-form [{:keys [floor-plan-update-url floor-plan-create-url] :as urls} data-atom history-atom quote-id db-index search-index variant-search-index after-save]
(let [a (deref data-atom)
q (a :quote)
floor-plan-create-update-url (if quote-id floor-plan-update-url floor-plan-create-url)
field-errors (a :field-errors)
quoted-product-errors ((a :field-errors) "quoted_products")
quote-id ((a :quote) "id")
pdf-list ((a :quote) "pdfs")
client-list (a :clients)
staff-list (a :staffs)
(ns cloject.mithril)
(defn build [l]
(if (vector? l)
(apply js/m
(clj->js (for [i l]
(build i))))
(if (seq? l)
(clj->js (for [i l]
(build i)))
# http://slides.com/robinchew/deck
from collections import defaultdict
from textwrap import dedent
from urllib.parse import urlparse, parse_qs
from wsgiref.util import setup_testing_defaults
from wsgiref.simple_server import make_server
import csv
# http://slides.com/robinchew/deck
from collections import defaultdict
from textwrap import dedent
from urllib.parse import urlparse, parse_qs
from wsgiref.util import setup_testing_defaults
from wsgiref.simple_server import make_server
import csv
import SimpleHTTPServer
import SocketServer
from textwrap import dedent
from urlparse import urlparse, parse_qs
from collections import defaultdict
import csv
import os
import sys
@robinchew
robinchew / beautiful_idiomatic_python.md
Last active May 24, 2016 05:35 — forked from JeffPaine/beautiful_idiomatic_python.md
Transforming Code into Beautiful, Idiomatic Python: notes from Raymond Hettinger's talk at pycon US 2013. The code examples and direct quotes are all from Raymond's talk. I've reproduced them here for my own edification and the hopes that others will find them as handy as I have!

Transforming Code into Beautiful, Idiomatic Python

Notes from Raymond Hettinger's talk at pycon US 2013 video, slides.

The code examples and direct quotes are all from Raymond's talk. I've reproduced them here for my own edification and the hopes that others will find them as handy as I have!

Looping over a range of numbers

for i in [0, 1, 2, 3, 4, 5]: