Taking a job at MS

July 18th, 2008

So… next week, I start a contract with Microsoft in Redmond. I’ll be working on what seems like a fun project. I’ve enjoyed working at CarDomain for the last four months. Fun projects, a cohesive group, neat technology. I’m mostly moving on because a) I’ve been writing web pages for a long time and want to try something else and b) the commute will be much easier and I’ll get to drive in with Hannah!

I’m looking forward to being able to play with some of the fancy internal toys that I’ve heard so much about. Someone told me yesterday that even the folks who were hardcore MS haters love their job there. I’m certainly not a hater. Perhaps skeptical, but not a hater. I figure I’ll learn a bunch of fun new things even in the worst case scenario.

Anyway. Now that the various colliertech.org bits are functioning again, I thought I’d write something.

The Cretins

May 4th, 2008

My brother’s motorcycle club, The Cretins, recently had an article published about them in the Seattle PI. They even quoted him. I didn’t realize he was the president of the club. The rumor goes that he missed a meeting, and wasn’t there to defend himself.

An update

April 21st, 2008

I don’t really have anything really exciting to report, so y’all get to listen to me blather. And after all, that’s what blogs are for anyway, right?

Zelda is turning 11 months old this month. This is still my favorite picture:
http://www.flickr.com/photos/98082317@N00/1579956738/

I have been dishonorably discharged from Amazon. It seems that I am incompetent. It might have had something to do with slipping a note under the CEO’s door, though. But I have no proof of that, so let’s assume it was an un-related event. Being a nutjob doesn’t necessarily get one booted from employment. I think I can prove that.

My friends were very supportive during my short stint of unemployment:


18:32 <@drgone> how’s being fired?
18:32 < cj_> drgone: I made money by being fired.  isn’t that great?
18:32 <@drgone> rock on
18:32 <@drgone> gotta love hush money
20:13 <@btm> cj: where you working now?
20:56 < cj_> btm: cardomain.com

I went to lunch with a couple of friends from #mono today. That references earns me the right to spam the monologue folks (hi everyone!). benjoldersma, his friend [Ian] and I went to an Indian place in Fremont. I was hoping that RevFry would come, too, but he is lame.

We talked about the Seattle Mono Users’ Group (all four of us), Prebuild, the DLR, my hopes of getting a gig at Microsoft to implement Perl6 on the DLR, IKVM, GTK#, gtk+, XAML, WPF, Moonlight, Ubuntu, and other stuff, I’m sure.

I’m working at cardomain.com on contract. It’s fun. The people there seem smart and interested in what they’re doing. Their development infrastructure makes me happy. The fact that their devs do automated testing also makes me happy. The fact that I have LoS to the Westin makes me happy. The parking situation rains on my parade.

Speaking of the Westin, I let down my friends with whom I co-locate. I was unable to run to the rack when one of the servers needed love and attention. It cost the other folks quite a bit of revenue. Allow me to apologize publicly. I’m sorry folks. I’m doing what I can to reduce the risk of this happening again. I hope I can make it up to you.

Hannah got a job at Microsoft working on the Surface team.

And with that, I will select some categories… thanks for tuning in :)

does anyone else feel forced to produce crap?

March 30th, 2008

Management wants MORE RESULTS NOW NO MATTER WHAT THE COST!!!!!

I feel like the world is telling me to give them more crap, less useful code!

Does anyone else feel like business requirements are forcing them to produce lots of fluff rather than small amounts of quality content? Should I be concerned? Should I care that the business is focusing on high output in the short term in exchange for low output in the long term?

I’ve been told to quit trying to fix problems and to focus on what my manager wants, whether or not it means breaking the system for investors. This seems like a self-serving way to look at the world. If I were concerned with my family’s status in the world over the stockholders, I would totally go for it.

But my conscience is getting in the way. Could someone recommend a way for me to slay my concern for humanity so that I can think like management and care less about the welfare of the world?

KTHXBI

IKVM basics

February 15th, 2008

So, I’m not much of a java guy, but I need to know how to get at the CLI, given a java interface.

Let’s assume for brevity that one has an ubuntu machine available:

$ sudo apt-get install ikvm ikvm-native icepick icepick-gcj
....
$ mkdir hello-ikvm && cd hello-ikvm
$ cat > hello.java
class hello
{
  public static void main(String args[])
  {
    System.out.println("Hello, world!");
  }
}
^D
$ icepick-javac hello.java
$ ls
hello.class  hello.java
$ jar cvf hello.jar hello.class
$ ls
hello.class  hello.jar  hello.java
$ ikvm hello
Hello, world!

Okay, now we can run java bytecode on the IKVM virtual machine. yay. So what? On to the interesting bits.

$ ikvmstub mscorlib
...
$ ls
hello.class  hello.jar  hello.java  mscorlib.jar
$ cat > helloCLI.java
import cli.System.Console;

class helloCLI
{
    public static void main(java.lang.String args[])
    {
        Console.WriteLine("Hello, world!");
    }
}
^D
$ ls
hello.class  hello.jar  hello.java  helloCLI.java  mscorlib.jar
$ icepick-javac -classpath mscorlib.jar helloCLI.java
$ ls
hello.class  hello.jar  hello.java  helloCLI.class  helloCLI.java  mscorlib.jar
$ ikvmc -reference:mscorlib helloCLI.class
$ ls
hello.class  hello.java      helloCLI.exe   mscorlib.jar
hello.jar    helloCLI.class  helloCLI.java
$ mono helloCLI.exe
Hello, world!

The end. I need to pick up Scarlet now.

Perl 6 on the CLI via DLR; A summary

January 31st, 2008

My goal in attending this year’s Lang.NET Symposium was to determine whether the Common Language Infrastructure (CLI) is a viable platform on which the Perl 6 language can be implemented.  During the talks, I took notes in my blog (Monday, Tuesday, Wednesday) and on my wiki (Monday, Tuesday, Wednesday).

Since I’ve not historically been much of a compiler guy, and since I don’t know what type of human power is available to perform such an implementation, I can’t say with any level of assurance whether or not targeting the CLI is feasible by the Perl 6 community. However, based on my limited understanding, it seems like it can be done. There has been a lot of work done by the IronPython and IronRuby teams to make implementing so-called "dynamic" languages (interpreted languages, languages with an eval() mechanism) as painless as possible. Based on conversations with Jim Hugunin, the primary developer of IronPython and one of the core developers of the DLR, I believe that the Perl 6 language would be welcomed with open arms by the CLI and DLR development communities, if interest exists in leveraging these technologies.

Microsoft has published the source to both IronPython and IronRuby, along with the Dynamic Language Runtime (DLR) libraries under the OSI-approved, bsd-style "Ms-PL" license.  The DLR contains implementations of many features common between dynamic languages, and could be leveraged to implementat a Perl 6 runtime on top of the Common Language Infrastructure.

The open issues remaining involve some questions which had been brought up by Larry Wall prior to the conference:

[One] interesting question is how hard it’ll be to at least emulate continuations for purposes of pattern matching and logic programming; and whether that forces Perl 6 to keep its own runloop.

Another interesting question is the extent to which we can make their exception model fail-soft in a way that works well [with] parallel programming.  you don’t want to be unwinding the whole stack merely because one element out of your million element hyperoperation turned out to be undefined….  unwinding the stack should be the last resort, and then only when you already know where you’re unwinding it to.

Another question is on porting to the CLI is whether it can support STM efficiently.

Based on my limited understanding of the subject, it seems that continuations, fail-soft exceptions and STM would need to be implemented as extensions to the CLI by way of the DLR.

According to Larry, “Perl 6 tries to dance right on the edge of requiring continuations without actually doing so, which opens up many opportunities for doing something more efficient than continuations most of the time.” This seems as if it will mesh better with the current DLR users’ world. When speaking with Jim Hugunin, it sounded as if he would prefer to avoid including support for continuations in the DLR. He mentioned that the Ruby spec has removed continuations, which leaves Perl 6 as the only modern language with the feature.

The way I see it, these features can be implemented in a slow-but-existing manner initially. As common use cases emerge, the system can be optimized. I once visited my friend Eric’s office when he was on the microsoft.com team. On his wall, there was poster with a message similar to this:

  1. Make it work
  2. Make it work right
  3. Make it work fast

I’ve found that if developers get bogged down in the details of the later steps before the earlier steps are complete, productivity takes a real hit, and sometimes stops completely. The other implementations of Perl 6 seem to understand this, and are not waylayed (much) by the fact that their systems are on the dog side of slow.

From Lang.NET 2008 - Wednesday

January 30th, 2008

0843
Alrighty… we’re online. I checked in on #debian-mono, and meebey had plenty of suggestions on how to fix the .deb.

0923
There’s a talk on IronRuby. Microsoft is implementing a Ruby compiler on the CLI. It uses the DLR to do the heavy lifting. It is currently slow :)

Contributions are being accepted for libraries outside of the core, but not against the implementation of the compiler.

http://rubyforge.org/projects/ironruby
{jflam,tomat,jomes,haiboluo}@microsoft.com

0949
This talk is on a Ruby compiler/runtime built on the CLI without using the DLR. One of the benefits is that it allows for ahead-of-time compiling, unlike implementations which use the DLR.

0951
On the drive down today, I was contemplating how Perl6 might handle importing modules from “external” sources. It looks like someone else has already thought about this. Perl6’s module docs can be found in Synopsis 11 of the Official Perl 6 Documentation.

1016
More thoughts on the issue with the DLR’s DynamicSite interface and the problem it poses regarding ahead-of-time compiling. DynamicSite allows fast paths to be determined during runtime. As methods and operators get used, they get bumped up in the priority. This allows the runtime to optimize for the user’s use case without having to hard-code stuff that’s hard to optimize. One of the drawbacks is that it makes it difficult to do ahead-of-time compilation.

A possible solution to this would be to serialize the state of the DynamicSite object into an .exe when the runtime exits. This way, the DynamicSite could be deserialized when next the DLR loads a program for the language. I don’t know how feasible this is, but it might be interesting to try. Theoretically, this concept might make use of Linden Labs’ work on stack serialization, ie Continuations, as a different solution to the same problem.

1029
The current talk is on F#. The language reminds me of a blog post on Caml which I read a few years ago in Evan Martin’s blog.

Seo showed me a version of the F# example running on Debian sid. Whee.

1053
Parsing in F#
Harry Pierson
http://devhawk.net
harry.pierson@microsoft.com

Discussing parsing expression grammars.
1.9.2 of F# includes “Active Patterns”, an interesting approach to building compilers.

This has been documented in his blog. Here’s an example from his presentation:

/// Additive <- Multitive '+' Additive | Multitive
and (|Additive|_|) inp =  match inp with
       | Multitive(v1,Token '+' (Additive(v2, inp))) -> Some(v1+v2)
       | Multitive(v,inp) -> Some(v,inp)
       | _ -> None

1113
Neato. Someone from Intentional Software is presenting a language which includes code written using mathematical representation, diagrams, etc. They call it “literate programming” and mentioned Don Knuth as the person responsible for the concept which they have implemented.

1118
While I’m watching the presentations, I’m trying to add ToyScript to the prebuild.xml file and see if I can get it integrated into the .deb distribution.

1130
That was relatively painless. I’ve gotten rid of the original dlr-solution-1.0.tar.gz and replaced it with dlr-solution-0.0.1.tar.gz, which better indicates the state of the codebase. Sorry for breaking history.

Next talk is on NStatic a static analysis tool. The author, Wesner Moise, writes a blog called “SmartSoftware” and owns an LLC. I have a feeling it only runs on win32… The application is IDE-ish in nature. Very cute and user-friendly looking. The author claims that it has a debugger-like experience, which presents discovered errors. Errors are presented in the context of the executing environment to assist the user in correcting the problem. Errors also contain the stack/execution path which lead to the violation. In the UI, the execution path is indicated using arrows, non-executed code is dimmed.

The author is now accepting applications for beta testers. He does not shake hands :)

1330
Miguel’s talking about Cecil. It can be used to build a native binary from managed code. Nifty. - Seo tells me that I misunderstood. D’oh.

His examples of Moonlight were pretty neat. Novell can’t ship ffmpeg, so nobody can get a usable distribution right now. Microsoft has promised to give Mono a media framework that can be redistributed.

The Novell Mono team is working on new features which Moonlight requires. Mono did not previously have a CLI verifier. It is required for Silverlight. The runtime is becoming hardened. A security sandbox is being implemented.

The team is also working on some automation tools:
* Static analysis with Gendarme. think “customizable FxOp”
* Monoxide (assess audit surface).

When the above are done, the Second Life folks will be able to open the doors to languages other than LSL when the above tools are complete.

Novell is shipping a Moonlight SDK. This consists of a compiler and class libraries. There is a prototype of Monodevelop on MacOS X. There is also a prototype of a Moonlight IDE. Fancy.

1405
cobra-language.com

* object-oriented, imperitive
* run-time performance
* static & dynamic typing
* Nil tracking
* Cleaner syntax than perl
* Contracts built-in
* built-in unit test syntax as a language feature
* works on Mono
* compiler will be “open sourced” in February
** there will be a wiki
** there will be an issue tracker
** there will be discussion forums

1428
I’m working with meebey’s debian packages of mono. They’re a little tricky to get building. They complain that mcs.exe and friends are missing from mcs/class/lib/net_1_1_bootstrap/ and mcs/class/lib/basic/ when run out of the box. I’ve found that dropping the assemblies generated by building from svn into those directories seems to work. *crosses fingers*

I assume that if I can install these packages, I will be able to build the dlr packages using them. I’ll stick them on the web server for reference.

1439
Current talk is by some Visual Studio folks. They are discussing what is required to make a language play nice with Visual Studio.

1504
regarding the debian/ problem I had earlier, dmoonfire told me that I should use dbuild instead of running the various debian/rules targets individually. It seems to run much better that way :)

1506
The current talk is about the Visual Studio 2008 Shell. It seems nifty. One can build a stand-alone IDE that makes use of the visual studio interface. The resultant redistributable package will run without having to purchase visual studio. Yay. Free as in beer. Or was that lunch?

The IronPython Studio is available on codeplex. Looks similar to Visual Studio 2008. Comes with solution explorer, toolbox, debugger, output windows, winforms designer, intelisense. The only projects available in the “new project dialogue” of the IronPython Studio are those related to IronPython.

Fancy.

1539
Don box. I’ve heard of him. He’s talking about “Modeling and Languages.” Chris Anderson is supporting.

Doesn’t like WSDL or XSD.

Goals:

  • Write less code
  • Understand our software (and hardware)

Solution/Approach:

  • Increase data/code ratio in the platform
  • Representations matter (a lot)

Philosophy : Data + interpretation

Data == values devoid of context
Interpretation == applying context to data
One value, many interpretations

The Platform Premise : Data-driven capabilities
1992: /subsystem:
1993: MKTYPLIB.exe
1996: [TransactionRequired]
1999: wsdl:definitions
2000: xlang:process
2002: [YourAttributeGoesHere]
2006: wf:StateMachine
2006: wf:Policy
2006: wpf:ContentControl
2008: Expression(Of Func(Of T))

He keeps using “data” as a singular. gar.

1610
The end.

1924
Oops. I meant to say KTHXBYE.

From Lang.NET 2008 - Tuesday

January 29th, 2008

0834
No snow today. The commute was easy. Last night, I downloaded the DLR and worked with it a little. I’ve hosted a gzipped binary version of the assembly on colliertech.org as well as a bzip2ed tarball of the source. A quick google search tells me that the OSI has approved the Microsoft Public License (Ms-PL). I asked #debian-devel on oftc whether the license meets the Debian Free Software Guidelines, and received a tentative “probably.”

I’m building a tarball dist of the source using Prebuild’s autotools target. I’ve not built any libraries sans snk before, so Prebuild was generating incorrect Makefile.am files in this case. I’ll submit the fix here Real Soon Now. - done

Miguel told me that the Second Life folks have created a Continuation system. This can be used to implement Perl6’s continuations, I bet…

0859
Notes on the wiki
Democratizing The Cloud With Volta

Volta is a framework for making the creation of “Web 2.0″ applications (multi-tiered, asynchronous) easier.

0939
It looks like you’ll need gmcs from svn to compile the DLR. I’ve gotten an autotools system built using Prebuild… now to make dist and put it up on the web server…
Here it is. Note that I have very little bandwidth allocated, so you’ll probably not be able to get it. Sorry :)

http://colliertech.org/downloads/DLR/dlr-solution-1.0.tar.gz

1016
Seo Sanghyeon got my attention on #debian-devel and told me that he’s been building patches which make IronPython build on Mono for a year now. Nifty :) He maintains a list of reports about versions of Iron Python on Mono at the FePy project page.

1125
I’ve been kinda’ ignoring the presentations and fiddling with the DLR autotools distribution. There is now a *very* simple example included in the solution distribution. It basically includes a ‘using Microsoft.Scripting.Ast’ and a definition of ‘Microsoft.Scripting.Ast.CodeBlock cb;’ along with a Console.WriteLine(”Hello World”). Basically enough to prove that the assembly links correctly.

I’ll go see if meebey is interesed in packaging all this stuff as a .deb…

1315
Some folks on #mono recommended that we not package the DLR in its current state, as it is pre-release. I mentioned that we could build a package that we ensured would not make its way out of sid. Nobody objected, so I’m going to see if I can figure it out.

12:09 <@cj> meebey: you about?
12:10 <@meebey> cj: wussup?
12:10 <@cj> meebey: can you download this?
12:10 <@cj> http://colliertech.org/downloads/DLR/dlr-solution-1.0.tar.gz
12:11 <@cj> meebey: if you can, can you .deb-ify it?
12:11 <@meebey> cj: what the heck is that and why should I package it? :)
12:12 <@cj> meebey: it's the "Dynamic Language Runtime."  A set of classes to
            ease the implementation of dynamic languages on the [CLI]
12:13 <@meebey> cj: how come its on your server? who developed it, does it run
                on mono and which license it is under
12:13 <@cj> meebey: It's on my server because I cropped it out of a few
            packages.  It was developed by Microsoft and is released under the
            Ms-PL (OSI approved, uncertain about DFSG)
12:14 <@cj> meebey: I wrapped an autotools build system around it
12:15 < vargaz-away> cj: I think we should package the DLR with the languages
                     which use it, since it is not api stable at all.
12:15 <@cj> vargaz-away: ah.  wasn't aware of that.  I was wondering why it was
            being bundled with every language implementation.
12:16 <@meebey> so I should wait for a language that uses it
12:31 <@cj> meebey: IronPython and IronRuby are two of the first.  There's also
            LOLSCRIPT
12:31 <@meebey> cj: ironpython would be in debian already if not a developer
                would block it
12:33 <@cj> meebey: the pre-release version is on the DLR... the stuff that's
            been released isn't generalized into a separate assembly/namespace
12:34 <@cj> meebey: can you add an attribute to a .deb that ensure that it
            never leaves sid?
12:35 <@cj> meebey: if so, it might be worthwhile to package an alpha version
            of the DLR
12:35 <@meebey> cj: just file a RC bugreport, then it will not migrate to
                testing
12:36 <@cj> meebey: feel like mentoring me through the process of building the
            dlr package?  It may be released by the time I figure it all out
            anyway :)
12:39 <@cj> I'd probably need to create a debian/ directory and put a rules and
            control file, eh? :)
12:54 <@meebey> cj: start with dh_make, the debian new maintainer guideline,
                the debian policy and the debian cli policy
12:55 <@meebey> cj: most important the last one :-P with that you will get sexy
                CLI packages
12:56 <@meebey> cj: for specific questions join #debian-mono on OFTC

1328
Babbage Linden stopped by #mono to talk with Miguel about Second Life’s currently-executing rolling reboot to the Mono-based scripting engine. I grabbed him and asked him to join me on #perl6 to discuss with Larry his group’s implementation of closures on the .NET platform. Here’s an excerpt:

12:15 < babbagelinden> evening all
12:16 < cj> TimToady: babbagelinden is responsible for second life's
            continuation implementation
12:16 < cj> babbagelinden: TimToady is the primary author of the perl6 spec
12:17 <@TimToady> er, yeah, that's me
12:17 < babbagelinden> hi tim
12:17 <@[particle]> babbagelinden: his friends call him larry wall :)
12:18 < cj> babbagelinden: TimToady earlier asked... are the 2nd life
            continuations real continuations or just database continuations?
12:18 <@TimToady> how would you characterize the limitations of your
                  continuations?
12:18 < PerlJam> his enemies call him larry wall too
12:18 <@TimToady> I usually just answer to "hey you"
12:18 < cj> "don't call me late for dinner!"
12:18 < babbagelinden> well, it's horribly inefficient as you end up copying
                       the CLI stack to the heap as a continuation
12:19 <@[particle]> urk
12:19 < babbagelinden> and it causes assembly bloat due to the generated stack
                       frame classes
12:19 <@TimToady> so you presumablyu
12:19 < babbagelinden> (which will be less bad with generic code sharing)
12:19 <@TimToady> only when explicitly asked to do so
12:19 < babbagelinden> and managed pointers aren't currently supported
12:19 < babbagelinden> apart from that it mostly works :-)
12:20 < babbagelinden> and it works on any CLI runtime: .NET or Mono on any
                       platform
12:20 <@TimToady> but you wouldn't use it for, say, backtracking in logic
                  programming...
12:20 < babbagelinden>  i wouldn't use it if i was building a vm
12:20 <@TimToady> if you wanted to evaluate many alternatives rapidly
12:21 < babbagelinden> but it's a usable hack if you're bolting someone elses
                       vm in to your system :-)
12:21 <@[particle]> are there bsr/ret ops?
12:22 < babbagelinden> the approach has been used a number of times to
                       implement migrating agents in Java
12:22 <@TimToady> here I reveal my profound ignorance, but does SL generally
                  use its own VM or someone else's?
12:22 < babbagelinden> see JavaGoX and brakes
12:22 < cj> babbagelinden: the reason your team developed this was to save a
            second life character's state when moving from one server to
            another, wasn't it?
12:22 < babbagelinden> we were using our own vm
12:23 < cj> babbagelinden: so it's probably optimized for
            once-ever-now-and-then use?
12:23 < babbagelinden> it's mainly to deal with migrating running scripts
                       between processes
12:23 < babbagelinden> but it works well enough that we can use it for threading
12:23 < cj> TimToady: they are in the process (this very moment) of moving from
            their VM to Mono :)
12:23 <@TimToady> are different VMs compatible at the continuation level?
12:24 < babbagelinden> yes, if you use a soap formatter
12:24 < babbagelinden> you could pass a continuation from mono to .NET
12:24 < cj> babbagelinden: that's pretty fancy.  migrating states between
            processes...
12:24 < babbagelinden> which would be fun
12:24 < babbagelinden> if you used a binary formatter it might work
12:25 < babbagelinden> but its less likely
12:25 <@TimToady> my guys tend to like yaml, but it's like "whatever.." :)
12:25 <@[particle]> so you can write it to disk, and save the continuation for
                    after the processor has lunch or whatever
12:25  * cj grabs some lunch...
12:26 <@TimToady> babbagelinden: thanks for the braindump
12:27 < babbagelinden> np
12:27 < babbagelinden> there are details on my blog
12:27 < babbagelinden> http://blog.secondlife.com/author/babbagelinden
12:27 < lambdabot> Title: babbagelinden ? Official Linden Blog
12:27 <@TimToady> I'm sure if I really knew what I was talking about I'd have
                  more questions... :)
12:27 <@TimToady> 'k thanks
12:27 < babbagelinden> you need to scroll back a couple of years for the theory
                       ;-)

1402
There was an interesting talk on a tool which integrates FxCop and re-factoring tools. It was given by a guy whose name is probably Serge. This is an obvious extension. I’m glad someone has done it. :)

1419
Currently there is a “Power Shell” talk. It seems neat, but it seems only to be applicable to win32. It might be neat to create a managed shell application. The CLI representation of, for instance System.Diagnostics.Process, is pretty useful. Making an alternate graphical representation of the textual content displayed to a shell is a pretty neat concept.

1424
Babbage invited Miguel to take a look at the Second Life Mono sandbox. Miguel’s desktop crashed while trying to start the Linux client. I was able to get the client running, but it looks like I can’t get through Microsoft’s firewall. Miguel was able to get on using the OS X client.

2026
I finished up a .deb of the DLR before I left the campus today. It is on the laptop, and I’m on the wife’s computer, so publishing it will have to wait until I get around to pulling it out of my backpack. Probably won’t happen until tomorrow morning. Compiling the .dll requires a version of gmcs from subversion. It won’t normally require such a new version to run it, but you’ll find hit an exception in some edge cases if you try to run a DLR language on the stock 1.2.6.

2048
I guess I was wrong about not having time to do it tonight. I’ve uploaded the various debian package source bits and the architecture-independent .deb to my web server.

http://colliertech.org/downloads/DLR/

From Lang.NET 2008 - Monday

January 28th, 2008

Monday

0815
So here I am. It snowed last night, so the drive down was a little crazy. I’ve arrived. They say I represent “Collier Technologies” instead of “Amazon.com.” I hope nobody at work minds. The network is up, people are arriving, we were offered a continental breakfast, and things are going to get started soon. I’ll update this post as fun new things unfold. I’ll also take some more notes on the wiki. I’ve got the camera, but no cable, so we’ll have to wait until I return home before I can upload the shots. I think I may be the only one running Ubuntu.

0830
Miguel’s not here yet (as of 0830), and he’s not answering his phone. I know he doesn’t like to wake up before maybe 3 in the afternoon. I wonder when we’ll see him :) Oh, there he is!

08:34 < cj> miguel just showed up.  I expected he'd be here around 3 in the
            afternoon! :)
08:34 <@RevFry> cj:  [were] the trumpets loud?  When miguel arrived?  =)
08:35 < dmoonfire> RevFry: No, miguel uses the choir, remember?

1050
It’s break time. I’ve made a few notes from the keynote and first talk. See the above wiki link. The fist talk focused on C# 3.0 with some examples of the new features. Lots of examples of the built-in query syntax, System.Linq, Lambda expressions and syntactic sugar.

1227
Lunch time. The “DLR Vision” talk just wrapped up. It looks like the IronPython team is generalizing the work they did to make Python a first-person citizen of the .NET platform. I spoke with Jim Hugunin shortly after the talk. He tells me that the DLR runs on Mono. Yay. He also tells me that they have an efficient closure implementation available. A couple of open issues blocking full implementation of Perl6 on .NET are software transational memory and continations. Jim suggests that since Ruby has removed continuations from v2.0 (uncorroborated, anybody got a link?) , Perl6 will be the only modern language with continuations if it does still have them in the specs (it does).

I’m pretty impressed with what I’ve seen. I’m not quite clear on how the DLR is implemented, or whether I can see the code without having to sign my soul over to MS, but there’s a rumor of a BSD-style license in the future. The source for the DLR is distributed with IronRuby and IronPython under the Ms-PL. The Ms-PL has been approved by the OSI folks, which makes the DLR “Open Source.”

1430
I haven’t written anything in a while. There was a great talk on targetting the DLR. I’m looking around for the assemblies or (better yet) source for the DLR. Anyone know where I can find something like that?

There are some pretty neat tools in the DLR that can be used to parse languages into DLR Trees. DLR Trees are similar to the Expressions emitted by Linq. The speakers suggest that emitting DLR Trees is better than emitting IL directly. That would mean that the emitted code could currently only be parsed by .NET, until DLR Tree parsers were written for other VMs. There are a few notes in the wiki including syntax examples.

Following the DLR targetting talk, some Sun engineers talked about the multi-language JVM platform, and the JRuby language (Ruby on the JVM) .
The Da Vinci Machine: a multi-language virtual machine
http://headius.blogspot.com - Charles Nutter

1603
I’ve spent the last couple of hours trying to find the DLR assemblies. I found the source here:

$ svn co http://ironruby.rubyforge.org/svn/trunk/src/microsoft.scripting/

It seems to depend on some Silverlight things, and I have not yet been able to build the .dll myself. Now I’ll go look and see if I can find a pre-compiled dll…

Found one… I hosted it here:

http://colliertech.org/downloads/DLR/Microsoft.Scripting.dll.gz

Lang.NET 2008

January 26th, 2008

A few months ago, Mahesh Prakriya stopped by Amazon to discuss the recently merged IronPython project and the changes that it inspired in Microsoft’s .NET implementation. We exchanged email, and he invited me to this year’s Lang.NET symposium. I plan to look for volunteers to contribute to a Perl 6 implementation targeted to the CLI.

I’ve been talking to some folks on the freenode #perl6 channel about the prospect of a .NET-based implementation. They seem to think that kp6 could be used to make something realistic with little effort (for some value of “little”). The most mature kp6 back end implementation is currently Perl5.pm, so the work would involve modifying the p5 visitor/emitter so that it outputs IL bytecode rather than perl5.

After a quick review of kp6’s Visitor::Emit::Perl5.pm, it seems as if the code used to emit the perl5 back end should be re-factored so that the emitted perl5 code snippits live in their own template files, named after the classes for which they emit code. The emit_perl5() methods (which should probably be re-named) of the various Visitor::Emit::Perl5 classes could open the template file for the current class and then substitute values using sprintf() or the like. This would allow other back ends to merely inherit from Visitor::Emit::Perl5. They would then only need to re-write the various template files in order to act as an alternate back end. Much of the code used for the Perl5 implementation could then be re-used.

Anyway, I expect to take pictures and chat with a bunch of folks about .NET and perl6 at this shindig. I hope to see you there :)