Saturday, June 30, 2007

Manage It!

Manage It!: "Your project can't fail. That's a lot of pressure on you, and yet you don't want to buy into any one specific process, methodology, or lifecycle.

Your project is different. It doesn't fit into those neat descriptions.

Manage It! will show you how to beg, borrow, and steal from the best methodologies to fit your particular project. It will help you find what works best for you and not for some mythological project that doesn't even exist."

Dr. Dobb's | Pragmatic Software Testing | June 28, 2007

Dr. Dobb's | Pragmatic Software Testing | June 28, 2007: "There are a number of philosophies that drive testers these days. Do you test based upon a catalog of risks, automated everything in unit tests, employ a model? In the risk-based camp, few are authors are more influential or prolific as Rex Black. In his new book, Pragmatic Software Testing: Becoming an Effective and Efficient Test Professional, Black explains his approach to risk-based testing and the techniques needed to accomplish it."

Friday, June 29, 2007

Coding Horror: Supporting Open Source Projects in the Microsoft Ecosystem

Coding Horror: Supporting Open Source Projects in the Microsoft Ecosystem: "In my company's commercial application we depend upon DotNetNuke, Nant, log4net, NUnit and other open source tools. Those open source projects help support us. In fact, without DNN, we would probably be out of business because our developments costs would be too high. In turn, my company helps support Microsoft through the purchase of licenses and MSDN subscriptions. Yet Microsoft does not complete the circle by financially supporting any of those open source projects."

Wednesday, June 27, 2007

Two Fixes for Bad Backs - TIME

Two Fixes for Bad Backs - TIME: "In your own hands exercises to stretch and strengthen, plus rest and anti-inflammatories may fix a bad back, without having to go under the knife."

An Earth Without People -- [ environment ]: Scientific American

An Earth Without People -- [ environment ]: Scientific American: "It’s a common fantasy to imagine that you’re the last person left alive on earth. But what if all human beings were suddenly whisked off the planet? That premise is the starting point for The World without Us, a new book by science writer Alan Weisman, an associate professor of journalism at the University of Arizona. In this extended thought experiment, Weisman does not specify exactly what finishes off Homo sapiens; instead he simply assumes the abrupt disappearance of our species and projects the sequence of events that would most likely occur in the years, decades and centuries afterward."

Tuesday, June 12, 2007

How to Write a Software Specification

How to Write a Software Specification: "This document provides a format or checklist for writing a technical specification, particularly for computer software, although the format may be suitable for any number of similar uses.

The material presented here can be of help to both the software contractor and his or her client. It is not technical, but is sufficiently precise to aid a common understanding between client and contractor.

The specification is divided into two parts.

* Part I - Concepts and requirements
* Part II - Methods and details of implementation"

Painless Functional Specifications - Part 2: What's a Spec? - Joel on Software

Painless Functional Specifications - Part 2: What's a Spec? - Joel on Software: "This series of articles is about functional specifications, not technical specifications. People get these mixed up. I don't know if there's any standard terminology, but here's what I mean when I use these terms.

1. A functional specification describes how a product will work entirely from the user's perspective. It doesn't care how the thing is implemented. It talks about features. It specifies screens, menus, dialogs, and so on.
2. A technical specification describes the internal implementation of the program. It talks about data structures, relational database models, choice of programming languages and tools, algorithms, etc."

Painless Functional Specifications - Part 1: Why Bother? - Joel on Software

Painless Functional Specifications - Part 1: Why Bother? - Joel on Software: "The most important function of a spec is to design the program. Even if you are working on code all by yourself, and you write a spec solely for your own benefit, the act of writing the spec -- describing how the program works in minute detail -- will force you to actually design the program."

Painless Software Schedules - Joel on Software

Painless Software Schedules - Joel on Software: "Use Microsoft Excel. Don't use anything fancy like Microsoft Project. The trouble with Microsoft Project is that it assumes that you want to spend a lot of time worrying about dependencies. A dependency is when you have two tasks, one of which must be completed before the next one can begin. I've found that with software, the dependencies are so obvious that it's just not worth the effort to formally keep track of them."

Wednesday, June 06, 2007

Kanban in Action

Kanban in Action: "Earlier when I described my approach to managing and leading software engineering at Corbis, I mentioned that I was introducing a kanban system for our sustaining engineering activity. Since we introduced it, we've released new versions of our IT systems and business application software twice per month. However, sustaining doesn't run on a traditional agile two week iteration (or sprint) type system. It uses a kanban system to pipeline change requests (CRs). When a CR is complete it sits in the Release Ready state until a scheduled release happens on every second Wednesday."

InfoQ: Incremental Software Development without Iterations

InfoQ: Incremental Software Development without Iterations: "David Anderson described how his team is using a kanban system for their sustaining engineering (maintenance and bug fixing) activities. Iterations have been dropped although software is still released every two weeks. Work is scheduled, monitored, and run via a 'kanban board' and daily stand-up meetings. "

Monday, June 04, 2007

Códice Software: Linus Torvalds on GIT and SCM

Códice Software: Linus Torvalds on GIT and SCM: "I just finished watching the speech Linus Torvalds gave some days ago at Google, basically talking about GIT and Source Control Management. He has really strong opinions but I think the video is really worth watching.

To be honest I was very shocked by some of the statements he made, like the following:
  • Subversion has been the most pointless project ever started. Well, I'm not a big Subversion fan either, but I find it a bit rude.
  • Subversion used to say CVS done right: with that slogan there is nowhere
    you can go. There is no way to do cvs right.
    No comments.
  • If you like using cvs, you should be in some kind of mental institution or
    somewhere else.
    Again I think he is playing the showman role...
  • Get rid of perforce, it is sad, but it is so, so true.... No comments."

Dr. Dobb's | Dynamic Programming In Action | June 2, 2007

Dr. Dobb's Dynamic Programming In Action June 2, 2007: "A problem-solving technique a LISP programmer learns is divide-and-conquerA problem-solving technique a LISP programmer learns is divide-and-conquer"

Sunday, June 03, 2007

Dr. Dobb's | The Power of LISP for C Programmers | June 3, 2007

Dr. Dobb's The Power of LISP for C Programmers June 3, 2007: "The two best-known LISP properties are symbolic processing and list processing. Both concepts can be developed in other languages with a set of generic functions or procedures that operate on appropriate data structures and by developing a proper mental attitude concerning the abstraction.
In this article, I address generic list-processing procedures in C. The same concepts can be adapted for other high-level languages and assembly language. "

Friday, June 01, 2007

Network Connections folder empty

Network Connections folder empty: This problem afflicted my machine. Following is a fix:

"Fix
Start, Run. cmd.exe

regsvr32 netshell.dll
regsvr32 netcfgx.dll
regsvr32 netman.dll

Hitting enter after each one. That should do it.
The dynamic libraries are hashed, likely due to some 'Free' spyware search or crap program.
Enjoy!"

Thursday, April 19, 2007

Erlang

Erlang: "Blogs

There's a lot of activity in the blogsphere; go to Google search and search for Erlang blogs. Also, here's some articles you might enjoy:

Web sites

Now go and look in this directory: http://www.erlang.org/doc/doc-5.5.3/pdf/. You'll find 50 odd PDF files here.

I've chosen a few of these for you to look at:

Each one of these represents a book that is just waiting to be written :-)

Have a good read.

Copyright © 2007 Joe Armstrong"

Friday, April 13, 2007

Virtualization with coLinux

Virtualization with coLinux: "Virtualization with VmWare, Xen, and Kernel-based Virtual Machine (KVM) are all the rage these days. But did you know that you can run Linux® cooperatively with Microsoft® Windows®? This article explores Cooperative Linux (coLinux), starting with a quick introduction to virtualization and then looking at the approach taken by coLinux. You'll also see how to get coLinux up and running on Windows."

InfoQ: .NET Memory Leaks

InfoQ: .NET Memory Leaks: "A problem with .NET that isn't talked about is the problems caused by using dynamic code generation. In a nut shell, dynamic code generation, which is used in XML Serialization, Regular Expressions, and XSLT transformations, can lead to memory leaks.

While the Common Language Runtime (CLR) can unload whole App Domains, it cannot unload individual assemblies. Code generation relies on creating temporary assemblies. These assemblies are often loaded into the primary app domain, meaning that cannot be unloaded until the application exits.

For libraries like XML Serialization, this isn't much of a problem. Usually the serialization code for a given type is cached, which limits the application to one temporary assembly per type. But there are XMLSerializer overloads that don't use caching. If a developer uses one of these without providing some sort of application-level cache, memory can be slowly leaked as new instances of essentially the same code is loaded into memory. For more information specifically on XML, see .NET Memory Leak: XmlSerializing your way to a Memory Leak.

The potential problems are far worse for code that habitually rewrites itself at runtime such as those written in LISP. For that sort of language, either the code has to be run entirely interpreted, that is never being compiled to IL code, or placed in separate AppDomains that can be purged fr"

Monday, April 09, 2007

Re: ICMP Ping

Re: ICMP Ping: "Look at http://home.uninet.ee/~taavi/files/erlang/

contains port driver for ICMP ping (freebsd ping program was used as start).

best regards,
taavi

> I am trying to write a very simple network monitoring tool. Not trying
> to replace any of the commercial products/open source, but as a nice
> example to try and learn about erlang features (concurrency and
> Mnesia) in a real scenario."

Thursday, April 05, 2007

There Are Only Four Software Licenses: "Jeff Atwood writes a great summary of Open Source Licenses. As far as I’m concerned, there’s really only four software licenses to worry about (open source or otherwise).

1. Proprietary - The code is mine! You can’t look at it. You can’t reverse engineer it. Mine Mine Mine!
2. GPL - You can do whatever you want with the code, but if you distribute the code or binaries, you must make your changes open via the GPL license.
3. New BSD - Use at your own risk. Do whatever the hell you want with the code, just keep the license intact, credit me, and never sue me if the software blows your foot off. The MIT license is a notable alternative to the New BSD and is very very similar.
4. Public Domain - Do whatever you want with the code. Period. No need to mention me ever again. You can forget I ever existed."

Wednesday, April 04, 2007

Making it stick.: Systems: "Would you rather your body attempt to act as one 'logical' cell, or are you happy to survive as a system of cooperating cells with billions dying off and being replaced each day?

Steve Loughran reminding us of a Note on Distributed Computing. From the note...
We look at a number of distributed systems that have attempted to paper over the distinction between local and remote objects, and show that such systems fail to support basic requirements of robustness and reliability. These failures have been masked in the past by the small size of the distributed systems that have been built. In the enterprise-wide distributed systems foreseen in the near future, however, such a masking will be impossible.
A favorite quote from elsewhere by Jim Waldo, one of the authors...
I've been known to claim that there are two kinds of reliable message systems. The first kind are those that come with an asterisk; following the asterisk leads you to the small print, where you find out when the messaging system can fail and so it is not, therefore, reliable. The second kind are those systems that simply lie – they are no more reliable, but they don't tell you that there are circumstances where they can fail.
posted by Patrick Logan # 9:21 PM

Distributed Systems in Practice: The Human Body
Patrick has noticed the parallels as has Werner Vogels. There’s an awful lot of stuff to be learnt about building distributed systems from the human body including how control isn’t centralized, how reliability is achieved and how the ..."

Monday, April 02, 2007

Create an Eclipse-based application using the Graphical Editing Framework: "Graphical Modeling Framework (GMF)

The GMF project was born out of the frustration in creating graphical editors manually (especially in the context of using the Eclipse Modeling Framework). GMF allows you to effectively map (see Figure 5) your semantic (business logic) model to a notional (graphical) model. Once this mapping is complete using a few configuration files, GMF will generate a fully functional graphical editor for you.

Figure 5. GMF development flow
GMF development flow

If your use cases have you using the Eclipse Modeling Framework for your model, it is highly recommend that you use GMF instead of GEF directly. Read Chris Aniszczyk's 'Learn Eclipse GMF in 15 minutes' for more information (see Resources).

Zest

Zest is a lightweight visualization toolkit (see Figure 6) that provides a JFace-like wrapping on top of traditional GEF editors. Zest has been modeled after JFace, and all the Zest views conform to the same standards and conventions as existing Eclipse views (think label and content providers). This means that the providers, actions, and listeners used within existing applications can be leveraged within Zest. Also, Zest has reusable layouts that can be applied to your visualizations with ease.

Figure 6. Sample Zest Visualizations
Sample Zest Visualiz"

Monday, March 26, 2007

Creating Passionate Users: Crash course in learning theory: "Crash course in learning theory

One formula (of many) for a successful blog is to create a 'learning blog'. A blog that shares what you know, to help others. Even--or especially--if that means giving away your 'secrets'. Teaching people to do what you do is one of the best ways we know to grow an audience--an audience of users you want to help."

Saturday, March 24, 2007

evan_tech -- code review is great: "code review is great
At Google, all code must be reviewed before you can check it in. This means that another engineer needs to look over your change and give it their approval. Traditionally we've done it via email and some wrapper scripts, but more recently people have been switching to Guido's fancy tool."
bzr, again - The Changelog: "bzr, again
I've talked a lot lately about different VCSs.

I got some interesting comments in reply to my most recent post. One person took issue with my complaint that nobody really understood how to specify a revision to git format-patch, and proceeded to issue an incorrect suggestion. And a couple of people complained about my comments about bzr, which generally came down to the released version of bzr didn't have anything compelling and also didn't support tags.

So I went into #bzr, asked them what bzr has that git, Mercurial, and darcs don't. And gave bzr the benefit of the doubt that 0.15 will be out soon and will be stable. What I got back were these general items:

1. Renaming of directories (not in hg, git)
2. 2-way sync with Subversion (not in hg, darcs)
3. Checkouts (not in any others by default)
4. No server-side push requirement

Let's look at these in more detail."
Cyclopedia Square: Cutting Edge Revision Control: "After reading a lot of comparisons like the above, I concluded that of all those revision control choices, the ones that are being actively developed and used by fairly big and/or prominent projects are Bazaar (AKA bazaar-ng), Mercurial, Darcs, and git. And actually I’ll state right here that it’s somewhat questionable whether Darcs meets my criteria (though I wanted it to, really). What follows is my comparison of these four systems. I compared them for speed and ease of use, the two things I cared about most. I also briefly looked at how they work over a network and their windoze support, but not to a great amount of detail. That would be a good sequel to this review."

Ask Reddit: What's Your Favorite Source Control Program, and Why ...

"But my home projects I switched to Darcs or Mercurial, because they are ... to me like the hip-geeks don't like svn much. Are they using Darcs? Bazaar? ...
programming.reddit.com/info/apb7/comments - 36k - Cached - Similar pages"

Should I take a look at revision control software other than ...

"Converts to/from Darcs, Subversion, Monotone, CVS, Bazaar, Mercurial and Git ... I'm in the process of writing my own svn -> darcs migration tool which can ...
programming.reddit.com/info/15zzs/comments/c016020 - 69k - Cached - Similar pages
[ More results from programming.reddit.com ] "

versioncontrol on SWiK.net

"Bazaar is a distributed version control system available under the GPL that aids ... "Darcs is a revision control system. Darcs is simple to learn and use, ...
xml.swik.net/versioncontrol - 68k - Cached - Similar pages

Friday, February 09, 2007

NetPing util

NetPing util: "NetPing
Jeff Key
January 24, 2003
Updated August 24, 2003

<24jan2003>I recently got myself into a situation where I was away from the office on the VPN and, changed a machine's IP address, rebooted it and realized I forgot to note the new address. Since the only access I had to the machine was via Remote Desktop over the VPN, I was in a sticky situation. Rather than ping all 255 addresses on our subnet to figure out what its new address was, I wrote this little util.

How times have changed!

Thanks to several good folks, Adam Cogan and Scott Hanselman in particular, NetPing has grown into quite a beast.

Here is the current feature set:

* Pings range of ip addresses.
* Two types of AddIns supported: Column and Action."

Tuesday, January 09, 2007

erlware - next generation distributed software: Building an OTP Application: "Erlang is a clean, simple language, and it is easy to learn. That's Erlang, now lets talk OTP. The learning curve goes up significantly when getting into OTP. Questions arise, such as; how do I start an application, what is the function of a supervisor, and how do I make use of gen_server? That is just the beginning it gets far more confusing... 'what is a .app file, what is a release, and can someone please tell me what .script and .boot files do?'"

Sunday, January 07, 2007

Concurrency stuff from Lambda The Ultimate:

The Joins Concurrency Library. Claudio Russo.
Comega extended C# 1.x with a simple, declarative and powerful model of concurrency - join patterns - applicable both to multithreaded applications and to the orchestration of asynchronous, event-based distributed applications. With Generics available in C# 2.0, we can now provide join patterns as a library rather than a language feature. The Joins library extends its clients with an embedded, type-safe and mostly declarative language for expressing synchronization patterns. The library has some advantages over Comega: it is language neutral, supporting other languages like Visual Basic; its join patterns are more dynamic, allowing solutions difficult to express with Comega; its code is easy to modify, fostering experimentation.

E Thesis: Robust Composition
Mark S. Miller's PhD thesis on Robust Composition: Towards a Unified Approach to Access Control and Concurrency Control is now online.
When separately written programs are composed so that they may cooperate, they may instead destructively interfere in unanticipated ways. These hazards limit the scale and functionality of the software systems we can successfully compose. This dissertation presents a framework for enabling those interactions between components needed for the cooperation we intend, while minimizing the hazards of destructive interference.
Great progress on the composition problem has been made within the object paradigm, chiefly in the context of sequential, single-machine programming among benign components. We show how to extend this success to support robust composition of concurrent and potentially malicious components distributed over potentially malicious machines. We present E, a distributed, persistent, secure programming language, and CapDesk, a virus-safe desktop built in E, as embodiments of the techniques we explain.E rates as a (very) important language for anyone interested in ideas of messaging, distribution and security. The nice thing about a thesis (such as this one and Joe Armstrong's) is that it gives a nice historical account of the related work and influences.

Haskell vs. Erlang, Reloaded
Erlang and Haskell compared... Want to know the conclusion?
I was able to finish the Erlang version 10 times faster and with 1/2 the code. Even if I cut the 10-11 weeks spent on the Haskell version in half to account for the learning curve, I would still come out way ahead with Erlang.

Erlang tutorial
Seems like a nice tutorial.
Includes the expected chapters on concurrent programming and robustness, of course.

Joe Armstrong PhD thesis on Erlang.
And his blog: http://armstrongonsoftware.blogspot.com/

Friday, January 05, 2007

defmacro - Erlang Style Concurrency -- very good article on Erlang Style Concurrency, summarizing the benefits of Erlang specifically and message-passing concurrency-oriented programming generally.

Friday, December 29, 2006

Optimizing TortoiseSVN

"As noted in other posts, I am currently using Subversion for source code control, with TortoiseSVN as the “GUI” client. Recently I’ve been having big performance problems on my machine, particularly with Windows Explorer. Getting rid of most of the network drives that I’ve added helped quite a bit, and then I turned my attention to TortoiseSVN.

Our SVN repository is located in New York, whilst we are in London, and the network between the two sites is not great. For example, when we moved offices our new network was only 10mbit/s rather than 100mbit/s. Gigabit? Tish and pshaw! Combined with the fact that our project is 436Mb means that SVN can sometimes crawl."

Saturday, December 09, 2006

Old ideas form the basis of advancements in functional programming
(Page 1 of 4)
Philip Wadler
Who would have thought that the programming languages of the 21st century will be built upon foundations of logic theory from the 19th and 20th?

Philip is a researcher at Avaya Labs (a spinoff of Lucent Technologies). Prior to joining Avaya, he was a researcher at Bell Laboratories. His e-mail address is wadler@avaya.com.


As the 19th century drew to a close, logicians formalized an ideal notion of proof. They were driven by nothing other than an abiding interest in truth, and their proofs were as ethereal as the mind of God. Yet within decades, these mathematical abstractions were realized by the hand of man, in the digital stored-program computer. How it came to be recognized that proofs and programs are the same thing is a story that spans a century. The story ends with a new principle that is guiding the design of a new generation of programming languages, including mobile code for the Internet.

Modern logic began with Gottlob Frege in the late 1870s. Two aspects of Frege's work reached a culmination a half century later, in Gerhard Gentzen's natural deduction, which captured a notion of proof, and Alonzo Church's lambda calculus, which captured a notion of program, both first published in the early 1930s. As it turns out, there is a precise correspondence between Gentzen's proofs and Church's programs, but that was not uncovered until the late 1960s. As the 21st century begins, that correspondence sits as a cornerstone of modern programming language design.

For my money, Gentzen's natural deduction and Church's lambda calculus are on a par with Einstein's relativity and Dirac's quantum physics for elegance and insight. This article gives a taste of these ideas; for more detailed information on these topics, go to http://www.ddj.com/ articles/2000/0013/0013toc.htm.

more at http://www.ddj.com/showArticle.jhtml?articleID=184404384

Saturday, December 02, 2006

Removing the d2p1 prefix from XML datasets in Microsoft Visual Studio .NET

Q. I'm not sure this is very "extreme" but I add records to my typed DataSet and am getting a d2p1 prefix on my attributes in addition to an xmlns:d2p1 declaration on the elements. This seems to be some default value. How can I specify a namespace to get MyNS:attribute instead of d2p1:attribute?

A. In the properties for the schema set the attributeFormDefault to unqualified.

Thursday, November 09, 2006

Online-Hilfe betriebliche Korrespondenz - Geschäftsbrief 5008: "zu G Gruß

Der Gruß am Ende des Briefes ist wiederum individuell gestaltbar, wobei man jedoch zwei Dinge beachten sollte: die Floskel 'Hochachtungsvoll' ist genauso veraltet wie den letzten Satz in den Gruß zu ziehen.

Weitere Möglichkeiten für die Formulieren des Grußes:

* Mit freundlichen Grüßen
* Freundliche Grüße
* Mit freundlichem Gruß
* Mit besten Grüßen
* Mit herzlichen Grüßen
* Herzliche Grüße
* Mit besten Grüßen und Wünschen
* Mit herzlichen Grüßen und Wünschen
* Mit den besten Grüßen aus ...
* Freundliche Grüße nach ...
* Mit herzlichen Grüßen und den besten Wünschen
* Mit herzlichen Grüßen von Haus zu Haus
* Mit den besten Wünschen für ein schönes Wochenende

Positioniert wird der Gruß eine Zeile unter dem Text."

Thursday, November 02, 2006

Want to learn something new | Lambda the Ultimate: "Stepping stones

I'd actually recommend learning Erlang before Haskell or OCaml, because it helps plug the gap between dynamically-typed multiple assignment (Ruby) and algebraic data types and pattern matching. I was hopelessly lost the first time I looked at Haskell, because it includes all sorts of syntactic sugar that aren't really necessary to understand pattern-matching or ADTs (n+k patterns, guards, @ patterns, : for cons, definitional syntax, etc). Stick Erlang in there, and you can think of it like this:"

Monday, October 30, 2006

Channel9 Wiki: ConcurrencyRuntime: "An Asynchronous Messaging Library for C# 2.0

The Concurrency and Coordination Runtime (CCR) is a lightweight port-based concurrency library for C# 2.0 developed by George Chrysanthakopoulos in the Advanced Strategies group at Microsoft. Here are some of our design constraints for the CCR:

* We want to support coordination programming constructs as a library rather than by modifying an existing language or inventing a new language. Eventually the best way to add concurrency constructs is through language level support. We believe that it may too early now to freeze the coordination patterns(including joins, choice, etc) into a language because we do not yet have enough experience of their use. For the purpose of experimentation a library based approach seems more suitable. The arbiter architecture described below also allows us to experiment with new constructs in an extensible, composable way.

* We wish to support port-based programming where message passing is used not just at the interface of the program to communicate with external entities but as a software engineering mechanism to help structure our programs. Our desire is to use message passing to help provide isolation between different components for reliability and parallelism.

* We wish to support scenarios in which there is a very large amount of message-passing (e.g. "

Saturday, October 28, 2006

The self-management one seems particularly interesting, with its talk of feedback loops and so on. Of particular interest is that fact that a although the classic negative feedback loop converges back to stability, interacting negative feedback loops may diverge into instability! This is called "stigmergy" (link, link) Very interesting to think about.

If two loops interact via changing their mutual environment, this is called passive stigmergy, and may result in unstable, divergent behavior. (The tribesman and the air conditioner; or when one agent tries to fill a container while another tries to empty it.) Active stigmergy, on the other hand, is when one loop manages the other loop directly, by altering its input. It's the tribesman adjusting the thermostat; it's working with the system, not around it.

Future of software design? Lambda the Ultimate: "Future of software design?

It's been a while since I submitted a story...here is some food for thought!

What will programming look like in 20 years? Maybe it will be based on a 'definitive language' like the speculations of the article Convergence in language design: a case of lightning striking four times in the same place (FLOPS 2006). Such a language will have a layered structure and its handling of concurrency is important. (Whether it is dynamically or statically typed is of absolutely no importance, BTW.)

How will we program with such a language? Maybe we will program with feedback loops, as explained in Self management and the future of software design (FACS 06). This seems to be one way to handle complexity, the inevitability of software and hardware faults, and managing global behavior of a system. I am coordinating a new project, SELFMAN, that is looking at this.
Comments?"

Thursday, October 19, 2006

StringTemplate Template Engine: "What is StringTemplate?
StringTemplate is a java template engine (with ports for C# and Python) for generating source code, web pages, emails, or any other formatted text output. StringTemplate is particularly good at multi-targeted code generators, multiple site skins, and internationalization/localization. It evolved over years of effort developing jGuru.com. StringTemplate also generates this website and powers the ANTLR v3 code generator. Its distinguishing characteristic is that it strictly enforces model-view separation unlike other engines. There are currently about 600 StringTemplate source downloads a month.

Terence Parr is the maniac behind both StringTemplate and ANTLR. He is a professor of computer science at the University of San Francisco. "
IKVM.NET Home Page: "Introduction

IKVM.NET is an implementation of Java for Mono and the Microsoft .NET Framework. It includes the following components:

* A Java Virtual Machine implemented in .NET
* A .NET implementation of the Java class libraries
* Tools that enable Java and .NET interoperability

Read more about what you can do with IKVM.NET."

Monday, October 09, 2006

From the comments section of the NLog article:

Introduction to NLog - The Code Project - C# Programming: "Take a look at the Microsoft Enterprise Instrumentation Framework

http://www.microsoft.com/downloads/details.aspx?FamilyId=80DF04BC-267D-4919-8BB4-1F84B7EB1368&displaylang=en"
Introduction to NLog - The Code Project - C# Programming: "What is NLog?

NLog is a .NET library which enables you to add sophisticated tracing code to your application, delivering the functionality mentioned above and much, much more.

NLog lets you write rules which control the flow of diagnostic traces from their sources to targets, which could be:

* a file
* text console
* email message
* database
* another machine on the network (using TCP/UDP)
* MSMQ-based message queue
* Event Log
* and others, described here

In addition, each tracing message can be augmented with pieces of contextual information, which will be sent with it to the target. The contextual information can include:

* current date and time (in various formats)
* log level
* source name
* stack trace/information about the method that emitted the tracing message
* values of environment variables
* information about exceptions
* machine, process, and thread names
* and many more, as described here"

Tuesday, September 26, 2006

toute.ca -- home of Termite and other random stuff: "Termite

Termite is an Erlang-like distributed programming system written in Scheme. It requires the latest version of Gambit-C.

Download Termite using darcs with the following command:

darcs get http://toute.ca/termite

You can also browse the repository here, or download a potentially out-of-date tarball.

Finally, there's a paper written about Termite.

Questions, comments and error reports should be sent to Guillaume Germain (guillaume.germain [at] gmail.com)."

Thursday, September 21, 2006

Wednesday, August 23, 2006

Windows PowerShell: "Windows PowerShell

Windows PowerShell is a new command line shell and task-based scripting technology that provides comprehensive control and automation of system administration tasks. Windows PowerShell allows Windows administrators to be more productive by providing over 100 system administration utilities, consistent syntax, and improved navigation of common management data such as the registry or Windows Management Instrumentation (WMI). Windows PowerShell also includes a scripting language which enables comprehensive automation of Windows system administration tasks. The Windows PowerShell language is intuitive and supports your organization’s existing scripts and command line tool investments. Exchange Server 2007 and System Center Operations Manager 2007 will leverage Windows PowerShell to provide improved command line automation."
Scripting Tools and Utilities: "Script Center
Scripting Tools and Utilities

If you want something done right, why not let someone else do it for you? All the tools you need to create great scripts are right here. If it’s not here, it doesn’t exist. Or it’s somewhere else, but you’re on your own there."

Monday, July 10, 2006

Threaded code - Wikipedia, the free encyclopedia: "Threaded code
From Wikipedia, the free encyclopedia
Jump to: navigation, search

For multi-threaded programming, see Thread (computer science).

In computer science, the term threaded code refers to an implementation technique for programming languages that produces very compact code. Threading is a form of code consisting entirely of subroutine calls, written without the subroutine call instruction, and processed by an interpreter, which jumps to each successive subroutine in turn.

Threaded code is used in the Forth and early versions of the B programming languages, as well as many implementations of FORTRAN, BASIC, COBOL and other languages for small minicomputers.

The benefits of extremely compact code, in some cases, come at the expense of slower execution speed. However, in other cases there is a synergistic effect -- sometimes threaded code is smaller and faster than non-threaded code. In systems with virtual memory (where memory is simulated with a mechanical disk drive), threaded code may be hundreds of times faster than a less-compact design that does not fit in the available physical memory, because disk drives tend to be roughly a thousand times slower than random-access memory (RAM)."

Sunday, April 16, 2006

Two PhD theses on reliable, distributed systems:

From Lambda the Ultimate:
E Thesis: Robust Composition

Mark S. Miller's PhD thesis on Robust Composition: Towards a Unified Approach to Access Control and Concurrency Control is now online.

When separately written programs are composed so that they may cooperate, they may instead destructively interfere in unanticipated ways. These hazards limit the scale and functionality of the software systems we can successfully compose. This dissertation presents a framework for enabling those interactions between components needed for the cooperation we intend, while minimizing the hazards of destructive interference.

Great progress on the composition problem has been made within the object paradigm, chiefly in the context of sequential, single-machine programming among benign components. We show how to extend this success to support robust composition of concurrent and potentially malicious components distributed over potentially malicious machines. We present E, a distributed, persistent, secure programming language, and CapDesk, a virus-safe desktop built in E, as embodiments of the techniques we explain.

E rates as a (very) important language for anyone interested in ideas of messaging, distribution and security. The nice thing about a thesis (such as this one and Joe Armstrong's) is that it gives a nice historical account of the related work and influences.


And from Joe Armstrong SICS home page: "Programming reliable systems (Ph.D. thesis)

making reliable systems in the presence of software errors.

Here are some ideas on how to make reliable systems that function even in the presence of software errors. This thesis describes the thinking behind Erlang, Concurrency Oriented Programing, UBF and building reliable systems from communicating components."

From Erlang:
Related links:
  • Joe Armstrong's PhD presentation
  • Making reliable distributed systems in the presence of software errors
  • Wednesday, February 15, 2006

    .NET Decompiler: "It was only a matter of time before decompiling of .NET Exe's and DLLs to MS Interlingua became a reality. Here are a couple of industry strength .NET decompilers which produces some incredibly accurate results.

    Salamander is a .NET decompiler that converts executable files (.EXE or .DLL) from Intermediate Language (IL) binary format to high-level source codes, such as C#, managed C++, Visual Basic.NET, etc. For more than 8,000 classes that have been tested, Salamander always produces equivalent and recompilable codes that are remarkably close to the original source codes.

    you can try it online here

    Another very interesting decomplier is Ankarino, a very powerful command line tool which is provided as an open source utility, so you can get under the covers and see how it works.
    give it a whirl here"
    Canonical OPC .NET (DotNet) interoperability article on Google Groups (Dave Adair): "This is the source for my implementations at work. I believe the Dave in the discussion is Dave Adair.

    http://groups.google.com/groups?hl=en&threadm=eWoEy3V8BHA.1380%40tkmsftngp03"

    Thursday, February 09, 2006

    Slashdot | Debugging Asynchronous Applications?:

    Some great suggestions from this article!

    "Debugging Asynchronous Applications?
    Posted by Cliff on Wednesday February 08, @08:20PM
    from the mind-your-breakpoints dept.
    Communications Programming
    duncan bayne asks: 'I'm attempting to debug a complicated telephony application, written in C#, that's almost entirely event driven. This is the first time I've debugged a large asynchronous application that isn't a GUI, and I'm curious to know what advice the Slashdot crowd has to share - have you any recommended tools, best practices, or common pitfalls to avoid?'"

    I'm not sure if you are 2.0 yet, but if you are, start by taking a look at VS2005. In the debug department, enhancements include better JIT debugging, stepping into XML/Web services from a client, and state-driven object inspection. Object Test Bench (OTB) is a simple object-level test utility. You create instances of your objects, invoke methods, and evaluate results... to shorten the task of coding, debugging and re-coding. I'm not sure about telephony specifically, but WSE/WS* SOAP layers can be hard to manuever through in a debugger, yet VS2005 does it quite nicely via WSDL.

    One other suggestion... "event bus" apps like you describe are good candidates for capturing as much runtime data as possible, so make sure you adjust your build parameters and do as much of that as possible, especially in problem assemblies. Oh, and don't forget to build nUnits. Sounds like you're walking into some prewritten code, but the effort might be worthwhile.

    Tuesday, February 07, 2006

    Programming Languages: Application and Interpretation | Lambda the Ultimate: "Programming Languages: Application and Interpretation

    A new release of Shriram Krishnamurthi's programming languages book is available."

    Scheme, Haskell, Prolog. He implements a lot of this crap in the book.

    Friday, February 03, 2006

    On this site you'll find some quick links to several sites about .NET, ASP.NET, upcoming technologies etc as well as links to my own articles and other projects I'm participating in.

    I hope you enjoy your visit on my site! Also check out my technical blog which is updated far more regularly than this website :-).

    Author: Bart De Smet, MVP on Visual C#

    C Sharp - Wikipedia, the free encyclopedia: "C# (see section on naming, pronunciation) is an object-oriented programming language developed by Microsoft as part of their .NET initiative. Microsoft based C# on C++ and was influenced by some aspects of Java. C# has a procedural, object oriented syntax that combines aspects of several other programming languages, most notably C++, Java and Delphi. Since C#'s principal designer was the designer of Borland's Turbo Pascal, Turbo Pascal for Windows, and Delphi, concepts from those languages are apparent in C#. Other contributions can be traced on a programming language history chart. C# attempts to fit well for both rapid development, like Visual Basic or Delphi, and for complete full-featured desktop applications."

    Thursday, February 02, 2006

    Programming Language transformation? | Lambda the Ultimate: "Intentional Programming

    There was Microsoft's Intentional Programming which does something along the line of what you want though less ambitious. SCID is a similar thing that was thought up earlier.
    By Derek Elkins at Thu, 01/26/2006 - 18:59 | login or register to post comments
    Re: SCID

    SCID looks neat, thanks for the link! (Although, at least at first blush it reads like a hyper IDE vs. something which can transmogrify between horribly different languages.)
    By raould at Thu, 01/26/2006 - 21:24 | login or register to post comments
    Not automated but...

    It can't really be automated at this point, but there are efforts being done for more language interoperability. .Net is one of the examples, and a lot of people are now reusing the JVM in order to be 'Java compatible'.

    However for both of theses you need to target either an high level language (by generating Java or C# sources) or directly the VM bytecode (JVM or CLR). That's why I wrote NekoVM which defines an easy-to-target intermediate language and provide the VM and the libraries to run it.

    It should greatly ease the language compiler implementation by providing a common runtime. And if you write a Neko -> Your language converter, you will be able to reverse the process, and translate other languages targeting Neko back into yours."

    Thursday, January 26, 2006

    C? vs. Erlang? | Lambda the Ultimate: "C? vs. Erlang?

    I know there was C? topic before. But the discussion really had more to do with Xen (XML, DB integration) than the Polyphonic C# concurrency part. I'm an Erlang newbie myself, but I already can see that asynchronous communication is the common thread to both languages and this approach is going to be big - can be used from embedded system to biz process orchestration.

    Looking at the Santa Claus sample, C? code seems to be quite compact and the syntax extension to C# is minimal. However process/thread creation is implicit, and it seems to be a little more difficult to reason. I would imagine a solution in Erlang clearer, but maybe longer.

    Any thoughts/pointers on the pros and cons of different concurrency approaches? We really should have a 'great concurrency shootout'."
    MochiKit – A lightweight Javascript library: "MochiKit makes JavaScript suck less

    MochiKit is a highly documented and well tested, suite of JavaScript libraries that will help you get shit done, fast. We took all the good ideas we could find from our Python, Objective-C, etc. experience and adapted it to the crazy world of JavaScript.
    Reliable

    MochiKit has HUNDREDS of tests. We build real applications with this thing. So even though development can move fast, we make sure to get tests written. This also makes platform compatibility issues much easier to detect and resolve than the 'guess and check' style of quality assurance seen in some of the other libraries out there. It's not broken.
    Documented

    You're unlikely to find any JavaScript code with better documentation than MochiKit. We make a point to maintain 100% documentation coverage for all of MochiKit at all times. You don't have to fumble around reading our source code or leafing through examples to find out how something works.
    Evolutionary

    MochiKit can adapt to anything you throw at it. It makes no assumptions about how your code needs to act, and it has hooks (by way of the the adapter registries) that makes sure that you can define your own comparisons, programmer representations, iterators, or DOM node coercion for any object in any way you wish. We'll gladly serve you all the Kool-Aid you want, but we're not goi"
    Javascript Inheritance | Lambda the Ultimate: "Javascript Inheritance

    This seems like a nice summary of various approaches, and provides an interesting prespective on prototype based languages in general and on Javascript in particular. Some of the libraries mentioned were discussed here before.

    It is tempting to compare this to various documents trying to show 'how to add objects to Scheme/Haskell/etc.' The solutions are rather similar..."

    Wednesday, January 25, 2006

    Slashdot | How To Choose An Open Source CMS: "How To Choose An Open Source CMS
    Posted by ScuttleMonkey on Wednesday January 25, @08:56AM
    from the focus-on-the-problem dept.

    An anonymous reader writes 'Content management specialist Seth Gottlieb has written an easy to understand how-to on selecting an open source CMS. Gottlieb is also responsible for the whitepaper 'Content Management Problems and Open Source Solutions' which summarizes 15 open source projects and distinguishes between open source CMS and proprietary software selection.'"

    Tuesday, January 24, 2006

    36. Purple Cow. Gelett Burgess. Modern American Poetry: "36. The Purple Cow
    (Reflections on a Mythic Beast Who's Quite Remarkable, at Least.)

    I NEVER saw a Purple Cow;
    I never hope to See One;
    But I can Tell you, Anyhow,
    I'd rather See than Be One. "

    Monday, January 23, 2006

    Cooperative Linux: "Cooperative Linux is the first working free and open source method for optimally running Linux on Microsoft Windows natively. More generally, Cooperative Linux (short-named coLinux) is a port of the Linux kernel that allows it to run cooperatively alongside another operating system on a single machine. For instance, it allows one to freely run Linux on Windows 2000/XP, without using a commercial PC virtualization software such as VMware, in a way which is much more optimal than using any general purpose PC virtualization software. In its current condition, it allows us to run the KNOPPIX Japanese Edition on Windows (see Screenshots)."

    Thursday, January 19, 2006

    GParted -- LiveCD: "LiveCD

    The power and simplicity of GParted on a biz-card sized LiveCD.

    The CD aims to be fast, small in size, and use minimal resources
    to get that disk partitioned the way you want it. GParted LiveCD is based on Slackware Linux and uses Xfree86's Xvesa, the lightweight Fluxbox window manager, and the lastest 2.6 Linux Kernel.

    Being up to date is important! GParted LiveCD will be updated along side the GParted source releases and have minor releases when bugs are fixed or new filesystem tools become available.

    GParted LiveCD runs on most x86 machines with a PII or better and a Vesa 2.0 compatible video card."

    Wednesday, January 18, 2006

    Maverick Speak: "DataSets Vs Custom Entities - The Eternal Debate

    I was involved in an eternal debate again. This time I was very much convinced that it was going to be an easy one as it is one of my favorite topic. DataSets Vs Custom Entities. I can already see few eyebrows raised. J I know most of the times the answer is ‘It depends”. The job was cut out for me as I had to defend an Architecture which was using Custom Entities as data carriers. I am glad that I had to defend custom entities as that’s my personal preference as well. I probably won’t go into the complete details of my defending points. Probably, I shall write another post which will include all the points to consider before deciding upon the right data carrier for any application."
    Welcome to thinkingMS.com
    Are these Microsoft guys? In any case, Siram Krishnan (previous post) mentions Roshan James as being an inspiration to him. Roshan James has some really cool Scheme posts.
    Sriram Krishnan : Lisp is sin: "Lisp is sin

    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"
    [Languages] You Are Not Lispless!: "While we are Lisping, lispen close. You, too, can speak (code) with a Lisp! If you have Visual Studio.NET, or the .NET Framework SDK, but have not yet fully indulged your curiosity, you may not know that you already have a Lisp compiler that compiles to MSIL. Check out the CLisp Sample project in your “Tool Developers Guide” directory. You will find it located at your equivalent of

    C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Tool Developers Guide\Samples\clisp"

    Tuesday, January 17, 2006

    L Sharp .NET: "L Sharp .NET is a powerful Lisp-based scripting language for .NET. It uses a Lisp dialect similar to Arc but tightly integrates with the .NET Framework which provides a rich set of libraries.

    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."

    Tuesday, January 10, 2006

    Ada95 Lovelace Tutorial Home Page - uses programmed learning (short quizzes, etc.).
    SPARKAda | Lambda the Ultimate: " A SPARK program has a precise meaning which is unaffected by the choice of Ada compiler and can never be erroneous.

    * 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?"
    ongoing · Don’t Invent XML Languages: "The Big Five · Suppose you’ve got an application where a markup language would be handy, and you’re wisely resisting the temptation to build your own. What are you going to do, then? ¶

    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

    Cell phone email addresses (from Continental Airlines - Flight Status Notification):
    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

    The Art of Photography
    " 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

    STSC CrossTalk - Correctness by Construction: A Manifesto for High-Integrity Software - Dec 2005: "Correctness by Construction: A Manifesto for High-Integrity Software
    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.

    Friday, November 04, 2005

    JavaScript Reference
    A really cool, free online quick reference by VisiBone
    Windows Script Engines
    To implement a Microsoft® Windows® Script engine, create an OLE COM object that supports the following interfaces.
    Adding scripting to .NET programs, from MSDN
    Make your .Net application support scripting - a practical approach
    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

    C? on Wikipedia.
    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)

    Design by Contract Framework for .NET

    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.

    From Lambda the Ultimate:

    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.

    Tuesday, August 30, 2005

    Some links from the Code Project:

    ASP Code Analyzer - A simple tool to find unused subs, functions and variables in your ASP code.

    DHTML Tree View of Arbitrary Depth using AJAX

    Automated Document conversion with OpenOffice

    A word-wise Html text compare and merge engine - C#.net implementation of html text compare and merge engine based on similar algorithm as unix diff

    .NET Scheduled Timer - A timer that easily supports absolute schedules like run at 4:00 AM every day or at 5:00 PM on Fridays.

    A Fast CSV Reader - A reader that provides fast, non-cached, forward-only access to CSV data.

    Sunday, October 24, 2004

    From MSDN Library:
    Monitor Synchronization Technology Sample -- This sample demonstrates how to use the Monitor class for thread synchronization. The Monitor type's static functions are used to enforce mutually exclusive access to a protected block of code.

    Readme Location

    For more information, see the Readme file at <SDK>v1.1\Samples\Technologies\Threading\MonitorSynchronization

    Concepts Presented in This Sample

    thread synchronization, samples; Monitor class, samples; AutoResetEvent class, samples; Interlocked class, samples; Threading namespace, samples; ThreadPool class, samples; WaitCallback class, samples; Thread class, samples; delegates, samples; ThreadStart delegate, samples; threads, samples; Delegate class, samples

    Communicating Sequential Processes, or CSP, is a language for describing patterns of interaction. It is supported by an elegant, mathematical theory, a set of proof tools, and an extensive literature. The book Communicating Sequential Processes was first published in 1985 by Prentice Hall International (who have kindly released the copyright); it is an excellent introduction to the language, and also to the mathematical theory.
    From this Wikipedia page: Communicating sequential processes

    Friday, October 22, 2004

    Working With Events Over Remoting by Russ Nemhauser: Subscribing to events of objects instantiated via remoting can be a tricky business. However, it is possible to build solid event publish/subscribe applications while using remoting simply by applying a few extra strategies then might not seem immediately obvious. Throughout the document, I will refer to the process that exposes the object for remoting as server and the process that instantiates an instance (local proxy) of a remote object as client. However, all of these processes may in deed take place on the same machine.
    Murphy's Law calculator

    .NET Remoting FAQ -- includes Changes for Remoting in .NET Framework 1.1 / Visual Studio 2003: Adjusting the typeFilterLevel to enable events, delegates and client-activated objects

    Sunday, October 10, 2004

    Learning Classifier Systems Software
    Scientists Define Murphy's Law - things don't just go wrong, they do so at the most annoying moment.The formula, ((U+C+I) x (10-S))/20 x A x 1/(1-sin(F/10)), indicates that to beat Murphy's Law (a.k.a. Sod's Law) you need to change one of the parameter: U for urgency, C for complexity, I for importance, S for skill, F for frequency and A for aggravation.

    Or in the researchers' own words: "If you haven't got the skill to do something important, leave it alone. If something is urgent or complex, find a simple way to do it. If something going wrong will particularly aggravate you, make certain you know how to do it."

    Wednesday, August 04, 2004

    Free SSH and SCP for Windows 9x, NT, ME, 2000 and XP -- Includes instructions on how to automate SSH logins.

    There's also the "snail book" -- SSH: The Secure Shell: The Definitive Guide -- from O'Reilly