Skip to content

Instantly share code, notes, and snippets.

View dmitric's full-sized avatar

Dmitri Cherniak dmitric

View GitHub Profile
@dmitric
dmitric / blurb.m
Created August 29, 2012 22:02
Native like iOS scrolling in WebView
self.webView.scrollView.decelerationRate = 0.994f;
@dmitric
dmitric / backend.py
Created March 24, 2012 18:06
SqlAlchemy usage with tornado backend
class Backend(object):
def __init__(self):
engine = create_engine("mysql://{0}:{1}@{2}/{3}".format(options.mysql_user, options.mysql_pass, options.mysql_host, options.mysql_db)
, pool_size = options.mysql_poolsize
, pool_recycle = 3600
, echo=options.debug
, echo_pool=options.debug)
self._session = sessionmaker(bind=engine)
@classmethod
@dmitric
dmitric / base_wepay.html
Created January 8, 2012 00:42
WePay Asynchronous Client on top of tornado
{% extends "base.html" %}
{% block page_title %} - Buy Goods {% end %}
{% block head %} <script type="text/javascript" src="https://stage.wepay.com/js/iframe.wepay.js"></script> {% end %}
{% block page_content %}
<div id="checkout"></div>
{% end %}
{% block js %}
WePay.iframe_checkout("checkout", "{{checkout["checkout_uri"]}}");
#add this to your base handler class
def write_error(self, status_code, **kwargs):
error_trace = None
if self.settings.get("debug") and "exc_info" in kwargs:
import traceback
error_trace= ""
for line in traceback.format_exception(*kwargs["exc_info"]):
error_trace += line
self.render("base_error.html", status_code=status_code, error_trace=error_trace)
@dmitric
dmitric / MapBackedBeanUsage.groovy
Created September 29, 2011 07:46
MapBackedBeanUsage
def mappings = [
[csvProperty: "item name", classProperty: "name"],
[csvProperty: "cost in $", classProperty: "cost", conversion: CSVBeanBuilder.STRING_TO_DOUBLE],
[csvProperty: "count", classProperty: "itemCount", conversion: CSVBeanBuilder.STRING_TO_INT],
[csvProperty: "date", classProperty: "purchaseDate", conversion: CSVBeanBuilder.STRING_TO_DATE],
]
CSVBeanBuilder.loadAs(MapBackedBean.class, csvText, mappings).each {
transaction ->
assert(transaction.name == transaction.getName() && transaction.getName() == transaction["name"] )
@dmitric
dmitric / UsingCSVBeanBuilder.groovy
Created September 29, 2011 07:00
CSVBeanBuilder Example Usage
//The class we need
class Transaction {
String name
int itemCount
double cost
Date purchaseDate
}
//our conversion closures
def stringToDouble = {
@dmitric
dmitric / MapBackedBeanTest.groovy
Created September 28, 2011 19:52
MapBackedBeanTest
import org.junit.Test
import static org.junit.Assert.*
import org.junit.Before
class MapBackedBeanTest {
private MapBackedBean mbb
@Before
@dmitric
dmitric / CSVBeanBuilder.groovy
Created September 28, 2011 19:21
CSVBeanBuilder
class CSVBeanBuilder {
public static final Closure STRING_TO_DOUBLE = { token ->return Double.parseDouble(token)}
public static final Closure STRING_TO_INT = { token ->return Integer.parseInt(token)}
public static final Closure STRING_TO_DATE = { token -> return new Date(java.sql.Date.valueOf(token).time)}
def static loadAs(Class clazz, String csv, conversions){
def results = []
def headers = [:]
csv.eachLine { line, lineNumber ->
@dmitric
dmitric / MapBackedBean.groovy
Created September 28, 2011 16:04
MapBackedBean
class MapBackedBean implements GroovyInterceptable {
private Map map = [:]
def invokeMethod(String name, args){
if (name == "putAt"){
map[args[0]] = args[1]
} else if (name == "getAt"){
return map[args[0]]
} else if (args.size() > 1 || name.length() <= 3){
@dmitric
dmitric / base.html
Created September 26, 2011 06:40
Alerts in base.html
<div id="content">
{% block alerts %}
{% try %}
{% if alerts is not None %}
{% for alert in alerts %}
<div class="{{alert.get('level', 'alert') }}">
{{ alert.get('content') }}
</div>
{% end %}
{% end %}