This is just a spot to keep miscellaneous links. It also shows you what a geek I am.
Wednesday, May 30, 2007
Thursday, April 19, 2007
Erlang
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:
- http://yarivsblog.com/articles/2006/06/14/more-erlang/
- http://armstrongonsoftware.blogspot.com/2006/08/concurrency-is-easy.html
- http://www.process-one.net/en/blogs/article/web_20_shifting_from_get_fast_to_get_massive/
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:
- asn1-1.4.4.12.pdf
- design_principles-5.5.3.pdf
- dialyzer-1.5.1.pdf
- efficiency_guide-5.5.3.pdf
- getting_started-5.5.3.pdf
- inets-4.7.8.pdf
- mnesia-4.3.3.pdf
- parsetools-1.4.1.pdf
- programming_examples-5.5.3.pdf
- reference_manual-5.5.3.pdf
- sasl-2.1.4.pdf
- snmp-4.8.4.pdf
- tutorial-5.5.3.pdf
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
InfoQ: .NET 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
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
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
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
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
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.