Tuesday, 1 November 2005

AJAX || +Singularity @ Lambda

New Cheatsheet: What's Ajax?

By amy on ajax

Have I been workin' hard, or hardly workin'? It's a good question. Either way, I've been hacking away an Ajax chapter for the book. Ajax has been becoming one of my very favorite topics, if for no other reason that there is very little writing out there, so far, which makes it as simple as it really is. Plus it's just freakin' cool.
Cheatsheet

What's Ajax? (PDF) is my attempt to cut away as much of the Ajax smoke & pixie dust with a single page. As for the theme, I was inspired by the font (Big Bloke BB). Let me know what you think!
Ajax Interface Example

I've also created a little example movie of an Ajax interface I got to create at work for Ning. If you're working on adding some kind of in-line editing to your applications, you might find it useful. I should have typed less since it was a demo movie, but I was going for realism (translation: I wasn't thinking, and am too lazy to redo it).

Note: The techniques shown in the video are not the same as edit-in-place (EIP). The form is generated by hand-coded Javascript; edit-in-place is somewhat less fancy and it involves less custom work.
Downloads
What's Ajax? cheat sheet (PDF)
Ajax photo sharing app interface (MOV)
Links for Cheatsheet

added 10/30/05—thanks, Jamal
=============================
http://lambda-the-ultimate.org/

An Overview of the Singularity Project

Singularity is a research project in Microsoft Research that started with the question: what would a software platform look like if it was designed from scratch with the primary goal of dependability? Singularity is working to answer this question by building on advances in programming languages and tools to develop a new system architecture and operating system (named Singularity), with the aim of producing a more robust and dependable software platform. Singularity demonstrates the practicality of new technologies and architectural decisions, which should lead to the construction of more robust and dependable systems...
Singularity... starts from a premise of language safety and builds a system architecture that supports and enhances the language guarantees.

An interesting overview of what sounds like an intersting project.

The choice of implementation language is also interesting:

Singularity is written in Sing#, which is an extension to the Spec# language developed in Microsoft Research. Spec# itself is an extension to Microsoft’s C# language that provides constructs (pre- and post-conditions and object invariants) for specifying program behavior. Specifications can be statically verified by the Boogie verifier or checked by compiler-inserted run-time tests. Sing# extends this language with support for channels and low-level constructs necessary for system code....integrating a feature into a language allows more aspects of a program to be verified. Singularity’s constructs allow communication to be statically verified.

An interesting aspect is the support for meta-programming, which is implemented in an unusal manner:

Compile-time reflection (CTR) is a partial substitute for the CLR’s full reflection capability. CTR is similar to techniques such as macros, binary code rewriting, aspects, meta-programming, and multi-stage languages. The basic idea is that programs may contain place-holder elements (classes, methods, fields, etc.) that are subsequently expanded by a generator.

Many other intersting design decisions are discussed in the paper (e.g., various DbC facilities), so do check it out.


Syntactic sugar causes cancer of the semicolon, and other Alan J. Perlis epigrams


The tools we use have a profound (and devious!) influence on our thinking habits, and, therefore, on our thinking abilities. -- Edsger Dijkstra, How do we tell truths that might hurt?


...there is no agreement on what a programming language really is and what its main purpose is supposed to be. Is a programming language a tool for instructing machines? A means of communicating between programmers? A vehicle for expressing high-level designs? A notation for algorithms? A way of expressing relationships between concepts? A tool for experimentation? A means of controlling computerized devices? My view is that a general-purpose programming language must be all of those to serve its diverse set of users. The only thing a language cannot be – and survive – is a mere collection of ‘‘neat’’ features. -- Bjarne Stroustrup, The Design and Evolution of C++


I think that any language that aspires to mainstream use must provide a broad base for a variety of techniques -- including object-oriented programming (class hierarchies) and generic programming (parameterized types and algorithms). In particular, it must provide good facilities for composing programs out of separate parts (possibly writing in several different languages). I also think that exceptions are necessary for managing the complexity of error handling. A language that lacks such facilities forces its users to laboriously simulate them. -- Bjarne Stroustrup, LinuxWorld

There is a race between the increasing complexity of the systems we build and our ability to develop intellectual tools for understanding that complexity. If the race is won by our tools, then systems will eventually become easier to use and more reliable. If not, they will continue to become harder to use and less reliable for all but a relatively small set of common tasks. Given how hard thinking is, if those intellectual tools are to succeed, they will have to substitute calculation for thought. -- Leslie Lamport.

let me re-assert that the question of whether there are limitations in principle of what problems man can make machines solve for him as compared to his own ability to solve problems, really is a technical question in recursive function theory. -- J. McCarthy, Towards a Mathematical Science of Computation .


Until real software engineering is developed, the next best practice is to develop with a dynamic system that has extreme late binding in all aspects. -- Alan Kay, Is Software Engineering and Oxymoron? In the Croquet User Manual.


Greenspun's Tenth Rule of Programming: Any sufficiently complicated C or Fortran program contains an ad-hoc, informally-specified bug-ridden slow implementation of half of Common Lisp. -- Philip Greenspun.

0 Comments:

Post a Comment

<< Home