Enterprise Data Integration: The State of the Art

Recently I had to get up to speed on Cast Iron data integration solutions, now part of IBM. I have to admit, I went into it a bit pessimistic about the very notion of “point-and-click programming.” The basic value proposition of Cast Iron is to make it easy to move enterprise data from one place to another, for example, synchronize an Oracle database of accounts and customers with your Salesforce.com database.

cast-iron-diagram

You do this by creating Projects with Orchestrations which are made up of Activities that talk to and listen to Endpoints like HTTP, FTP, SMTP, Database. Most Activities can map and transform data before passing control to the next Activity. There are also control flow Activities like If/Then, Do/While and Try/Catch. This kind of visual activity building isn’t unique to Cast Iron of course, and it makes pretty pictures. The diagram component used in Cast Iron Studio, a Java desktop app, is quite nice to work with.

Within Activity blocks you can map data by dragging and dropping:

cast-iron-map

I learned that the mapping interface is essentially an XSLT generator. When you peek a bit under the covers of Cast Iron, you’ll discover that it’s all about converting data to XML representations, building XSLTs and converting XML back to database calls or strings or whatever your end point needs. But Cast Iron hides all that from you, mostly. Once you’ve built your Orchestration and debugged it to your satisfaction, there’s a server (“appliance”) that you can push the Project to, and it’ll host the whole thing. Or you can have Cast Iron host it for you in “the cloud.”

It’s all actually very neat once it comes together and works. And it’s true, for basic data integrations no programming is required, and you can just point-and-click your way to data integration nirvana. Sounds easy right?

Reflecting on this technology, I’m struck by one thing: data integration is still hard.

We had a small but diverse group in the training session. Most participants introduced themselves as developers or systems analysts. But even with a lot of hand holding and a very knowledgeable and effective instructor, these fairly basic exercises often proved challenging to people. At various points, each person got stuck and needed help to get unstuck. Plus these exercises seemed nowhere near the level of complexity real world data integrations would have.

Making changes required lots of hunting, clicking, dragging, typing little bits of text, waiting and repeating. Even putting aside numerous UI annoyances and glitches, the experience of building even a fairly basic Orchestration with a small handful of Activities can be pretty frustrating. Looking around the room, I felt that while people were pleased when they finally got a lab exercise working, they were concerned that they needed so much help from the instructor, and were often stymied trying to work things out on their own. Although my background made the exercises pretty straightforward for me, it was clear this stuff still isn’t quite within easy reach.

Makes me wonder: can data integration really be easy one day?

What if you could run software that works like this:

  • Asks you: Where’s your data?
  • Asks you: Where do you want to move your data?
  • Gathers and verifies all authentication information, then gets to work:
    • Performs inspection of data sources and targets, including random sampling,
    • Algorithmically generates ETL Orchestration, highlighting areas of greatest uncertainty,
    • Include logging, email/SMS alerts, error handling, apply intelligent upserts, etc. all heuristically and algorithmically determined,
    • Automatically creates “staging/sandbox” environments based on the data targets – then show you Previews of the data integrations without having to make your own staging environments
  • If needed, then deeper customization can be made by hand,
  • Once you’re satisfied, allow one click deployment and activation

Perhaps a very naive vision, but this is what Usable Data Integration would be to me. Although tools like CI are nice, and they pay a lot of lip service to simplicity, it’s still definitely not “simple” except in the simplest scenarios. Yes, the “secret sauce” would be that magical algorithm in the middle step.

Maybe integration has innate complexity and can never be made simple?

I’d like to think and dream that integration can be simple. It’s just a hard problem.

,

1 Comment

The First Date NDA – Just Say No

Background: I wrote this back in April 2006 and circulated it to some folks. Never got around to posting it online. Today, I was reminded of it when an NDA came up. After re-reading it, this is just as relevant now as it was four years ago.

 

Ten Reasons to Say No To The First Date NDA

Friday, April 21, 2006

I’m sometimes faced with a request to sign an NDA when I first meet an entrepreneur.  I call this the First Date NDA.  In case you don’t know, an NDA is a Non-Disclosure Agreement.  It’s basically a broad legal agreement where you promise to never disclose or make use of any information you learn from the other party.  Often the NDA is mutual: the other party also agrees to keep your secrets.  In Silicon Valley it’s regarded by some as a standard practice, or at least they’ll tell you so.  For many reasons, my personal policy on First Date NDAs is to say no and be willing to walk away.  Here are ten of them:

1. Flexibility

If you’re the kind of person who gets approached frequently with ideas, or you work with ideas, you severely limit your own liberties in signing an NDA.  Each NDA you sign means less flexibility for you.  It can limit, for example, who you can potentially talk to, the kinds of projects you can engage in, and the kind of clients you can work for.  It limits what you can and cannot talk about.  If you sign an NDA with an optical networking entrepreneur, you have to be careful whenever you talk to another optical networking engineer or entrepreneur, or potential investor.  After signing a few NDAs, obviously this quickly gets untenable.

2. Future Earnings and Opportunities

Would you go on a first date someone who first made you agree to never ever date anyone else who enjoys snowboarding or who knows French cuisine?  That’s what an NDA does.  An NDA limits who you may be able to get into a relationship with in the future.  Unless you’re able or willing to close off entire fields of work, the NDA is a heavy shackle that can drag on your very livelihood, potentially affecting your earning ability.  It narrows your dating pool forever, as if dating weren’t hard enough.

3. Connection Impairment

A broad NDA may not serve either party.  Suppose you speak with an entrepreneur about a baby diaper idea; he’s looking for a technical partner.  You’re not interested, but a week later you meet a technical genius with a baby diaper idea looking for a partner.  To avoid potential liability, you’re going to have to go about this very carefully if you want to help these two folks connect; plus without the ability to mention the idea, you may never have even discovered the potential for matchmaking.  The broad NDA can make it difficult to facilitate these important connections that happen all the time.

4. Liability

You may as well sign a document that says, "Come and sue me at your leisure."  This is a legal document that binds you forever; an NDA rarely has an end date.  Anything that you say or do in the future could land you in trouble because of an NDA you signed in the past.  The amount of personal liability may be unlimited; they could seek hefty damages.  All for what?  So you have the dubious privilege of having that first conversation with someone, that may or may not lead to anything?  That same someone could come out of nowhere 10 years from now and sue you over breach of contract. Not being a lawyer, I don’t know how strong the case would be – but would you want to risk it?

5. Practicality

If a stranger came up to you and handed you a list of conversation topics and said, "Sign here to agree never to bring up these topics again," could you do that?  Except with an NDA you’re supposed to agree before you even know what the topics are!  Suppose you were willing to agree.  The question is could you stick to the agreement?  You might be having a casual dinner conversation with an old buddy, and in your head you’re supposed to track every "off limits" topic you’ve ever signed an NDA on.  How’s your memory?  In practice, the NDA doesn’t seem easy to enforce in court anyway.  It’s probably quite hard to prove in a court of law the direct violation of an NDA.  I’ll bet the only real winner will be the lawyers.  So what’s the real point?

6. Principle

Ideas are mashed up, mixed, all the time; innovation is always based on other ideas.  An NDA is a broad tool for staunching the free flow and exchange of ideas, an attempt to control information.  And we all know that information wants to be free.  Doesn’t an NDA just go against the grain of everything you know to be good and worth fighting for?  It’s basically an agreement to voluntarily censor what you say, who you talk to and what you do for the rest of your life.

7. Double-standard

An experienced entrepreneur knows that the people who are most likely to be a risk to talk to are the same folks who as a policy never sign NDAs: venture capitalists and major corporations.  No major venture capitalist will touch your NDA – even bringing up the subject can get you laughed out of the room.  Moreover, companies like Microsoft, IBM, Apple and Adobe never sign your NDA either. I know this for a fact. Not only is it impossible for them to guarantee your secrets at a corporate level across all departments and employees, present and future, they refuse for the same reasons I’m outlining here!  They’ll make you sign theirs if you let them, but there’s no way you’ll make them sign yours if you want to talk with them.  So if an entrepreneur can’t make the big guys sign an NDA, why should you be so willing sign it?  Who’s a greater threat to the entrepreneur anyway, you or a VC?  Don’t be a sucker.

8. Strength of concept

In my experience and view, very few broad business ideas are worth stealing; in and of themselves, ideas are rarely worth anything.  Be honest with yourself, back in 1996: would you have stolen "selling books online"?  Or "online auction"?  Or "online directory"?  Besides, was it the business concept itself that made Amazon, eBay and Yahoo! successful?  How many competitors did they beat out, who were doing the exact same things?  What threat were you to Jeff Bezos?  You had your own ideas and projects that you were bullish on, right?  If a new business can be toppled by the mere theft of the idea, it’s not a very strong business idea anyway, in my opinion.  The real strength of a business is the people, timing, and execution.  Yes, there are specific proprietary implementation details that can make a difference.  But except for a rare few businesses that’s a small part of the whole equation.  Plus there’s already a more powerful legal vehicle for protecting those brilliant ideas: patents.  And a patent doesn’t require that you swear anyone to secrecy. Patents are a whole other diatribe for me.

9. Promiscuity

The smart entrepreneur doesn’t go to bed with a stranger on the first date, even with protection.  An entrepreneur that gets you to sign an NDA is either lulled into a false sense of security and will foolishly spill it all to a total stranger, or will more likely continue to harbor secrets anyway, keeping the best cards close to the chest.  Either way, the NDA is not serving you; it’s often laziness on the part of the entrepreneur, an allowance for indiscretion.  So what’s the point of the NDA?  It’s so she can potentially come after you in the future or at least rest easier knowing that she has the option should the need arise.  So how’s this a good thing for you?  Smart entrepreneurs keep their pants on.

10. Etiquette

Would you ask for an HIV test and credit report on your first date?  Bringing an NDA to an initial conversation just smacks of bad manners.  Good entrepreneurs are good judges of character.  Integrity, confidentiality and discretion are part of excellent character.  Do you really want to start a business relationship, a partnership, by pushing a legal document across the table?  Trust begets trust, relationships develop one small confidence at a time.

Wrap-up

Is an NDA ever appropriate or a good idea?  I’m sure.  Most high tech employers require it before you begin employment.  But there you’re getting a job in exchange, and with many employers, signing that NDA is negotiable.  Always ask yourself what you’re getting in exchange for a lifetime commitment to keep someone else’s yet-to-be-determined secrets.  But certainly on that first date with a potential business partner, I think it’s almost always a bad idea, besides being a tasteless way to start a new relationship.  It reflects badly on the entrepreneur to ask it of you.  To me he looks at best untrusting, insecure, unconfident and naive.  At worst, he looks manipulative, overbearing and opportunistic in the worst sense of the word.  Either way, not great marriage material.

Just say no and move on.  It’s not worth it.

Disclaimer: These are my personal opinions.  I’m not a lawyer.  Just a guy in Silicon Valley who has seen a lot of NDAs and plenty of requests from silly entrepreneurs.

,

No Comments

Human Tolerant Software

Suppose you have a date range picker in your user interface, like this:

Date range picker

This picker acts as a filter for selecting records of things that are themselves ranges of dates.  For example, project tasks that have start and end dates.

The usability question is, should the filtered records be ones that (A) fall inside the selected date range, or (B) intersect the selected date range?

Answer: B

One guiding instinct is to err on the side of showing more information when given two otherwise equal options.  However, I feel this “rule” is weak because at some extremes, you wouldn’t want to follow it.

My key rationale is that from a usability standpoint, software should be tolerant of human imprecision.

Win95 vs. WinXP Start Buttons See, for example the classic example of how Microsoft Windows designers snatched defeat from the jaws of victory in Windows 95 by not allowing you to click in the bottom-most left-most pixel to invoke the Start menu…you have to actually move the mouse a few pixels up from that, a source of great frustration particularly to novice, sticky mouse ball, twitchy, funky mousepad, visually impaired, screen misaligned, elderly and disabled computer users the world over.  See also Fitt’s Law.

In our example, our designer has two real choices:

(A) Expect the human to always know and properly pick the "bounding dates" and exclude anything that doesn’t lie inside the circumscribed dates.  The worst case here is that the human is wrong, and when that happens, records will be missing the she/he should be seeing.  And she/he may not even know that records are missing in some cases,

OR

(B) Be more tolerant and expect that maybe the human accidentally picked 1/2 instead of 1/1, or maybe the human forgot that there’s a task that started on 12/31.  Show more.  Worst case: we show too much.  Then the user has to refine his/her search, or simply ignore the extra record(s).

Which software would you prefer to use?  The one that expects you to be a machine?  Or the one that expects you’re human?

No Comments

Getting the raw SOAP XML sent via SoapHttpClientProtocol

Suppose you’re using the .NET SoapHttpClientProtocol to invoke a web API.  This is what happens when you use Visual Studio to add a Web Reference and automatically build a proxy for you.  Now suppose you want to programmatically access the raw SOAP XML that you’re sending to the web API.  Sounds straightforward, right?

Turns out, it isn’t straightforward at all.

Looking online for some help, a few solutions have been proposed.  Some people suggest using a network sniffer or HTTP proxy to get the raw SOAP XML.  That can work, but it’s not a good solution for programmatically getting the XML.  It’s also somewhat labor intensive to setup initially and then use on a regular basis.

It’s probably possible to create a SOAP Extension to do this.  But that’s a bit heavyweight for my purposes.

One guy dug into the guts of the .NET assembly in the debugger to find the spot in memory where the XML document can be found.  Impressive, but again, not entirely practical for programmatic access.

After some trial-and-error, I decided upon a strategy that allows us to get what we need pretty reliably.  Hopefully this helps you.

Let’s say your WSDL has a service called HelloService (from the WSDL’s <service> tag).  When you add it as a Web Reference, Visual Studio automatically creates a nice class called HelloService derived from SoapHttpClientProtocol.  What we want to do is this:

HelloService svc = new HelloService();
svc.doSomething();
string rawXml = svc.Xml();

To add the Xml property, we could just add directly to the auto-generated class.  But that’s not ideal because if you get a new WSDL, for example, and re-generate the class, you’ll destroy changes you’ve made.  So let’s create our own subclass of HelloService.  That’s easy enough, something like this should do it:

namespace MyProject
{
   public class MyHelloService : HelloService
   {
      public MyHelloService : base() { }
      public string Xml { get { return null; } }
   }
}

Now  we should change our code to use this new subclass:

MyHelloService svc = new MyHelloService();
svc.doSomething();
string rawXml = svc.Xml();

So far so good, but what now?

Now we need to intercept the XML that gets created during SoapHttpClientProtocol.Invoke().  There’s a convenient point for doing that: GetWriterForMessage().  It’s responsible for returning an XmlWriter that gets used to build the SOAP XML message.

To do that, we’ll need our own XmlWriter that wraps another XmlWriter, the original one returned by the HelloService class.  Our strategy is to intercept all calls to the original XmlWriter and write those to our StringWriter.  It’s an XmlWriterSpy.  Here’s how it looks (some methods omitted for brevity):

namespace MyProject
{
    using System.IO;
    using System.Xml;
    public class XmlWriterSpy : XmlWriter
    {
        private XmlWriter _me;
        private XmlTextWriter _bu; // Buffer to write XML to
        private StringWriter _sw;

        public XmlWriterSpy(XmlWriter implementation)
        {
            _me = implementation;
            _sw = new StringWriter();
            _bu = new XmlTextWriter(_sw);
            _bu.Formatting = Formatting.Indented;
        }
        public override void Flush()
        {
            _me.Flush();
            _bu.Flush();
            _sw.Flush();
        }
        public string Xml { get { return (_sw == null ? null : _sw.ToString()); } }

        public override void Close() { _me.Close(); _bu.Close(); }
        public override string LookupPrefix(string ns) { return _me.LookupPrefix(ns); }
        public override void WriteBase64(byte[] buffer, int index, int count) { _me.WriteBase64(buffer, index, count); _bu.WriteBase64(buffer, index, count); }

        // ...more overrides omitted, you get the idea...

        public override void WriteSurrogateCharEntity(char lowChar, char highChar) { _me.WriteSurrogateCharEntity(lowChar, highChar); _bu.WriteSurrogateCharEntity(lowChar, highChar); }
        public override void WriteWhitespace(string ws) { _me.WriteWhitespace(ws); _bu.WriteWhitespace(ws); }

    }
}

Lastly, we just need to use this new XmlWriterSpy class in our MyHelloService class.  Here’s how:

namespace MyProject
{
   public class MyHelloService : HelloService
   {
      private XmlWriterSpy writer;
      public MyHelloService() : base() { }

      protected override  XmlWriter GetWriterForMessage( SoapClientMessage message,  int bufferSize)
      {
         writer =  new XmlWriterSpy( base.GetWriterForMessage(message, bufferSize));
         return writer;
      }

      public string Xml { get { return (writer == null ? null : writer.Xml); } }
   }
}

There you have it.

Update (April 2, 2010): As Robert pointed out, it would be nice to have the XmlWriterSpy easily downloadable in its entirety.  True!  Here it is.

, , ,

21 Comments

iTunes 9 and Custom iTunes Folder

itunes-logo I am not a fan of the iTunes software or philosophy.  On Windows it’s sluggish, the UI is unconventional and awkward for the platform and it forces the user to accept a bunch of other software like Quicktime.  The philosophy is patronizing and heavy-handed.  Apple says, "don’t worry your pretty little head about where your files are, we’ll take care of everything."  And, "don’t sweat the music format, just play this where and when we tell you."

Unfortunately, it’s probably the best and only way to manage and sync content with my iPods, which I use mainly for exercise and road trips.  So I want all the MP3s available to other programs, like when I make family slideshow movies.  I want to store everything in a separate data volume (drive) that can be shared with my whole home network and backed up on its own schedule.  For me iTunes is a utility for subscribing to my podcasts, managing a few playlists and syncing with iPods.  It is not my media management tool.

But it wants to be.

Here’s how I moved my iTunes files after some experimentation and reading helpful snippets scattered on the ‘net.

Before You Do Anything

Back up your iTunes folder.  If you haven’t already customized everything already, on Vista or Win7 it’s usually somewhere like "C:\Users\<you>\My Music\iTunes".  Just copy the whole folder somewhere.  It may be very big if you have a lot of stuff in there.

If you’re transitioning from one computer to another, the safest bet is to also "Deauthorize" your computer first.  Then Reauthorize it later, after a reinstall.

Install iTunes

Just do a straight install.  Then quit the program.

Attach Your Library

OK, here’s the tricky part.  Go your old iTunes folder.  Mine was on "D:\Music\iTunes".  Maybe yours is on a removable disk or something.  In that folder is a file called "iTunes Library.xml".  Open it with a text editor like Notepad.  Make sure all the paths for all the music and podcast files are right.  Fix with Find-Replace anything that’s not right.

itunes-xml

Now edit the file "iTunes Library.itl" with Notepad.  It’ll look like gobbledygook.  Delete everything in the file and Save it.  That file should now exist, but be 0-bytes in size.

itunes-itl

Now launch iTunes while holding your SHIFT key down.  You’ll be prompted to choose a Library.  Browse over to your old iTunes folder and select the "iTunes Library" file there.  Presto, now iTunes will rebuild itself and point to your old iTunes folder!

If you want, you can now delete your default iTunes directory at "C:\Users\<you>\My Music\iTunes". 

Fix Podcasts

Podcasts may not get added automatically.  This is a pain.  So you’ll need to use File > Add Folder to Library… to find your old podcasts directories.  Then you’ll need to re-subscribe to them.

Final Tip: Scheduling Podcast Download

I don’t know about you, but I don’t like to leave iTunes running all the time.  With a bunch of podcasts subscribed, it tends to suddenly lag the internet while downloading.  Instead, I use the Task Scheduler to create a task to run iTunes once a week while I’m asleep.  This means you need to leave your computer on of course.  When it runs, as usual, iTunes tries to download any new podcast episodes.

,

2 Comments

Going to Windows 7 64-bit

Last evening I bit the bullet and did it: I went for the Windows 7 64-bit Pro upgrade on my main home desktop.  Since I was upgrading from Vista Home Premium 64-bit, I needed to do a clean install, no in-place installs for me.  See the chart from Microsoft at Upgrading Your PC to Windows 7.

win7 After going through this, I have to say, it doesn’t seem worth it for the average consumer who’s already on Vista.  I suppose if you can do an in-place upgrade, that’s fine.  But wiping clean and re-installing everything, and running into compatibility problems with software…that can’t be worth it for most people.

If you’re buying a new PC with Win7, great.

So some of the snafus I ran into:

  • Norton Internet Security 2009 – not compatible and refuses to install.  Will need to get 2010 version for Win7 support…if I still want to stick with Norton.
  • Norton Ghost 14 – Win7 warns that it’s "incompatible".  Before installing anyway, I did some searching, including this amusing thread.  Sure enough, it seems to run just fine.  There’s no newer version to upgrade to yet anyway.  I’m also exploring alternatives, like Macrium Reflect and Acronis.
  • Microsoft Virtual PC 2007 SP1 – This one is vital to me, since I have several VPC images I use regularly.  In fact, using VPC images is one way these clean OS upgrades are feasible for me.  Officially, VPC 2007 is not supported for Win7.  Unofficially, it works fine, more or less.  You might wonder why I don’t spring for the built-in Win7 Virtual PC.  It requires hardware virtualization support.
  • Google Picasa 3.5 – The trick here is to take a backup of your old \Users\<you>\AppData\Local\Google\Picasa* folders and drop them in after installing a new Picasa.
  • iTunes – This was so convoluted, I’ll need a separate post…

As I was popping DVDs in, I was wishing Win7 included built-in ability to mount an ISO image as a removable drive.  I back up all my important (read: purchased) software discs, and this would have been a lifesaver.  I know, there are a number of 3rd party tools, but I’m not interested in inadvertently downloading malware.

Some highlights/changes in Win7 that most stuck me are: Windows Calendar is gone, WordPad & Paint got an overhaul, Super-Taskbar of course, Click-Titlebar+Shake, slicker Themes, included PowerShell, StickyNotes.  In short, lots of little superficial things.  Hopefully, stability and performance are what will impress me in the long run.

There’s still a bunch of stuff that needs to be installed, but it’s getting more usable…

, ,

No Comments

Plumbing in This Old House

This passage resonates with me some days:

Programming starts out like it’s going to be architecture–all black lines on white paper, theoretical and abstract and spatial and up-in-the-head. Then, right around the time you have to get something fucking working, it has this nasty tendency to turn into plumbing.

It’s more like you’re hired as a plumber to work in an old house full of ancient, leaky pipes laid out by some long-gone plumbers who were even weirder than you are. Most of the time you spend scratching your head and thinking: Why the fuck did they do that?

From the novel, "The Bug", by Ellen Ullman.  Didn’t read the book (yet).

No Comments

ASP and ASP.NET on IIS7 on Vista

For 90% of my web projects, I’m good with PHP configured under IIS7.  But there’s one that still needs “Classic ASP” support.  Since I’m on a new machine these days, I haven’t ever configured it to do development for this project.  Here are some tips to get that working on Vista:

  1. By default, turning on IIS in Vista doesn’t give you ASP or ASP.NET.  Go into Control Panel > Programs and Features (aka “Add/Remove Programs”)
  2. Turn Windows Features On or Off
  3. Under World Wide Web Services > Application Development Features check and enable ASP and ASP.NET 

    asp-on-vista

  4. Next, for a development machine, it’s useful to turn on debug error messages.  Open IIS Services Manager (Right-click on your Computer and choose Manage)
  5. Click on your Server icon under the “Connections” pane
  6. Double-click on “ASP”
  7. Expand “Debugging Properties” and set “Send Errors to Browser” to True (only do this on your development machines) 

    asp-config

 

This link from Microsoft’s “Learn IIS” site was helpful.

, ,

No Comments

Moving a SVN Repository from Machine A to B

Move all files off the old machine.  Check.

Clean the dust out of the machine, keyboard, mouse ball.  Check.

Find OS and drivers discs for the machine.  Check.

Transfer local project files over.  Hmm.

See, I’ve been using SVN + TortoiseSVN on Windows for years to manage source code revisions on my projects.  Love it, but I am still a n00b when it comes to SVN.

Now that I’ve moved to a new development machine, I need to move my whole project environment along with historical commits.  Searching on the ‘net yields some good answers, but no real step-by-step for a TortoiseSVN user.

BTW lots of searches would yield “svn export”, which doesn’t exactly do what I need here – it only makes a copy of the current revisions in the repository.

OK:

  1. Backup everything
  2. Make sure your SVN version is the same on both machines (just in case)
  3. Know your repository full path.  If you don’t know it:
    1. Find the root folder for your projects
    2. Right click > TortoiseSVN > Repo-browser
    3. Note the URL, like: file:///C:/Documents and Settings/Bob/Documents/SVN Repository
    4. That path, minus the “file:///” is what you want
  4. On the command line:
    svnadmin dump “C:\Documents and Settings\Bob\Documents\SVN Repository” > projects.dmp

    If you have a lot of projects, and/or a lot of history or big files, this may take a while to run, and may create a big file.  This is your whole repository and history of changes after all.

  5. Copy this big file over to your new machine, say to D:\projects.dmp
  6. On your new machine, create a new directory for the repostory, say “D:\SVN Repository"
  7. Create the repository: Use svnadmin create, or with TortoiseSVN right click on the” folder > TortoiseSVN > Create repository here
  8. On the command line, run:
    svnadmin load “D:\SVN Repository” < projects.dmp
  9. Now you can restore all the files: create your project directory, say “D:\Projects”
  10. Right click > SVN Checkout…
  11. The URL should point to your new repository.  Now do a fully recursive checkout. 
    svn-checkout

That’s it.  Repository and all history moved over.  Check.

Props goes to Digital Media’s nice instructions that helped guide me.

Update: After I did all this, it occurred to me that since the two machines were networked together, and could see each other, I may have been able to do this:

  1. Map a drive from machine A to B
  2. Right click > TortoiseSVN > Relocate…
  3. Move the repository over
  4. Pick up from step #9 above

Haven’t tried it, so can’t vouch for it.

,

No Comments