Main

April 26, 2009

Intentional Software - Video of a Presentation

" Intentional Software is pioneering a radical new software approach that separates business domain knowledge from software engineering knowledge. This approach accelerates software creation and maintenance as domain experts themselves contribute domain knowledge in their favorite domain language and notation."

.. interesting video/presentation about DSL in general, but also about their workbench .. especially around ~36min, when they show the Pension Fund Calculation workbench .. I know, still doesn't sound that cool .. and by the way it is part of Microsoft's Oslo project .. but just watch it :-) ..

September 07, 2008

I’m So Totally, Digitally Close to You

I’m So Totally, Digitally Close to You: ".. Social scientists have a name for this sort of incessant online contact. They call it “ambient awareness.” It is, they say, very much like being physically near someone and picking up on his mood through the little things he does — body language, sighs, stray comments — out of the corner of your eye.."

.. what a brilliant article by Clive Thompson! ..

June 15, 2008

code_swarm

"code_swarm shows the history of commits in a software project. A commit happens when a developer makes changes to the code or documents and transfers them into the central project repository. Both developers and files are represented as moving elements. When a developer commits a file, it lights up and flies towards that developer. Files are colored according to their purpose, such as whether they are source code or a document. If files or developers have not been active for a while, they will fade away. A histogram at the bottom keeps a reminder of what has come before."

.. :-) .. reminds me of one of my own tools for visualization of activities in a software project, it was called "gwunderi" ..

May 12, 2006

Google Talks

Different recent talks given at Google are available as videos on Google Video. I previously mentioned the video from LindenLab, but there are many many more great other ones. There is also an RSS feed available.

April 12, 2006

Ferrari F430 Spider

.. something completely different .. still not part of my world .. but just worth watching .. a great video about the Ferrari F430 Spider by a brilliant reporter of the "Fifth Gear" magazine .. if you don't want to drive a Ferrari after watching that video, sorry, but you have to be from some other planet, or world ..

March 29, 2006

Where Did All the Beautiful Code Go?

Artima Developer Forum: "I see a lot of agreement in the software community that poor quality code and other forms of technical debt slow you down. Where I see disagreement is on how to manage technical debt. What is your approach?"

.. Things like: "The only way to go really fast is to write the best code you can possibly write, with the best design you can possibly give it. Any other technique will slow you down.", a previous posting by Bob Martin .. and many other interesting thoughts .. anyway, a must / nice to read thread for software developers ..

February 24, 2006

Dynamic Plug-In Linking, Loading, & Dispatching with Ada 2005

"In this article, we show how a statically-typed, statically-built, object-oriented language such as Ada can make full use of the notion of dynamic plug-ins. To that end, we build an extensible application and illustrate adding new functionality to it at run-time via plug-ins. Selected new features of Ada 2005 are used in the implementation and are highlighted."

.. completely forgot about ADA .. was the first language I used in which Threads were / are part of the language itself .. and "Rendezvous" for fancy Thread to Thread communication .. by the way, do you remember occam? ..

January 01, 2006

Recommended research papers by Greg Linden

Recommended research papers: "I keep getting requests to recommend papers in personalization, recommendations, and information retrieval, mostly from students.

I've been responding to these individually, but that seems inefficient, so I decided to go ahead and post a list of a few of my favorites.

The focus in this list is on breadth, mostly surveys that provide a good introduction, mostly work that used very large data sets. Follow citations on Citeseer if you want to explore in more depth.

Enjoy! I hope it makes for interesting reading over the holidays."

(Via Geeking with Greg.)

.. cool, thanks Greg! ..

March 14, 2005

The 300GB iPod and you

The 300GB iPod and you:

We’ll spare you the obligatory iPod pimping commentary—namely because we’re sure you’d rather just let our mad-scientist sister site hackaday make the effort to see the disgusted looks on the faces of friends and family at an iPod abomination—but if you have to be the only kid on the block with a totally wacked out 300GB iPod connected umbilically to a 3.5-inch (that’s desktop, size) hard drive via adapted mini-IDE cable, be our guest. 75k songs in yr ‘pocket,’ dudes!

[Via hackaday]

March 04, 2005

Bluebottle OS

Bluebottle is a powerful operating system based on the Active Object System (Aos) kernel. It provides a compact runtime environment for the Active Oberon language, which supports active objects directly, and enables the construction of efficient active object-based systems that run directly on the hardware. Above this layer is a flexible collection of modules providing generic abstractions for devices and services, e.g., file systems, user interfaces and TCP/IP networking.

March 03, 2005

Review: VIA Epia MII-12000 motherboard

Review: VIA Epia MII-12000 motherboard: "It's quiet, it's small, it's powerful enough for everyday desktop use and versatile enough to be a set-top media device or small home server. It takes PCMCIA cards, IDE drives, DDR memory, and a standard ATX power supply, yet it's smaller than a laptop computer. It has a built-in DVD decoder (no more DeCSS!) and with its built-in AES chip it can encrypt and decrypt data faster than the most powerful Athlon 64 system. The question isn't, 'What can you do with the Epia MII-12000?' The question is, 'What can't you do with the Epia MII-12000?'"

(Via NewsForge.)

StatCVS offers a view into CVS repository activity

StatCVS offers a view into CVS repository activity: "StatCVS is a handy utility for creating charts of a Concurrent Version System (CVS) repository's activity. In this article, developer Tom Copeland explains how to install and run StatCVS, gives an overview of the reports generated, and then explores generating reports for multiple repositories, StatCVS internals and limitations, and more."

(Via IBM developerWorks Java technology zone.)

January 03, 2005

Got Videora? - BitTorrent Personal Video Downloader

Okay I have been obsessing about BitTorrent a bit too much these days, but I guess it is a technology which puts me in the media. It is also an area rife with innovation. Sajeet Cherian, emailed about his new software program, Videora.


[eHomeUpgrade]

December 03, 2004

The Magic that makes Google tick

The Magic that makes Google tick... an interesting article/interview about the Google infastructure.

August 05, 2004

Get your mobile social software here...

I ran across a couple of lists of mobile social software applications and mobile urban games.
[MobileWhack]

August 04, 2004

Google Hacks

I just ran across a pretty scary new Google hack today. It seems they have just recently added number span searching to their engine. Take a look at this example:

visa 4356000000000000..4356999999999999

As you can see, Google has searched the entire range against its DB. Within minutes I found some crazy sites like this one. Now please know that Google didn't create this tool to be used like this. It's actually quite handy when used correctly. Just an FYI for all of you. Know of any other Google hacks? Post them in my comments!

+krose
-- sign up for my newsletter to find out what I'm up to --

[kevin rose dot com]

May 14, 2004

Is Design Dead?

"For many that come briefly into contact with Extreme Programming,
it seems that XP calls for the death of software design. Not just is
much design activity ridiculed as "Big Up Front Design", but such
design techniques as the UML, flexible frameworks, and even
patterns are de-emphasized or downright ignored. In fact XP
involves a lot of design, but does it in a different way than
established software processes. XP has rejuvenated the notion of
evolutionary design with practices that allow evolution to become a
viable design strategy. It also provides new challenges and skills as
designers need to learn how to do a simple design, how to use
refactoring to keep a design clean, and how to use patterns in an
evolutionary style." .. more

[martinfowler.com: Updates]

October 21, 2003

Return to the Planet of the Exceptions

Return to the Planet of the Exceptions:
"This is one reason that returning null from a method is generally a bad idea. null is usually a disguised error code. It means “you expected something to be here, but it really isn’t”. Worse, in Java a null is a time bomb, waiting to be dereferenced and blow up the code far from the original problem. If there being nothing to return is unexpected, consider throwing an exception. If it is expected, consider a null object refactoring, or changing the method to return an array or collection that can be empty."

July 26, 2003

Laws of Software Complexity

Matt Quail has blogged about a first law of software complexity. It's an analogy of the First Law of Thermodynamics, also known as the Law of Energy Conservation. The analogy Matt is that without radical changes in abstractions, a complex system will remain complex. That is complexity is conserved.

July 18, 2003

Software engineering and the art of design

Software engineering is a lot less like other kinds of engineering than most of us would like to think. There is an aspect of art to what we do, that is learned not in school but by finding a master and serving an apprenticeship. (From Jim Waldo's Weblog) [Jim Waldo's Weblog]

July 08, 2003

Proliferation of Java Microkernels and Extinction of J2EE Containers

JBoss was possibly the first to introduce a non-monolithic J2EE implementation. The implementation was developed on top of JMX based infrastructure and dubbed a Microkernel architecture. The clear advantage of such an approach was to allow best of bread solutions to be plugged in. The JMX based microkernel design for J2EE was later copied by HP and Macromedia.

The JMX microkernel approach was also leveraged by Apache's Avalon project to build more generic servers (i.e. email, directory, web, jabber etc.). The Compiere project a ERP-CRM application also chose to implement its services in terms of JMX managed services.

The Eclipse IDE also chose a microkernel design to manage the various plugins that can be dynamically added to its workbench. Realizing the potential of such a design, Eclipse has embarked in a project called Equinox to explore this even further.

Howard Ship the developer of Tapestry, a Web Application framework who's claim to fame is its highly componentized nature, is embarking in a new project HiveMind. He's studied the JBoss and Eclipse approaches and believes he can do even better!Meanwhile, Sapient the Web Consulting company has relased its own open source version of a microkernel framework named Carbon. Another group, spinning off from JCorporate, is introducing a "meta-framework" named Keel leveraging the Avalon microkernel. In short we are seeing the emergence and thriving of a new species of software construct.

Also, in an earlier piece about Aspects vs. Components, I forgot to mention that an Aspect based approach to building Containers is analagous to building a modular as opposed to a monolithic Container.

This leads me to another fearless forecast. The combination of Aspect Oriented Programming and Microkernel Architectures will lead to the extinction of the current monolithic J2EE containers that we've known and loved (or despised?) so well.

If you didn't quite grok what I just said, then try visualizing the passing away of dim-witted lumbering dinosaurs with adaptive, nimble mammals emerging in the background. Hope you get the picture.

[::Manageability::]

June 17, 2003

101 Ways to Make Money off Open Source

Lately, I've been thinking of how to make money on open source Java. I asked a supposed expert, but he didn't answer. So I decided to consult the Hive Mind by building a list. I hope to get a lot of creative contributions. It's the "Lazy Web" in action!

So why 101, well just like with my previous list the reasons are the same. "101 reasons is actually a pretty ambitious number, however its always good to aim high first. If you don't succeed you could always relax the criteria for success! " So here's the latest accumulated list:

  1. Sell the Reference Manual ( JBoss)
  2. Sell a subscription of the documentation (CDN)
  3. Sell the Installer (Out of the Box)
  4. Sell Custom Software Development (CDN)
  5. Sell Pre-Integrated Applications (JCorporate, RedHat ACS)
  6. Sell "Enterprise" version. (WSAD, Sun Studio)
  7. Sell Extensions (Instantiations, Embarcadero, SlickEdit )
  8. Sell a Consumer Device (Tivo)
  9. Sell Proprietary Software by improving Open Source Software (Poseidon)
  10. Sell Code Management Services (Sourceforge, Sourcecast)
  11. Sell Hosting Services (JCentric, WebApp Cabaret, EApps)
  12. Sell an Application Service Provider (?)
  13. Sell Conferences (JBoss)
  14. Charge for changing the License (SOFIA)
  15. Sue people using Open Source (SCO)
  16. Publish books for Open Source (Oreilly, Manning, Wiley)
  17. Sell A Book (Jason Hunter, Martin Fowler)
  18. Sell Development Tools (see Adalon, Camino for Struts)
  19. Sell a Magazine (Open source magazine)
  20. Sell Business Applications (Compiere, Ofbiz)
  21. Sell Speaking Engagements
  22. Sell Open Source Migration Services
  23. Sell White Box Hardware (Penguin)
  24. Sell A Subscription Plan for Integrated Components (MyEclipse)
  25. Sell A Network Appliance (SourceFire)
  26. Sell Project Management Services (Assembla)
  27. Sell Training (CDN)
  28. Sell Adverstising (SourceForge, Javalobby, TheServerSide)
  29. Sell A Proprietary Product, Advertise using Open Source (RefactorIT)
  30. Sell Computer Time (Internet Cafe)
  31. Sell Gaming Time (?)
  32. Sell Proprietary Software built using Open Source Software Tools (Ant, JUnit, Eclipse)
  33. Sell Proprietary Software Bundling Open Source Software (WebMethods, Cysive)
  34. Sell Support and Maintenance Plans (JBoss)
  35. Sell Certification (JBoss)
  36. Sell Systems Administration Services
  37. Sell On-Site Consulting and Coaching (CDN)
  38. Sell Remote Debugging and Trouble Shooting (CDN) [duplicate of 34?]
  39. Sell Open Source Application Specialized for a Particular Domain (Timesys for Realtime domains, Xemo for Music)
  40. Sell Accessories ( ThinkGeek , JoyOfTech )
  41. Sell Network Usage ( iMode )
  42. Solicit Donations

If you were observant enough, you would notice that the list has a slant towards Java open source projects. That's just my bias.

[::Manageability::]

June 02, 2003

United States of Whatever

United States of Whatever, Liam Lynch, musician and creator of the "Sifl and Olly" show, is in love with robots, filming TV shows straight to computers, testing new tech with the Jim Henson Company, and more...

May 26, 2003

Web Services, Weblogs and the Future.

In recent weeks a significant amount of discussion has been ongoing as to the future of Weblog APIs. At issue is that there are two similar, but different Web service APIs in use, but the community is in favor of one. Unaddressed issues remain and I wonder aloud what is the right way to go. [O'Reilly Network Weblogs]

Multiprocessor Work Sharing with Cocoa

O’Reilly: “If your application hasn’t been written to take full advantage of multithreading, it will not run any faster on two processors than on one. If your code includes any number crunching, you probably should consider how it could be restructured to take full advantage of that second processor, which will otherwise lie dormant, twiddling its thumbs while processor uno works its behind off.” [ranchero.com]

May 23, 2003

A New and More Powerful Definition of Objects

I was rambling the other day about the relationships between the Iterator pattern and pretty much everything. Eventually, I came up with a very strange insight, essentially I said that Iterator may be more fundamental than the tenets of Object Oriented programming (i.e. Identity, Inheritance and Encapsulation). It just turns out, that someone has already thought about this before, and I'm actually pointing in the right direction!

E Rights, a project that has continually impressed me with its uncanny insight on the world of programming language design, writes about the fundamentals of the E language object model. The E Language is not something new, in fact, if memory serves me correctly, a precursor of this language also named E, was possibly the first language that was written for the JVM (aside from Java of course). It's just simply amazing that these guys have seem to get it right for all this time. I'm right now on the verge of conversion!

The E language's object model is based on:

  • Lambda Abstraction
  • Message Dispatch
  • Local Side Effects

I've read the above article several times in the past several years, however I didn't really get it. In fact, there's still some stuff that hasn't sunk in yet. However, my recent game with Iterators have given me a much better understanding of it.

Essentially what they're saying is that you've got functions now you can have functions defined inside functions; now the inner functions can use variables defined in the outer functions (the usual scoping rules); now the fact that these variables may be shared my many inner functions makes them in a way similar to member variable.

Then they make the generalization that a function itself in really a degenerate form a bundle-of-methods. Matter of fact, the recent article about C# delegates in Java makes the same observation. Delegates are just degenerate version of annoymous inner classes, its no surprise that C# has plans on adding annonymous classes! So these bundle-of-methods are like objects that contain methods.

So far that gives you constructs that give you member variables and methods. The final addition of course is to add state. At this moment I don't fully grok their statements.

It just turns out that this definition of object orientedness has been around for 30 years:

We have found such lambda-based object definition to be simpler, more expressive, and more intuitive, than either of the common choices -- class-based and prototype-based object definition. The lambda-based technique for defining objects dates back at least to 1973 [Hewitt73], so we find it distressing that the other two are often assumed to be the only available choices.

Software archeology has paid dividends. Old things are new again!

[::Manageability::]

May 22, 2003

Words of Wisdom on Designing Usable APIs

Bill Venners suggests that API design should consider programmers just like traditional users. It's a sentiment echoed elsewhere, Ken Arnold opines:

designing tools for programmers, including languages, APIs, and compilers, is a human factors problem

It's a huge leap to recognize this reality. Graham Glass, the creator of GLUE and founder of The Mind Electric (TME), blogs:

TME has a philosophy for designing software that I would like to share. The starting point for anything we build is the "user experience". Before we even think about stuff like standards compliance or implementation, we focus on what a user of our software/APIs will experience. Simplicity is the #1 objective. Only when this has been accomplished (at least on paper) do we talk about implementation details. Only when this has been simplified do we think about standards compliance. Even though this might sound backwards, it always seems to work out well in the end.

Developing webservices with GLUE is an extremely pleasant experience (you can see a viewlet of it in action here). Thus, simplicity concerns override all other concerns, it does remind me of the "worse is better" philosophy to language design.

We can learn alot by studying the API's of GLUE, however has anyone written any tips on how to do this? I do recall a couple, Ken Arnold says:

Any mistakes you can't make impossible, you want to catch. In other words, first design such that improper things can't even be written or expressed. They are impossible to do. Errors you can't make impossible, you want to catch right away. So as soon as a user makes a mistake he or she is told.

Don't give people a method that does something error-prone. Give them the method that allows them to do the subset that is not error-prone. Suppose you have a file object on which you can call open and close. You can only close an open file. You shouldn't be able to call close on the file object, because it may not be open. The open method should return something on which you can invoke close.

The first suggest seems to allude to the checked exception handling found in Java. At this moment there's plenty debate regarding that topic. The second seems to allude to the Curried Object pattern, that is encapsulate complex interactions in an object.

Kartzen Lentzsch, of JGoodies fame, writes about his reasoning behind his new Layout API:

SpringLayout needs more code than the FormLayout to express simple but frequently used form design. From my perspecitive, the main problem with SpringLayout is, that the layout specification language (Java code) doesn’t represent the human mental layout model well. You can hardly see the layout by just looking at the panel building code. FormLayout’s layout specification language has been designed to express how many people think and talk about layout. How many lines of code do you need to build the form in Example 3 with the SpringLayout?

FormLayout favors an expressive layout specification over extensibility. It has been designed to be powerful and flexible enough to layout almost every panel that I’ve designed during the last decade. It covers all panels in the JGoodies tools and seems to be able to layout all panels in large apps like the Eclipse JDT and the NetBeans IDE. And so, I doubt that there’s a need to extend the FormLayout – at least it isn’t urgent.

The first insight recommends that API's be defined to reflect the mental model of the programmer. The second is another suggestion, provide expressibility over extensibility.

That's four rules of thumb on how to design your API's, are there more? I am sure that most programmers are completely unaware of these, in particular Sun's programmers who continually create API's that favor complexity and extensibility over simplicity and expressibility. It's possibly a good exercise to collect all the "hall of shame" APIs we can find in the standard libraries.

:: Comments at Artima ::

[::Manageability::]

May 19, 2003

Sharing Your Site with RSS

Webmonkey: “RSS gained traction among small developers years ago, because it’s easy to code and simple to share. Today, RSS is gaining momentum with big commercial sites because the technology draws in a smart and growing audience.” [ranchero.com]

NY Times : "The wiki, a quirky...

NY Times: "The wiki, a quirky software technology that has been kicking around the Web since the mid-90's, is starting to gain respectability." [Scripting News]