Mark Shuttleworth » Blog Archive » Fantastic engineering management is…
Great engineering depends on deep, uninterrupted focus. But great management is all about handling interrupts efficiently so that engineers don’t have to.
Great engineering depends on deep, uninterrupted focus. But great management is all about handling interrupts efficiently so that engineers don’t have to.
Yesterday a friend asked me a suggestion to quickly put online a form to gather email of people interested in a service he is promoting.
I told him to go with http://wufoo.com. Or Launchrock, but it's still in private beta. Anyway, my advice was to use something existent and not to reimplement it.
Comments [0]
I am assembling the software developers team for a new, financed startup.
The final product will be a web service that will let user engage in videogame tournaments and matches and will focus the most famous games in the multiplayer scenario. The team will build the new product from scratch. We are interested in experienced developers as well in younger ones. We are not considering applications from people with zero or almost zero experience. The development will start in September 2011 in Milan. There's a very high probability that the team will be relocated in London after a few months of development or immediately after the public launch. The development will require some months and the team will be dedicated and committed to the build and launch of the product. The company is interested in a team that will remain in the company after the project is launched, to continue working on improvements on the product. There is not any strict technological requirement to apply for this position. My personal background is public but I will consider and choose technologies after the team is formed and not vice versa. Also, the team will be involved in the upfront analysis and extimation so to build the release schedule together. For any information feel free to contact me personally.Comments [0]
Starting in September, I'll work close with Telnext, which has been my client in the last year.
Comments [0]
I've downloaded Eclipse 3.7 final, codename Indigo, Java Edition (not JEE).
As expected it has Maven integration by default, and that's good but
is not the real good news.
Comments [0]
Artivio is project I made that I will launch for private beta in the next month. It is mostly a CMS for artworks: pictures, metadata, search... nothing more than this for now, but I'm actually quite satisfied of the state of the project, form different reasons:
First, Artivio now does well what it does. It's still basic but already useful and it works fine.The Making Of
Artivio is a made with many open source technologies, a few I master since some years like Wicket, other that I became expert during the last year: Restlet, OSGi, some JMS with ActiveMQ, MongoDB. Also, For some of these technology there is something I want to talk about and I'll promise here to write these articles:
I've already written the article about Wicket so I'll probably publish that first, and there is already a generic introduction to the Event Based Application (1)
Also, Artivio now is a lot more "cloudified": lives on a Amazon EC2 instance, stores pictures on S3, the database is hosted at MongoHQ and the User Administration is delegated to Pipelean Accounts (2) that offer a per user authentication, authorization and OAuth connection with third party services. Code QualityBut today is Sunday and I'm spending some time making project cleanup (mainly removing unused classes) and analyzing the status of the code. Just looking and using it, it seems good: for example, today I've been able to add the "Remove Picture" and the "Force Picture Upload during Bulk" features in less than one hour and it has been smooth: implementation involved four classes in nice direct flow: a new Link in the page, one line of code per class involved with the last one with 4 lines to update the database and eliminate two files from S3 storage. What do automated analysis say? Sloccount says there are about 3100 lines of Java code in three projects (core, api, web), with 808 lines of XML for Spring IOC configuration, Maven POMs and the HTML templates also, I think. Without the test tree of the source, numbers are, for Java only core: 236Comments [0]
Since a year I'm developing my applications following the usual principle of "non duplication" but pushing it to an higher level then just code duplication.
I'm moving to eliminate the "runtime duplication", or maybe I something that can be called like that.
This lead me to decoupled modules that communicate through messages, of course. This is pretty normal in the world of software integrations, is a well known Integration Pattern. But I wanted to put this into a single, standard application, like a CMS that manage images. There are two way I can achieve this.
Scenario
Let's say that there is a message broker I can use, external to the application, that just works. The app receive a file uploaded by the user. It's an image I need to:
Now point 1 is handled by the web framework and is synchronous (but some tricks on the user interface side that are outside the scope of my analysis now)
Simplest solution is to do 2,3 and 4 in a row: that stuck the gui of course. I should have a scheduled thread to search for new files and performed 2, 3, 4 so that the GUI becomes free as long as upload is complete, and the "backend" perform the rest of the processing: there's the scheduled thread to tune and is not that nice, is it?
At the end of point 1, the gui send a light message to the broker saying "there's a new file called ..." and it send this to the right recipient(s). The receiver performs the conversion and send a new message, this time to a new component that perform the upload to S3 and when it's finished send a last message that is received by the original application that performs the association between the stored blob and the database: now the image is available and we can eventually notify the user, maybe with some cool user interface async message.
Push further
Now if the broker is something like ActiveMQ, the components have some listener to different queues or topics and that's done. What is the next question?
Where does those components lives? In the same process of the application? Or maybe somewhere else?
There's a better environment than java?
Now, this is something I've done many times in the last year and I'm trying to make it more "standard" for all my apps. What I'm wiondering is: there a more natural way to do this? I mean, something more deeply integrated with the language?
In java, there are a lot of good tools to do this but everything only exists in my mind and some docs. This kind of architecture really is not supported by the environment, and unit testing that is possible but hard to do an maintain. I'm talking, maybe, about the actor model. Or something that is possible with node.js. Are those technologies really more suitable to create programs the way I just narrated? If so, what is the dark side of the moon?Comments [0]
What happened to me today.
The OSGi Manifest file generator tool suddenly started inserting a dot in the import package. A dot? A dot. Does not make sense, who tells him to do that?Comments [2]
Comments [0]
Yesterday, February 28th 2011, Apache Karaf 2.2.0 OSGI container has
been released. It's a serious upgrade, the release notes say:
Some highlights include many new or updated commands, a LDAP JAAS module with login support, an updated feature service, a feature for Aries transaction, JPA & JNDI modules, expanded documentation, and new versions of most dependencies.
and here is a list of the most significative improvment I see:
Also we have some minor upgrade to Aries, Spring, Jetty, Pax and so on
and something like 50 bug fixes, here's the complete release notes,
find out what's relevant for you.
http://karaf.apache.org/index/community/download/karaf-2.2.0-release.html
Comments [0]
Comments [0]