@Grapes(
@Grab(group='net.sourceforge.jregex', module='jregex', version='1.2_01')
)
import jregex.*
//http://jregex.sourceforge.net/gstarted-advanced.html#imatching
String userNameChars="[\\w.\\-]+" //letters, dots, hyphens
String alphaNums="\\w+"
String dot="\\."
Pattern email=new Pattern(userNameChars + "@" + "(?:"+ alphaNums + dot + ")*" + alphaNums)
List ls = ['s@1.com','2@3.com','howdy@d.']
ls.each {
println email.matcher(it).matches()
}
Pattern re=new Pattern("\\d\\d:\\d\\d") //two digits + colon + two digits
println("Pattern: "+re)
Matcher m=re.matcher()
test(m,"") // true
test(m,"1") // true
test(m,"12") // true
test(m,"1:2") // true
test(m,"12:") // true
test(m,"12:1") // true
test(m,"12:12") // true
test(m,"12:123") // true
test(m,"1:") // false
test(m,"123:1") // false
void test(Matcher m1, String s) {
m1.setTarget(s)
println("\""+s+"\" : "+m1.matchesPrefix()) //note: .matchesPrefix()
}
////*Pure Java/Groovy*////
//credit: http://glaforge.appspot.com/article/incomplete-string-regex-matching
List inp = [
/12:/,/12:1/,/1/,/12:12/ //trues
,/1:/,/123:1/ //falses
]
inp.each {
def matcher = it =~ /\d{2}:\d{2}/
println matcher.matches() || matcher.hitEnd()
}
println 'done'
Wednesday, March 28, 2012
JRegex
Sunday, March 4, 2012
Thread Pools
import java.util.concurrent.Callable
import java.util.concurrent.Executors
long ts // timer
def pool = Executors.newFixedThreadPool(THREADS)
def defer = { c -> pool.submit(c as Callable) }
//PLAIN//////////////////////////////////////////
ts = (new Date().time)
doit = { n ->
def left = { def slp = Math.random()*n*1000+500l as Long; Thread.sleep(slp); println Thread.currentThread().name + '!!left!!'+slp }()
def right = { def slp = Math.random()*n*1000+500l as Long; Thread.sleep(slp); println Thread.currentThread().name + '!!right!!'+slp }()
}
(1..3).each{ n -> println "n=$n => ${doit(n)}" }
println ((new Date().time)-ts)
//POOLED//////////////////////////////////////////////
ts = (new Date().time)
THREADS = 3
fib = { n ->
def left = defer{ def slp = Math.random()*n*1000+500l as Long; Thread.sleep(slp); println Thread.currentThread().name + '!!left!!'+slp }
def right = defer{ def slp = Math.random()*n*1000+500l as Long; Thread.sleep(slp); println Thread.currentThread().name + '!!right!!'+slp }
}
(1..3).each{ n -> println "n=$n => ${fib(n)}" }
pool.shutdown()
while(!pool.isTerminated()) { Thread.sleep(100) }
println ((new Date().time)-ts)
//FIB//////////////////////////////////////////////////
println "Calculating Fibonacci sequence in parallel..."
CUTOFF = 12 // not worth parallelizing for small n
THREADS = 10
serialFib = { n -> (n < 2) ? n : serialFib(n-1) + serialFib(n-2) }
fib = { n ->
if (n < CUTOFF) return serialFib(n)
def left = defer{ println Thread.currentThread().name; fib(n-1) }
def right = defer{ println Thread.currentThread().name; fib(n-2) }
left.get() + right.get()
}
(11..16).each{ n -> println "n=$n => ${fib(n)}" }
pool.shutdown()
Thursday, March 1, 2012
Jetty server
//src: http://www.redtoad.ca/ataylor/2012/02/simple-servlets-in-groovy/
@Grab(group='org.mortbay.jetty', module='jetty-embedded', version='6.1.26')
import org.mortbay.jetty.Server
import org.mortbay.jetty.servlet.*
import groovy.servlet.*;
import javax.servlet.http.*;
import javax.servlet.ServletConfig;
class SimpleGroovyServlet extends HttpServlet {
def requestHandler
def context
void init(ServletConfig config) {
super.init(config)
context = config.servletContext
}
void service(HttpServletRequest request, HttpServletResponse response) {
requestHandler.binding = new ServletBinding(request, response, context)
use (ServletCategory) {
requestHandler.call()
}
}
static void run(int port, Closure requestHandler) {
def servlet = new SimpleGroovyServlet(requestHandler: requestHandler)
def jetty = new Server(port)
def context = new Context(jetty, '/', Context.SESSIONS)
context.addServlet(new ServletHolder(servlet), '/*')
jetty.start()
}
}
SimpleGroovyServlet.run(8080) { ->
response.contentType = 'text/plain'
println "hello world!"
println "my path is ${request.pathInfo}"
println "my params are $params"
}
//also try: groovy -l 8080 -e "println 'hello world'"
//alternate: https://github.com/groovypp/gretty/wiki/Getting-Started
Subscribe to:
Comments (Atom)