Showing posts with label LazyWeb. Show all posts
Showing posts with label LazyWeb. Show all posts

Tuesday, January 26, 2010

Content Management System Advice?

Dear Lazyweb,

If you've not seen the OpenGamma website yet, you'll note that it could best be described as a "holding page." It says that we exist and are hiring, but not a whole heck of a lot more.

We're currently writing content for a Real Web Site where, amongst other things, we'll actually say what is that we're doing. For that, we need some way to manage content.

Our current four contenders is:

Confluence
We like Confluence as a wiki, and are using it for our internal wiki as well as the Fudge Messaging web site. Other people we know use it as their primary web site management platform. Should we follow them?
WordPress
Not just a blogging system, but a whole content framework! What's not to love! Aside from the performance of course, but just bung more VMs at it and we'll be fine.
Movable Type
Movable Type differs from WordPress in one primary way that we can see: it's primarily static in nature, which we like as it simplifies the hosting and performance quite a bit. Should we roll that out?
Drupal
Personally I've never actually used it in any way (unlike everything else above), but there are lots of very happy users.

We're trying to figure out which one we're going to roll with, because much will then guide our choice of the person/people who actually do the web site generation for us (we're financial technologists, not web technologists, and we're not stupid enough to try to do it ourselves).

With that in mind, Internet Flamewar/Fanboi War ON.

Love,
Kirk

Saturday, July 18, 2009

Best Multi-OS AuthN Solution?

Dear Lazyweb,

I'm going to be building a heterogenous network consisting of Linux workstations and servers, Mac workstations and laptops, Windows desktops and laptops (maybe the odd server here or there), and maybe a few fringe operating systems. It's completely Legacy Free: nothing there at all. My goals are to make sure that all my various CIFS/NFS/AFS shares are sharing credentials just fine, and that users don't have to maintain multiple passwords.

What's the current vogue for this? Ideally I'd be running something on !Windows, but if I need to stick a Windows Server somewhere I'll do it. I'd rather not, but I will. If not ActiveDirectory, do I roll with LDAP? Which implementation? On which OS? Do I go with kerberos, or the LDAP/NIS for *nix logins? Remote/semi-connected users?

I can't believe I have to ask, but working for Big Companies has addled my Systems Administration skills slightly.

Thanks in advance,
Kirk

P.S. I tried to ask this in ServerFault and before I could add content it warned me that the question was subjective and likely to be closed. So I didn't bother.

Friday, January 16, 2009

Help in Vacating Blogger/BlogSpot?

Dear LazyWeb,

I've been on Blogger and BlogSpot for a while now, and I'm sick of it. After a pretty minor configuration change yesterday locked everybody out of the comments for a number of hours, I've finally decided that it's time to move on. (More importantly, like many Google acquisitions, after the Big-G bought them out, innovation large seems to have ceased; I hate being that far behind the curve).

After looking at quite a few options out there, it looks like all the cool kids are using WordPress, so whether I like it or not I think I might be stuck with it.

So with that in mind, LazyWeb, can I ask you for advice:
  • Should I go with WordPress or with your favorite platform of choice (please, plug away!)
  • Should I host myself (on some type of cloud environment, probably FlexiScale)? What do I get out of this?
  • If I choose a hosted provider, which one do I go with? What am I trading off on this decision?
Please, LazyWeb, help me!

Love and Rants Always,

Kirk

Wednesday, October 01, 2008

IPC: Where My Queues At, Yo?

Updated 2008-10-20: Adrian Found Where My Queues At. Unbeknownst to me, they were there (somewhat all along) in POSIX Message Queues, more in the comments. I've changed this to be part of LazyWeb, because I really didn't know that they existed and haven't actually seen anybody using them. M4D props to Adrian.

Updated 2008-10-20 #2: POSIX Message Queues are close, but not quite it. I'll be doing another post on this, but turns out POSIX Message Queues aren't quite what I think mailbox semantics are, and some differences turn out to be key. Also, they've only been around since Linux kernel 2.6.6, which would explain why I've not seen them in more widespread use.

Not that long ago, my firm was interviewing someone from the Czech Republic who had been working in Frankfurt for the Deutsche Boerse, and some interesting stuff came out of that. Not the least interesting thing was that their entire infrastructure was still based on OpenVMS, and it was working extremely well. The secret? Queues. Or, rather, Mailboxes.

What a lot of people know about VMS, aside from the fact that it's Old and Not UNIX, is that it spawned Windows NT (WNT == VMS+1). What they don't realize is that it's actually quite a reasonable operating system that's kinda gotten a bad name because of the WNT thing, and because it's Not UNIX, but I want to address the thing that it's really gotten right, and that's queuing as an intrinsic form of IPC.

As I understood from the interviews, Deutsche Boerse uses this pretty extensively to distribute work: work is pulled from mailboxes, posted to other mailboxes, in a pretty standard modern MOM pattern. The recipients of messages may be on the same machine, or on another machine. They don't know; they don't care. Sounds like what you'd use an MOM system for, right? Only they don't use an MOM system, they use their operating system.

A Mailbox in VMS essentially forms the basis of a fully asynchronous queuing system. Applications can define mailboxes, to which you can publish messages, and the recipient will be notified at some point in the future that a message is available. And because VMS has a lot of clustering facilities, mailboxes can either be on the local machine or on another machine, and because it's all fully guaranteed delivery (within reasons of course), you have full fire-and-forget semantics.

Contrast all this with your UNIX forms of IPC: Pipes, Files, Signals. What do the former two have in common? They're either synchronous or near-enough in that they involve polling. Signals may be asynchronous, but they can't really carry a payload: they're just a number. These are enough to form the basis for almost all forms of common IPC, except for fully asynchronous ones. What do you do in a UNIX IPC model if you want to send a message and at some point in the future make sure that something else picks it up? Put it in a spool file? That seems pretty clunky, even today.

Sure, you can expand the UNIX model to involve asynchronous IO, but that's really just an asynch vaneer on top of traditional synchronous IPC. It doesn't change the fundamental basis that your basic units of system-system IPC are fundamentally synchronous. This all smells funny.

Given that there are a lot of AMQP people who read my blog apparently, where's the topicality? How about this: why is it necessary that I even have to use something like broker-based MOM when the operating system could realistically do this for me? Why is this all so resolutely in user space when operating systems were doing this decades ago? Why do I need to communicate using sockets (another system-system synchronous IPC system) to another process to do basic message-based IPC?

Why can't I take all the various implementations of this pretty basic concept (fire-and-forget, guaranteed messaging, asynchronous notification, single consumer delivery) and pull them out of their various programming-language (Scala, Erlang) and application-semantic specific models (JMS, WCF), and pull them up a level? Why can't I get this out of my operating system? Why can't we just break out of the UNIX model of decades ago?

Maybe we've accepted that the micro-kernel model of operating systems has really won. And by that, I don't mean the Mach-model of operating systems, but, rather, the model that system-level APIs are pretty much fixed in stone by history, and won't be expanded (yes, they might be expanded in the particulars, but they're not going to be significantly expanded in the general concepts that people are willing to defer to the kernel to do). People do everything they have to in user-space.

But something to me is wanting. I think this really simple form of IPC, which is so insanely beautiful that people are willing to program in actor-based concurrency systems like Erlang just to get it, really should be given a second thought. Maybe not in kernel space, but definitely as a standard that you can assume will be around on any system on which you program.

And the interviewee? A (hopefully) happy employee of my firm. We hire quality when we can find it.

Monday, September 29, 2008

My Wireless Network SuX0R2

Dear Lazyweb,

Please help me get my wireless network at home working better. I am absolutely at my wits end.

The basic setup is:
  • We have a NetGear 834G acting just as a router (no wireless on the box, it's just a DSL modem/router and DHCP server)
  • That connects to a Belkin gigabit switch
  • Connected to that are all the wired hosts (e.g. a desktop machine, my NetGear/Infrant NAS box)
  • As well as the TimeCapsule which is acting as a wireless base station
  • Wirelessly connecting to the TimeCapsule in a WDS configuration (with no local connections) is an Airport Express, which has a wire coming out of it, to bridge (I kid you not) 10 feet that I'm not allowed to run a wire, so that the
  • Sonos receiver can participate in the network.
Here's the deal: I'm dropping packets like mad, and have super-delayed packets. This makes a lot of connections pretty much unusable, and is really starting to get on my wits, because it doesn't happen with the same computer setup in other locations (like our zoo, which has a cheap-ass BT-provided broadband modem/router/wireless access point, but which works perfectly).

And the packet sequence also involves (quite strangely), some dropped packets, and then some packets that are delayed for an excessive period (so I'll drop like 5 ping packets, and then it'll just stall, and then all of a sudden I'll get a massive flow, some delayed by up to 10 seconds). To give you an example of what the ping traffic looks like (192.168.0.15 is the NAS box, hooked up directly to the gigabit switch), take a look at this very indicative ping sequence (no drops, just the strange delay):

Macintosh-4:~ kirkwylie$ ping 192.168.0.15
PING 192.168.0.15 (192.168.0.15): 56 data bytes
64 bytes from 192.168.0.15: icmp_seq=0 ttl=64 time=1.545 ms
64 bytes from 192.168.0.15: icmp_seq=1 ttl=64 time=0.792 ms
64 bytes from 192.168.0.15: icmp_seq=2 ttl=64 time=7481.797 ms
64 bytes from 192.168.0.15: icmp_seq=3 ttl=64 time=6484.930 ms
64 bytes from 192.168.0.15: icmp_seq=4 ttl=64 time=5485.776 ms
64 bytes from 192.168.0.15: icmp_seq=5 ttl=64 time=4486.154 ms
64 bytes from 192.168.0.15: icmp_seq=6 ttl=64 time=3483.138 ms
64 bytes from 192.168.0.15: icmp_seq=7 ttl=64 time=2483.769 ms
64 bytes from 192.168.0.15: icmp_seq=8 ttl=64 time=1483.877 ms
64 bytes from 192.168.0.15: icmp_seq=9 ttl=64 time=484.237 ms
64 bytes from 192.168.0.15: icmp_seq=10 ttl=64 time=0.657 ms
64 bytes from 192.168.0.15: icmp_seq=11 ttl=64 time=0.674 ms

During the period between seq 1 and 2 arriving, nothing seems to be coming in over the wireless connection at all, for any application. But if you note, all the packets are blocking somewhere, and then all flowing through within a few milliseconds. This is quite common.

All these dropped packets and packet resends are leading to quite a difficult and horrible internet experience, because especially Web 2.0-related sites with lots of background AJAX don't really like having half of their AJAX connections failing or timing out or whatever.

Running WireShark doesn't indicate anything out of the ordinary.

I get the same results if I ping the TimeCapsule itself.

And on average, I'm dropping like 20% of packets. That's pretty poor all around.

During all this, I have pretty much perfect signal/noise, and that doesn't really fluctuate or have any correlation that I can tell with the packet drop or the packet delay.

Things I've tried:
  • I had an old AirPort base station (pre-draftN), and used that. No love.
  • I've tried 6 different uncongested channels (including low ones like 3). No love.
  • I've tried plugging the TimeCapsule into the router's built-in switch. No love.
  • I've tried turning off the AirPort Express, thinking it might be the WDS doing it. No love.
  • I've tried upgrading the firmware of every single thing that I can find. No love.
  • I've tried the same client systems (laptops and my iPhone) in other wireless networks to see if it's then. They work perfectly. No love.
  • I've tried putting my laptop literally right next to the base station. No love.
Dear Lazyweb, what in the world should I be trying next? I can't retrofit my entire flat with cables everywhere we want the InterTubes, so how in the world do I get past this current impasse? I mean, the obvious thing would be to assume that there's a fault in Apple's products, but my love of all things Jobsian means that I find it very difficult to accept that. I mean, if it is, it is, but I really don't want to have to go out and buy another access point just to prove that an Apple product isn't perfect.

If nothing else, the whole thing is getting embarassing, because my significant other is starting to believe that my powers of technical prowess might be limited after all. This makes me look pretty darn bad.

Kirk

P.S. Yes, with a cable, it all works just perfectly. It's only wireless that's a problem.

Friday, August 22, 2008

Tiny Java Containers: None Of Them Do What I Want

Dear Lazyweb,

Although I find it difficult to focus on programming while BBC is live broadcasting Olympic Table Tennis, focus I must. But I have a conundrum: I want a Java code container, but I don't like any of the current methodologies that I'm familiar with. Please help.

Yes, I've looked into Spring and Pico/NanoContainer and all that, but their focus appears to entirely be below the level of what I'm looking at. Their focus appears to be running inside some type of application, rather than launching it (so you configure launching Spring within your Web Application: you don't start Spring at the command line). Some of my problems have to do with packaging and deployment of multi-jar projects, and the IoC containers don't work at that level that I can see.

Plus, while I totally buy IoC as a general principle and use it on a regular basis, I don't need a generic configuration file to do it, particularly not in test cases. If I want a configuration file for a particular context, I bloody write one. It exactly represents my configuration options, is typesafe, has a schema, and can be understood by not-me for later configuration. A configuration file that is capable of representing the entire universe of Java types and construction options is essentially programming in XML. For people who seem to hate J2EE, the IoC-container-crowd seem to have adopted its worst tenet: replacing simple, clear, short snippets of source code with a monstrous amount of generic XML.

But I digress.

Anyway, here's what I want:
  • Packages up a set of jar files as a single classloading context. This is pretty important because I think a big problem with modern composed Java applications is assembling all your various jar files and dealing with diamond dependencies. But anyway, I want something that I can pass around and say "this is the code for my application."
    Yes, I know OSGi is a better solution for this, but I'm not there yet, and I won't necessarily be there for quite some time in terms of OSGi-ifying everything I've got. Bundle of JAR files I can handle.
  • I want to be able to load multiple of those jar bundles at any given time in the same JVM.
  • I want to be able to run static methods (maybe even main itself) with arguments. Heck, it's my code, I'll even adhere to some type of contract (whether explicit interface or implicit through annotations) to give me better lifecycle support.
  • I want to be able to run lots of instances of those static methods (think message processors, each instance on a different JMS Topic). I want that to be dynamic (so I have one service kicking off others).
  • I want to scale those instances on multiple machines. I'd like that to be automatic.
  • I want to automatically handle failures of machines by distributing the load on that machine to other machines.
  • I want lots and lots of monitoring and administration.
  • I don't want to write a single line of code that I cannot adequately unit/functional/integration test outside of the container.

What I've been tempted to do in this situation in the past is to just use Tomcat as my generic container, and model everything as a Servlet with no Servlet mapping, so I'm only getting the lifecycle calls that I need and use of web.xml initialization parameters as my configuration. But that just, well, it feels dirty. Plus, it would take longer than I think would be reasonable to launch one of these processor instances, and if I'm running thousands of discrete processor instances, I need control to be quick.

My guess is that there isn't something like this out there.

My guess is that I'm about to write one. I'd rather not, but I don't think that this type of thing exists. If it does, it might be the SpringSource Application Platform, but I can't actually tell what that does to be honest. I mean, it kinda just looks like OSGi++, but I can't tell what the ++ is. (Is it really just Equinox with some extra bits for central repositories and remote configuration? Is that all?)

My guess is that the actual eventual solution here is largely just going to be my leveraging Terracotta for all my distribution and failover requirements, but writing the whole actual lifecycle management work myself.

Oh, and it has to do Java. Telling me Erlang/OTP gives you every single thing here for absolutely free doesn't help me when I'm under a strict Erlang embargo at work.

Help me Lazyweb, Help me!

Monday, July 21, 2008

iPhone Software I'd Love

Dear Lazyweb,

Here are the pieces of software I'd love to pay someone for in order to make my JesusPhone experience much better:

  • A ToDo system which doesn't suck
    • Sync with something (anything!) on my Mac or the InterTubes
    • Allow me priorities
    • Allow me notes, deadlines
    • Give me alerts
  • A Notes system which doesn't suck
    • Sync with something (anything!) on my Mac or the InterTubes
    • Comic Sans is the bane of my life
  • A Weather app written by someone who's seen the Tufte criticism of the iPhone.
    • And while I'm at it, when I go to the Weather App, why in the world if it can't make a connection does it refuse to show me what it saw last time? Stupid app.
    • And I'm in the UK. Give me Met Office data, and show me down to the weather station level, and show me the 3-day every-four-hour data as well.
  • A semi-offline Google Reader app
    • Allow me to sync up a bunch of my feeds that are full-text and don't do summaries in the feeds, and let me read them sans network, and then sync up again when I'm back in network range
    • This can't be Yet Another RSS Reader: it must synchronize my state with Google Reader.
  • An SMS application that allows me to queue multiple SMS messages while I'm underground in the Tube and sends them all when I get a network again. Heck, my Treo did this years ago. Why can't the JebusPhone do it?

Also, I really don't want to see any more BeerPhone shit. Man, that got old quickly.

Thank you,

Kirk