Engineering

My AWE 2013 Talk is Online

RealityPrimeFri, 06/14/2013 - 02:52

Categories:

Engineering

Next time, I’ll wear sunglasses so I can see the audience. Damn those lights were bright…

I had to cut out most of the jokes due to the 15 minute time limit, but I thought I at least got to the main points and finished right on the nose. Next year, I’ll even figure out how to not say “um.”

Slides are here

Verge Article on AWE 2013

RealityPrimeSun, 06/09/2013 - 19:35

Categories:

Engineering

Here’s a great* Verge article on the AWE 2013 conference that wrapped up last week. I had the honor of speaking, along with a number of my co-workers. Although, as Tish points out, we’re not actually doing AR at Syntertainment, we’re very passionate about the field as one of several key enabling technologies.

In the shadow of Google Glass, an augmented reality industry revs its engines | The Verge.

* yes, of course mentioning me positively supports my opinion of your article, even if you get my name slightly wrong.

CFP: ACM High Integrity Language Technology (HILT 2013) due June 29th; conference in Pittsburgh Nov. 10-14

Lambda the UltimateThu, 06/06/2013 - 16:08

Categories:

Engineering

The deadline is June 29th (less than 4 weeks away) for submitting papers to the annual ACM conference on High Integrity Language Technology (HILT 2013). The conference will be in Pittsburgh November 10-14, in close proximity to the Software Engineering Institute and CMU. We have four great keynotes/invited speakers for this conference (Jeannette Wing, Ed Clarke, John Goodenough, and Michael Whalen), several interesting tutorials (on SMT solvers, Model Checking, etc.), and we are expecting some great papers as well (so get cracking!).

Conference website is:

http://www.sigada.org/conf/hilt2013

PDF Call for papers is at:

http://www.sigada.org/conf/hilt2013/HILT2013-CFP.pdf

-Tucker Taft
Program Chair, HILT 2013

The Three Laws of Programming Language Design

Lambda the UltimateFri, 05/31/2013 - 13:26

Categories:

Engineering

Joe Armstrong(of Erlang) while reviewing Elixir(Ruby like language that compiles to Erlang Virtual Machine) states his Three Laws of Programming Language Design.

  • What you get right nobody mentions.
  • What you get wrong, people bitch about.
  • What is difficult to understand you have to explain to people over and over again.

Some language get some things so right that nobody ever bothers to mention them, they are right, they are beautiful, they are easy to understand.

The wrong stuff is a bitch. You boobed, but you are forgiven if the good stuff outweighs the bad. This is the stuff you want to remove later, but you can’t because of backwards compatibility and some nitwit has written a zillion lines of code using the all the bad stuff.

The difficult to understand stuff is a real bummer. You have to explain it over and over again until you’re sick, and some people never get it, you have to write hundred of mails and thousands of words explaining over and over again why this stuff means and why it so. For a language designer, or author, this is a pain in the bottom.

Piccolo in Go

BitworkingTue, 05/21/2013 - 00:11

Categories:

Engineering

Piccolo has been ported to Go. The original Python script is still in place, but will no longer be updated. This entry is the first one published with the new picc.go.

Here's a speed comparison between the Python and the Go code for a full republish, i.e. every HTML file needs to be rewritten. First for the old Python code:

$ ./bin/piccolo real 0m57.491s user 0m46.415s sys 0m1.312s

And now the Go code:

$ ./bin/picc real 0m4.460s user 0m1.588s sys 0m1.096s

And incremental publishing is under a second:

$ ./bin/picc real 0m0.476s user 0m0.404s sys 0m0.068s

Note that incremental isn't a very good description since the program is still parsing close to 1,000 XML files in that last run. I obviously have some performance improvements I can make.

Google.io 2013

RealityPrimeThu, 05/16/2013 - 04:26

Categories:

Engineering

I watched Brian and company demo the new Google Maps stuff on Google.io video today and was very impressed. I’ll hopefully get my trial activated soon to check it out live. But it’s clearly a great step in the “personal maps” direction that Michael and i were dancing around.

The most impressive thing though is how well Google Earth has been integrated into the fabric of maps. This was our greatest hope, back when Keyhole was acquired.

It all comes full circle, I guess. Back in 2000, we wanted to build a ubiquitous 3D geo browser for an augmented world of connected content. In 2012, it’s the evolved browser that can host what had to be a standalone app or relatively unsafe ActiveX control back then.

The “augmented world” part is still to come, I figure, but one VP did let slip  that they truly understand the importance of Geo to Google and everyone — having a perfect digital copy of the world is necessary for all sorts of services one might build on top. So the value goes way beyond sightseeing and directions.

It’s also kind of humorous to note that the very first version of the globe I helped write had nice day/night shadow cycles, stars, the moon, dynamic clouds, and highly interactive labels. It was truly beautiful. But of that list, only the dynamic labels survived to launch, since someone high up in our company (who shall remain nameless) thought that the extra photo-realism took away from the “mappiness” and utility of the app. Again, it’s come full circle. Earth was and should always be about the beauty and awe inspiring power of the real world.

Terra: A low-level counterpart to Lua

Lambda the UltimateWed, 05/15/2013 - 08:38

Categories:

Engineering

A very interesting project developed by Zachary DeVito et al at Stanford University:

Terra is a new low-level system programming language that is designed to interoperate seamlessly with the Lua programming language:

-- This top-level code is plain Lua code. print("Hello, Lua!") -- Terra is backwards compatible with C -- we'll use C's io library in our example. C = terralib.includec("stdio.h") -- The keyword 'terra' introduces -- a new Terra function. terra hello(argc : int, argv : &rawstring) -- Here we call a C function from Terra C.printf("Hello, Terra!\n") return 0 end -- You can call Terra functions directly from Lua hello(0,nil) -- Or, you can save them to disk as executables or .o -- files and link them into existing programs terralib.saveobj("helloterra",{ main = hello })

Like C, Terra is a simple, statically-typed, compiled language with manual memory management. But unlike C, it is designed from the beginning to interoperate with Lua. Terra functions are first-class Lua values created using the terra keyword. When needed they are JIT-compiled to machine code.

Seems as if the target use case is high-performance computing. The team has also released a related paper, titled Terra: A Multi-Stage Language for High-Performance Computing:

High-performance computing applications, such as auto-tuners and domain-specific languages, rely on generative programming techniques to achieve high performance and portability. However, these systems are often implemented in multiple disparate languages and perform code generation in a separate process from program execution, making certain optimizations difficult to engineer. We leverage a popular scripting language, Lua, to stage the execution of a novel low-level language, Terra. Users can implement optimizations in the high-level language, and use built-in constructs to generate and execute high-performance Terra code. To simplify meta-programming, Lua and Terra share the same lexical environment, but, to ensure performance, Terra code can execute independently of Lua’s runtime. We evaluate our design by reimplementing existing multi-language systems entirely in Terra. Our Terra-based auto-tuner for BLAS routines performs within 20% of ATLAS, and our DSL for stencil computations runs 2.3x faster than hand-written C.

Lisp in Summer Projects

Lambda the UltimateMon, 05/06/2013 - 20:55

Categories:

Engineering

This summer, spend some quality time with your favorite technology in our 2013 summer programming contest!

The Lisp community is awarding prizes for demonstrating interesting and useful programs, technologies and art using any LISP-based technology.

Lisp, prizes, what's not to like?

Jobs

RealityPrimeSun, 05/05/2013 - 17:29

Categories:

Engineering

Just a quick note for those who follow my blog. I will try to post more often now that I’ve emerged in my new role at Syntertainment as co-founder, CTO/CPO and interim CEO. Will is naturally Chief Creative Officer.

In my previous stint at Amazon, I was limited in what I could speak about publicly, for company PR reasons. Ironically, my project (next gen tablet shopping experiences) was not nearly as secretive as my work at Microsoft had been. But then again, no one at Amazon tried to fire me for speaking my mind… You’ll hopefully see some of those cool projects announced by their respective owners.

Mostly, I wanted to open an invite for people who know what kind of things I love to work on to come join us at Syntertainment. We’re looking for a few more superstars to join the early team, with the perks and challenges that entails.

What can I say? We’re developing an entirely new kind of game, which will add some new ways of thinking about the world; and like SimCity and The Sims, likely inspire an entire genre after the fact. It’s a unique opportunity full of fun and adventure, with challenges few dare to take on.

We won’t be providing more details publicly yet, but for those who love the startup life, now is the best time to make the leap and effectively be your own boss on an equally self-motivated team.

I’m personally having a blast.

Typesafe Activator

Lambda the UltimateTue, 04/30/2013 - 23:30

Categories:

Engineering

A new addition to the Typesafe Platform is Activator, a unique, browser-based tool that helps developers get started with Typesafe technologies quickly and easily. Getting started is a snap; just download, extract and run the executable to start building applications immediately via the easy to use wizard based interface. Common development patterns are presented through reusable templates that are linked to in-context tutorials which explain step-by-step exactly how things work. The Activator environment supports each stage of the application development lifecycle: Code, Compile, Run, and Test. At the appropriate time, Activator can generate fully-fledged projects for the leading IDE's so that application development can continue in these environments.

You can download Activator here.

Truth be told, the web site has too much hype and not enough details for my tastes. Had I not known about some of the technologies behind the Typesafe Platform I wouldn't go past the first page. Hopefully this side of things will be improved. People developing in Scala might want to share their experiences in the comments.

John C. Reynolds, 1935-2013

Lambda the UltimateMon, 04/29/2013 - 14:50

Categories:

Engineering

Randy Bryant, dean of the school of computer science at CMU, sent out an email saying that John C. Reynolds passed away yesterday.

Subject: In Memoriam. John Reynolds, June 1, 1935 - April 28, 2013
Date: Sun, 28 Apr 2013 21:45:12 -0400
From: Randy Bryant
To: scs-all@cs.cmu.edu

I'm sorry to announce that John Reynolds, a long-time member of our computer science faculty, passed away early this morning. Many of you know that John had been in declining health recently. We were able to celebrate his retirement him last summer. He had a heart attack last week and went downhill over a period of several days.

John got his PhD in 1961 in theoretical physics, but while working at Argonne National Laboratory came to realize that his passion was for computation. He became a very successful computer scientists, focusing on the logical foundations of programs and programming languages. He was at Syracuse University from 1970 to 1986 and then joined the CSD faculty.

John has made many important contributions over his career. Interestingly, his 2002 work on separation logic, done jointly with Peter O'Hearn and others, has been especially prominent. Separation logic provides a formal way to reason about what we might think of as "normal programs," i.e., ones that operate by changing the values stored in memory, but where memory is partitioned into independent blocks, and so we can reason about different program components independently. I can only hope that the work I do at age 67 would be counted among my best!

We will also remember John for this cheerful spirit, his high ethical standards, and his deep intellect. He will very much be missed.

Randy Bryant

It's probably impossible to overstate the impact that John had on the field of programming languages. But beyond being a great scholar, he was also a generous mentor and a fundamentally decent and kind human being. He will indeed very much be missed.

Teaching Garbage-Collection

Lambda the UltimateSun, 04/14/2013 - 12:37

Categories:

Engineering

Teaching garbage collection by implementing GCs can imply heavy curricular dependencies. We've worked at shrinking them so the material can be used in any number of contexts, and this material is being used by several universities that use PLAI. We have a pedagogic paper about our approach, which we've summarized in a blog post (with a link to the full paper).

Virgil: a statically-typed language balancing functional and OO features

Lambda the UltimateThu, 04/11/2013 - 21:47

Categories:

Engineering

In PLDI this year: Ben Titzer, "Harmonizing Classes, Functions, Tuples, and Type Parameters in Virgil III" [pdf]

Given a fresh start, a new language designer is faced with a daunting array of potential features. Where to start? What is important to get right first, and what can be added later? What features must work together, and what features are orthogonal? We report on our experience with Virgil III, a practical language with a careful balance of classes, functions, tuples and type parameters. Virgil intentionally lacks many advanced features, yet we find its core feature set enables new species of design patterns that bridge multiple paradigms and emulate features not directly supported such as interfaces, abstract data types, ad hoc polymorphism, and variant types. Surprisingly, we find variance for function types and tuple types often replaces the need for other kinds of type variance when libraries are designed in a more functional style.

Gone to Plaid

RealityPrimeMon, 04/08/2013 - 06:04

Categories:

Engineering

Well, I finally did it. I went and left a perfectly good corporate space ship for a tiny winnebago. I can honestly say that for the first time in at least a decade, I’m truly excited (not just enthusiastic) about what I’m working on.

I can’t yet say what this new startup is doing or even what it’s called, except to say that it’ll be a whole new kind of game, developed with some of the people I most respect and admire in the industry.

In fact, it’s a chance to work with one person in particular that I’ve wanted to work with for over 20 years, to be a co-founder, CTO, and even interim CEO while we find just the right person to manage the business side of things long-term.

The design side is already well-covered. We need a few more world-class technologists to join up next.

 

It's Alive! Continuous Feedback in UI Programming

Lambda the UltimateThu, 04/04/2013 - 04:31

Categories:

Engineering

A paper by Burckhardt et al that will appear at PLDI 2013. Abstract:

Live programming allows programmers to edit the code of a running program and immediately see the effect of the code changes. This tightening of the traditional edit-compile-run cycle reduces the cognitive gap between program code and behavior, improving the learning experience of beginning programmers while boosting the productivity of seasoned ones. Unfortunately, live programming is difficult to realize in practice as imperative languages lack well-defined abstraction boundaries that make live programming responsive or its feedback comprehensible.

This paper enables live programming for user interface programming by cleanly separating the rendering and non-rendering aspects of a UI program, allowing the display to be refreshed on a code change without restarting the program. A type and effect system formalizes this separation and provides an evaluation model that incorporates the code update step. By putting live programming on a more formal footing, we hope to enable critical and technical discussion of live programming systems.

Subscribe to The Universal Pantograph aggregator - Engineering