A Room With A View

It’s day two in the new office.  You have seen the layout in a previous post. What you may not realize it has windows from desk level to the ceiling on three sides; that’s a lot of window and a lot of heat.  We put in new electricity line to handle all the equipment, and put in new baseboard heating on a separate zone.  The view out the window is nothing short of stupendous.

The room sits on the “premier etage” – the first floor above the ground level.  In front of me is a small lake covered with lily pads.  Surrounding the lake are several 100+ year old trees.  There is a graceful oak tree with branches that span out over 100 feet.  And there is a soaring maple tree with a girth the size of a small cypress tree.  All around is a riot of color.  Leaves are turning yellow and red, and orange, mixed with a sea of green.  A small drizzle is rippling the lake. Occasional ducks land on the surface en route to warmer climates as the seasons change.  We hear the gaggle of geese.

The tranquil moment is marred only by the steady hum of my computer fans.  Not sure whether it is my Dell Server or whether it is my switch that has the louder fan.  The shelves in the back of the office are up.  We now have two large white cabinets to store the messy wires that come from running a computer business (old USB cables, network cables, power cables, serial cables, parallel cables, mouse cables, and an assortment of devices whose purpose have drifted out of memory).

Moves are interesting.  In packing up we left a wide pile of devices in the waste bins.  Who needs a “floppy drive”?  Anyone continue to use a ZIP Drive … wore 100 MB of storage?  I had a serial to mouse adapter.  Remember when serial ports were all the rage.  And now there is the universal serial bus (USB).  Bluetooth was supposed to replace that.  But my latest acquisition, a Plantronics wireless headset still uses a USB to power the device.  I finally decided to retire permanently my Dell Pentium III server. With a RAID V SSCI drives of 50GB (once immense) , the whole system only can store 150 GB, not even enough to backup my current server.  And weighing in at 80 pounds, that was one solid hunk of metal. It certainly has freed up space on my computer rack.

Documents in the Clouds

I spend a large amount of time and money each year worrying about “backing up” my data files.  Years ago, I decided to centralize all my files on a File Server.  A peer-to-peer network was good for distributing processing, but a disaster when you are like me, working on multiple PC’s. I do that so that I can test software on different environments.  Once I decided on a central file server (realize the decision was not rocket science), the issue came on appropriate backup routines.  I tried tape cartridges, but most were too slow and too small.  I currently am working with a RAID-V server array, removable hard-drive backup, combined with MozyPro.  The system works, but is not ideal. The hard-drive backups are not swapped often enough; MozyPro took forever to get all my data, and afterwords, is quite slow on the restores.  And so, I am now looking into a “cloud” solution, in particular NetDocuments.

Read moreDocuments in the Clouds

Basha Systems LLC is Moving

Well, it’s official.  Basha Systems LLC is moving.  After ten years in Croton on Hudson, it is time to MOVE our offices … well not so far … in fact … just up the road.  We signed the deed, mortgage,and note TODAY. We are moving to Cortlandt Manor, NY.  The actual move won’t be for another week or two.  When it is, it will be to 17 Lakeview Avenue East, Cortlandt Manor, NY 10567.  The phone numbers will change, but you are free to call our (800) number which will be automatically routed to wherever we are. (800) 725-0326.  And of course, email will continue to follow us to our new home.

And here is the building where the office is located

Here is a photo of the new office layout

And if you like barbeque, we have not only a new gas grill, but we have a real smoker.  Smoked brisket anyone.

Toss Out Your Server – No Really!!!

The computer-industrial complex has been on a mad race of hardware, software and services to shape us “users” in their own image.  With the drop in prices for hardware, it seems that a “network” is in everone’s reach.  Microsoft is even shipping a “home server” – instant network in a box.  What is missing in this hardware and software gold rush is that few of us, myself included, are capable of properly managing a network and hardening that network against attack.  And there are a lot of malevolent forces out there ready to attack.  As a result, we find ourselves relying increasingly on the gray wizards of networking, often calling them in when it is too late.

Read moreToss Out Your Server – No Really!!!

HotDocs Instruction – QUIT

The HotDocs QUIT instruction specifies that any code in a computation after the QUIT instruction is to be ignored as code. There are two major uses for this instruction.

Firstly, because QUIT stops HotDocs processing a computation as code, it means that you can put it at the top of a computation to stop that computation from being processed.  Very handy if you are halfway through a computation or cannot otherwise make it work.

Secondly, you can use QUIT as a way to add developer comments – simply finish your computation code, enter the QUIT instruction at the bottom, then enter any comments you want after the QUIT command.

The reality is that the QUIT instruction doesn’t really do anything that comments don’t already do. And thanks to HotDocs’ “Comment/Uncomment” block function, its pretty easy to work with large sections of commenting code.

The Search for the Perfect Baguette

It has been a few weeks since the return from our trip to Paris.  We have mostly readjusted.  We will shortly be moving our office from Croton-on-Hudson to the neighboring town of Cortlandt Manor. But there is one area where we feel as great loss; for we miss the perfect breakfast.  In Paris, or rather Boulogne-Billancourt, we had 3 boulangeries (bakeries) within walking distance from our apartment.  Each morning we would make an expedition (two blocks) to the bakery and pick up a fresh baguette (.95 Euros / USD $1.25).  We would also pick up croissant beurre, croissant almonde, pain au chocolat, or brioche.  We would top it with fresh butter, nutella or confitures.  And for the adults, drink it with freshly brewed French Roast coffee. And so, on our return, we sought to reproduce this simple pedestrian breakfast.  The pastries and baguettes were ALWAYS fresh from the oven.  The had delicate crips crusts.  The insides were light and airy, almost delicate.  The bread “snapped” in your fingers and crackled under your teeth.  The croissant were light, flaky and exuded butter.

Well, it hasn’t been easy.  Our local ShopRite (which has everything), sells loaves that are shaped like French bread, but resemble more in texture partially cooked pizza dough.  The bread is soggy to the touch when bought, with a cold clammy texture. When warmed up to get a crispy crust, the bread is hard and tough.  Sharp teeth are required to tear the break.  Rather then melting in your mouth, repeated chewing is required to aid in digestion.

The croissants are even worse.  They “look” like croissant, but the resemblance ends at the external appearance.  The French croissants were layer upon layer of delicious flaky crust, such that you could unpeel the croissant, and eat it layer by layer. The ShopRite croissants were a single undifferentiated mass of dough.  Yes, there were not too dense, and they were buttery, but they had none of the texture and feel of the French version. Once you went beyond to the Almond croissant and the Pain au Chocolate, it got worse.

I then moved on to the local “Gourmet” establishment.  They had a wider selection and variety.  The French breads (when they were available) had a gold crust and crackled when you squeezed them. But the weight of the bread was wrong.  They were too heavy.  The dough was dense and chewy.  They were interested breads, but they lacked the Artisanal flavor and texture we could get in any boulangerie in France.

Part of the reason, I am told, has to do with CULTURE.  In France, the local bakery has two production runs: early morning and mid-day.  The breads are made without any preservatives.  The means that the lucious baguette of the morning is the stale loaf of the evening, fit only for bread crumbs and croutons. And bakeries are located on every other block.  Each morning and each evening the “chefs”, including little chefs, cue up to get the fresh breads out of the oven.  In the U.S. we have “factory-sized” bakeries that ship breads through distribution centers to large markets.  Breads may take 24-48 hours from when they are made to when they show up on your shelve for you to buy on your weekly (not daily) shopping expedition.  In such a food cycle, French bread, with its 12 hour life cycle, would be long dead and stale before it got to your table.

For us, “lost in suburbia”, our option is to take the train to Zaros at Grand Central Station or learn how to make our own bread.  At present, we are decided on the later.  We will begin to yeast our our starter loaf, and put it in the convection oven while the rest of the family does their morning showers.

PLAY MACRO

Sometimes, there are things you want done to your assembled document that HotDocs simply cannot do.  Perhaps you want to check margins for a specific section, re-style an inserted template on the fly or automatically run a custom in-house print macro upon completion.  For these sorts of tasks, the PLAY instruction is what you wish to use.  PLAY will tell your word processor to run a specified macro after your document has been created (ie: after the interview, but before it displays as a document).  If there is more than one PLAY instruction in a template, HotDocs will process them in the order encountered.

The syntax for a PLAY instruction is pretty simple:

«PLAY "MyMacro"»

To insert the PLAY instruction, go to the HotDocs button on your HotDocs toolbar, click “Other Field”, then specify PLAY from the drop down box.  You will be asked for the macro name you wish to run.  Click OK.

Notes About PLAY

If you use WordPerfect, your macro can be stored anywhere. If it is outside the default macro location, then your play instruction must have the full file path.

If you use Word, the macro must be stored in the template itself, normal.dot or some other template that is loaded and available at the time you assemble your document.  If you are using Word RTF templates, you may optionally associate a specific template via the Component Manager.

HotDocs Instructions – LIMIT

When it comes to REPEATS in HotDocs, LIMIT is one very handy instruction to know how to use.  As its name suggests, it will LIMIT the number of iterations a repeat can hold, by placing the instruction in the dialog script of the dialog you wish to limit.  Please note that this is entirely different to the number of rows shown on a repeating spreadsheet dialog.  LIMIT will restrict a dialog to have only (for example) 3 iterations, where as the rows shown command will allow a repeat to hold countless iterations, but only show a specified number.

The most basic use of LIMIT is to provide a fixed number, such as:

LIMIT 3

This doesn’t really help you much, unless you are certain your dialog is only ever going to repeat 3 times only.  Here, we can introduce the concept of a user-specified LIMIT.  Lets say we have a dialog named Child DLG that collects some general information about all the kids, as well as a variable named CHLD CNT – asking the user how many children there are.  On Child DLG is a repeating sub-dialog Children RPT – it will repeat once for each child.  In the dialog script of Children RPT, we could have

LIMIT CHLD CNT

This is better – we ask them how many kids, then LIMIT the repeating dialog to that number.  This will stop “empty” repeats in our templates where users have clicked forward and answered a field accidentally.  Great.  Lets make it a bit easier to use.  Instead of CHLD CNT as a number variable, lets use CHLD Num MC as a multiple choice variable, with options from 1 to 20.

LIMIT INTEGER ( CHLD Num MC )

Now, our user can click the number of kids from a list and our LIMIT instruction converts the multiple choice value to a number value.  Simple, straight forward and user friendly.

The above technique can also be used to dynamically show more rows on repeating spreadsheet dialog dynamically

HotDocs Instruction – LANGUAGE

The Language instruction allows you to design, code and assemble templates in HotDocs in a language other than English.  To be able to use this feature, you must first contact a Lexis Nexis sales representative to obtain a DLL for the language you wish to program with.  HotDocs has DLLs for the following languages:

ENG (English), DEU (German), DES (Swiss German), DEA (Austrian German), FRA (French), NLD (Dutch), ESN (Spanish), ITA (Italian)

Using any of the codes above, the instruction you place in your template is as simple as:

LANGUAGE FRA

Also with the Language instruction, it is possible to format the thousands and decimal separators.  The following instruction would use the Italian language, set the thousands separator to a period “.” and the decimal separator to a comma “,”.

LANGUAGE ., ITA

INSERT template

Not to be confused with the ASSEMBLE command (which queues a template for assembly after your current template has finished), the INSERT command does exactly that – inserts the content of one template into a different template (known as the “parent” template).

This instruction is extremely handy and very under utilised as it is useful for a wide variety of things, not just inserting letterhead!

The INSERT command should largely be used in templates.  There are ways to use the INSERT command inside a computation, but there are limitations and rules that apply.  Allegedly, an INSERT command cannot be placed inside headers or footers in your template however, we have found that it works just fine with footers, which can save some time in some situations.  At any rate, here’s how it works in several different ways –

Template in same location as the template you are inserting into (known as the “parent” template)
«INSERT “Template.rtf”»

Subfolder of location of parent template
«INSERT “SomeSubfolderTemplate01.rtf”»

Full file path for anywhere on your system
«INSERT “T:HDTemplatesLitigationTemplate01.rtf”»

Using a Reference path
«INSERT “^HotDocsLitigationTemplate01.rtf”»

Default Templates folder
«INSERT “Template01.rtf”»

The INSERT statement is quite often used inside IF statements to conditionally insert oeprative parts of documents.  Interstate notices, optional schedules, attached forms etc are all usually INSERTed inside IF statements.

Common Uses for INSERTed Templates

  • All stationery, such as letterheads, faxes and memos, with accompanying headers, footers and page numbering
  • Signing / execution clauses (say, a single “corporate execution” block and a single “power of attorney execution” block)
  • Court headers and footers
  • Boilerplate text such as acceptance clauses, court seals, hearing dates, witness blocks and the like
  • RE lines on letters
  • Schedules

Additionally, INSERTed templates are quite often used simply to segregate content in long templates, so that each template can be tested by itself in isolation to the rest of the template.

Some Off Label Uses

With a bit of effort, it is possible to set up INSERT templates to take parameters.  All you have to do is write your INSERT template with a temporary variable that you SET before you insert.  Here’s a quick example:

INSERT Template Code:

Some random text up here that is boiler plate and always appears regardless of how the INSERT template is used.

«IF OPT UseNotice TF = TRUE»
This notice must be complied with within 14 days unless otherwise specified.

«END IF»
More random text here about something or nothing at all really.

«IF tmpTE = "Borrower"»
This notice is directed to the Borrower's solicitors and must be complied with within 7 days of the date hereof.
«ELSE IF tmpTE = "Lender"»
This notice is directed to the Lender's solicitors and must be complied with whenever convenient to the Lender.
«END IF»

«IF OPT UseFooter TF = TRUE»
This footer is absolutely pointless except insofar as it demonstrates the concepts of parameters in INSERT templates as applied by the HotDocs document assembly engine.
«END IF»

So all we have really done here is code the INSERT template with some preset variables to hold preset values.  Then, when its time to insert the template, we set the parameter variables prior to inserting the template.

PARENT Template Code:

«SET tmpTE TO "Borrower"»«SET OPT UseNotice TF TO FALSE»«SET OPT UseFooter TF TO TRUE»
«INSERT "OurInsertedTemplate.rtf"»