This is just a spot to keep miscellaneous links. It also shows you what a geek I am.
Monday, March 26, 2007
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
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."
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."
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 - |
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 -
[ 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 -
Friday, February 09, 2007
NetPing util
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
Sunday, January 07, 2007
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
Friday, December 29, 2006
"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
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
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
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
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
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
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 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 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
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"
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"