This is just a spot to keep miscellaneous links. It also shows you what a geek I am.
Wednesday, January 18, 2006
Confluence
Over the last few days, there has been one thought running in my head - 'All roads lead to Lisp'. I've tried to get it out of my head but like a tune from the radio, it has firmly lodged itself into my head and refuses to let go. Why this state? Call it a confluence of several items. In particular, these 3.
- Joel Spolsky goes off and writes one of his best articles ever called 'The Perils of Java Schools' which talks about the perils of not learning Lisp. As someone who has been playing catch-up with functional programming since I wasn't taught Lisp at college, I definitely agree. I forwarded that article to some senior folks internally - which in turn lead to some interesting conversations
- I've been working on a prototype of something at work - where I started off the usual imperative programming style. Realizing that this wasn't going to scale, I rewrote it in functional style making full use of C#'s anonymous delegates and iterators. When I had to make a major change, it was *so much* easier to add in extra functionality since I was just passing closures around.
- After 2 hectic work-filled weeks, I took advantage of a long weekend to curl up with a book which has been called the best book on programming ever - Peter Norvig's Paradigms of Artificial Intelligence Progra"
C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Tool Developers Guide\Samples\clisp"
Tuesday, January 17, 2006
L Sharp is free software distributed under the terms of the GNU General Public License. You can download the latest release from Sourceforge. You may also want to read Rob Blackwell's Web Log.
This documentation is a work in progress and is subject to change."
Monday, January 16, 2006
Tuesday, January 10, 2006
* Technical Overview
* First chapter of a book describing the system
* Back of an envelope summary (my first source)
From the examples in the chapter, I thought it looked surprisingly simple to use - comparable to adding contracts in DbC, for example. I guess the analysis requires a little more effort?"
The smartest thing to do would be to find a way to use one of the perfectly good markup languages that have been designed and debugged and have validators and authoring software and parsers and generators and all that other good stuff. Here’s a radical idea: don’t even think of making your own language until you’re sure that you can’t do the job using one of the Big Five: XHTML, DocBook, ODF, UBL, and Atom."
Originally seen at Tim Bray: Don’t Invent XML Languages on Lambda the Ultimate
Monday, January 09, 2006
AT&T Wireless: 2125551212@mobile.att.net
Cingular: 9995551234@mobile.mycingular.com
Nextel: 7035551234@messaging.nextel.com
SprintPCS: 7775551234@messaging.sprintpcs.com
T-Mobile: 9995551234@tmomail.net
Verizon: 2125551212@vtext.com
Sunday, January 08, 2006
" What is a Photograph?
A photograph is life distilled and preserved for eternity. An expressive face, a fleeting moment in nature, an abstract shape- these are the fundamentals of photography. A photograph conveys, in a way no words can, a sense of the mystery and beauty of life, nature, and the achievements of mankind."
Friday, January 06, 2006
Martin Croxford, Praxis High Integrity Systems
Dr. Roderick Chapman, Praxis High Integrity Systems
High-integrity software systems are often so large that conventional development processes cannot get anywhere near achieving tolerable defect rates. This article presents an approach that has delivered software with very low defect rates cost-effectively. We describe the technical details of the approach and the results achieved, and discuss how to overcome barriers to adopting such best practice approaches. We conclude by observing that where such approaches are compatible and can be deployed in combination, we have the opportunity to realize the extremely low defect rates needed for high integrity software composed of many million lines of code."
This article refers to Communicating Sequential Processes (CSP), the Hoare invention.
Thursday, January 05, 2006
Computer languages, links to computer language books like SICP, HTCP, etc.
Friday, November 04, 2005
To implement a Microsoft® Windows® Script engine, create an OLE COM object that supports the following interfaces.
Summary
Adding scripting support to your application is one of the most valuable things you can do for your client, letting them add value to your software, and keep it current over time with little or no overhead from the developers. Your users will be able to modify behavior at runtime, change business rules as the market changes and fix subtle bugs as they appear until better fixes come along in the form of compiled code. It is one of the most powerful techniques today employed my many varied business applications. But guess what? Its not very easy to do in .Net. In this article Ill show you how you can use some of the techniques of the past mixed with the .Net framework to add that scripting ability to managed applications, with a touch on a subject that was never considered for scripting: WebServices , including asynchronous calls to them.
Friday, October 28, 2005
Another C? page at MS research.
An Overview of C?
Integrating XML into Popular Programming Languages
Dare Obasanjo
Microsoft Corporation
January 13, 2005
Summary: Dare Obasanjo covers the C? programming language created by Microsoft Research by augmenting C# with constructs to make it better at processing information, such as XML and relational data. (18 printed pages)
This class library provides a Design by Contract framework for use in .NET projects. A Visual Basic .NET version is also included in the download but the following discussion is in C#. In both cases the library can be used by a .NET client written in any .NET language. (Though if the VB.NET version is used IntelliSense code comments will not be visible in the client application.)
"Design by Contract" is a method made famous by Bertrand Meyer in the Eiffel programming language where support is built right into the language constructs.
See Chapter 11 of Object-Oriented Software Construction - 2nd Edition (Prentice Hall, 1997) by Bertrand Meyer and Building Bug-free O-O Software: An Introduction to Design by Contract.
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.