In lieu of actual new content... a quick recap of some good posts from several of my favourite sources:
1. Steve Yegge's excellent post on code, code base size, and perhaps a reason to use rhino - http://steve-yegge.blogspot.com/2007/12/codes-worst-enemy.html
2. Reginald Braithwaite's writings on code style and why clarity is king - http://weblog.raganwald.com/2007/12/golf-is-good-program-spoiled.html
3. Hamlet D'Arcy's humorous article on the detriments of new found functional programming knowledge - http://hamletdarcy.blogspot.com/2009/08/how-to-tell-your-co-workers-have.html
There you have it, just in case you missed 'em the first time around.
Monday, February 21, 2011
Saturday, August 14, 2010
getting reacquainted with javascript
Ok, I'm admittedly a little late to the party here. Lots of people are doing really, really cool things with javascript these days.
So, I've been using rhino to whip together my java experiments lately. Setup is trivial, you just need java and js.jar.
Once you have rhino, all sorts of java-ish things can be whipped up as quick hacks.
A quick http server, for example, goes something like this:
Wait, what about a threaded server you say? Try this on for size.
For more reading about rhino and javascript including how to structure, organize, and manage your code for larger projects, try these great posts.
http://steve-yegge.blogspot.com/2008/06/rhinos-and-tigers.html
http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth
http://peter.michaux.ca/articles/javascript-widgets-without-this
http://www.jspatterns.com/
So, I've been using rhino to whip together my java experiments lately. Setup is trivial, you just need java and js.jar.
- download rhino
- extract js.jar (at least)
- for an interactive shell, run java -jar js.jar
- or run a script using java -jar js.jar some-javascript-file.js
Once you have rhino, all sorts of java-ish things can be whipped up as quick hacks.
A quick http server, for example, goes something like this:
function main() {
var s = new java.net.ServerSocket(8080)
while (true) {
var client = s.accept()
var sc = new java.util.Scanner(client.getInputStream())
var method = sc.next()
var path = '.' + sc.next()
var out = new java.io.PrintWriter(
new java.io.OutputStreamWriter(client.getOutputStream()))
try {
var f = new java.io.FileInputStream(path)
out.println("HTTP/1.1 200 Success")
out.println("Content-Type: text/html")
out.println()
for (var c = f.read(); c != -1; c = f.read())
out.write(c)
} catch (e if e.javaException
instanceof java.io.FileNotFoundException) {
out.println("HTTP/1.1 404 File not found")
out.println("Content-Type: text/html")
out.println()
out.println("<html><body>")
out.println("<h1>File not found</h1>")
out.println("</body></html>")
}
out.flush()
out.close()
}
}
main()
Wait, what about a threaded server you say? Try this on for size.
function main() {
var s = new java.net.ServerSocket(8080)
while (true) {
var client = s.accept()
var t = java.lang.Thread(function() {
var sc = new java.util.Scanner(client.getInputStream())
var method = sc.next()
var path = '.' + sc.next()
var out = new java.io.PrintWriter(
new java.io.OutputStreamWriter(client.getOutputStream()))
try {
var f = new java.io.FileInputStream(path)
out.println("HTTP/1.1 200 Success")
out.println("Content-Type: text/html")
out.println()
for (var c = f.read(); c != -1; c = f.read())
out.write(c)
} catch (e if e.javaException
instanceof java.io.FileNotFoundException) {
out.println("HTTP/1.1 404 File not found")
out.println("Content-Type: text/html")
out.println()
out.println("<html><body>")
out.println("<h1>File not found</h1>")
out.println("</body></html>")
}
out.flush()
out.close()
}
)
t.start()
}
}
main()
For more reading about rhino and javascript including how to structure, organize, and manage your code for larger projects, try these great posts.
http://steve-yegge.blogspot.com/2008/06/rhinos-and-tigers.html
http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth
http://peter.michaux.ca/articles/javascript-widgets-without-this
http://www.jspatterns.com/
Sunday, August 8, 2010
reading files in java
Just came across this aging, but still surprisingly relevant analysis of reading files in java. Basically compares the relative performance of several common (and some newer, lesser known) file reading methods... quite interesting.
emergency lisp
Keep this excellent lisp post handy. It is perhaps a little dated, but only in terms of the actual date of the post. It provides a good introduction to lisp programming, especially when transitioning from another, less functional language. Even though it deals specifically with emacs lisp, the concepts are close enough. Definitely useful the next time a co-worker needs convincing using clojure.
Wednesday, August 4, 2010
your test suite is broken
Take the quiz and fess up if your test suite is broken. Remember, test suites are software too, and as software, they need maintenance and upkeep just like the rest of the code your write.
Tuesday, August 3, 2010
looking forward to 2.6.35
Based on the changelog and this writeup, the latest linux kernel release appears to be pretty power-packed. I'm particularly looking forward to the performance improvements around spreading network load across cpu cores.
On a slightly related note, I find the whole kernel code shepherding process amazing. How many managers have the ability to rattle off the number of post-release-candidate commits (with averages and comparisons against previous release candidates)? Never mind the whole staging and merging process. I think many software teams could learn quite a bit about managing the development process across distributed teams by letting go of centralized source control and watching the linux kernel developers.
On a slightly related note, I find the whole kernel code shepherding process amazing. How many managers have the ability to rattle off the number of post-release-candidate commits (with averages and comparisons against previous release candidates)? Never mind the whole staging and merging process. I think many software teams could learn quite a bit about managing the development process across distributed teams by letting go of centralized source control and watching the linux kernel developers.
Monday, August 2, 2010
nice perl tip
I just came across this excellent perl tip. I'm not sure I'd use it exactly as written, but the idea of being able to open perl modules by module name instead of file name is certainly appealing. Now, to figure out how to apply this to other languages too.
Subscribe to:
Posts (Atom)