From my diary

It is Saturday evening here.  I’m just starting to wind down, in preparation for Sunday and a complete day away from the computer, from all the chores and all my hobbies and interests.  I shall go and walk along the seafront instead, and rest and relax and recharge.

Sometimes it is very hard to do these things.  But this custom of always keeping Sunday free from everything has been a lifesaver over the last twenty years.  Most of my interests are quite compelling.  Without this boundary, I would have burned out.

Phase 2 of the QuickLatin conversion from VB6 to VB.Net is complete.  Phase 1 was the process of getting the code converted, so that it compiled.  With Phase 2, I now have some simple phrases being recognised correctly and all the obvious broken bits fixed.  The only exception to this is the copy protection, which I will leave until later.

Phase 3 now lies ahead.  This will consist of creating automated tests for all the combinations of test words and phrases that I have used in the past.  Code like QuickLatin has any number of special cases, which I have yet to exercise.  No doubt some will fail, and I will need to do some fixes.  But when this is done then the stability of the code will be much more certain.   But I am trying to resist the insidious temptation to rewrite bits of the code.  That isn’t the objective here.

I began to do a little of this testing over the last few hours.  Something that I missed is code coverage – a tool that tells me visually how much of the code is covered by the tests.  It’s an excellent way to spot edge-cases that you haven’t thought about.

It is quite revealing that Microsoft only include their coverage tool in the Enterprise, maximum-price editions of Visual Studio.  For Microsoft, plainly, it’s a luxury.  But to Java developers like myself, it’s something you use every day.

Of course I can’t afford the expensive corporate editions.  But I think there is a relatively cheap tool that I could use.  I will look.

Once the code is working, then I can set about adding the syntactical stuff that caused me to undertake this in the first place!  I have a small pile of grammars on the floor by my desk which have sat there for a fortnight!

I’m still thinking a bit about the ruins of the Roman fort which lies under the waves at Felixstowe in Suffolk.  This evening I found another article exists, estimating how far the coast extended and how big the fort was.[1]  It’s not online, but I think a nearby (25 miles away) university will have it.  I’ve sent them a message on twitter, and we’ll see.*

I’ve also continued to monitor archaeological feeds on twitter for items of interest.  I’m starting to build up quite a backlog of things to post about!  I’ll get to them sometime.

* They did not respond.

  1. [1]J. Hagar, “A new plan for Walton Castle Suffolk”, Archaeology Today vol 8.1 (1987), pp. 22-25.  It seems to be a popular publication, once known as Minerva, but there’s little enough in the literature that it’s worth tracking down.

From my diary

WordPress decided, without my permission, to install version 5.1, complete with their new but deeply unpopular “Gutenberg” editor that nobody either wanted nor requested.  I can’t downgrade from 5.1, but I’ve managed to get rid of the useless Gutenberg editor.  Let me know if there are any funnies.

From my diary

This is another highly technical post, so I apologise to those readers with no interest in programming.

This week I have continued the ghastly process of migrating the 27,000 lines of code that make up QuickLatin from Visual Basic 6 to VB.Net 2008.

I found that the “Upgrade Wizard” for VB6 was no longer included in versions of Visual Studio later than 2008.  So I don’t really get a choice on which version of dotNet to use.  That said, I have found that it works quite well, so long as you approach the problem in the right way.  You will, in fact, have to adopt this approach whatever tool you use.

The first thing is to place the existing code under source control.  You will need to change this code a lot, to make it fit to convert.  Sometimes you will get it wrong, and need to revert back to the last checked-in version.  Believe me, you will!  I checked in code after each small set of changes.  It was the only way.

You see, the key to converting a VB6 application to VB.Net is to keep the application working at all times.  Don’t simply launch the upgrade wizard and then end up with 50,000 errors in the VB.net version, and then start at one end to fix them all.  You will just give up!

Instead, make changes to the VB6 version of the code.  Make small changes, check it works, check in the change.  Then do another; and another.

We all know the sort of things that don’t get converted OK:

  • Fixed strings in user-defined types (UDTs).  So code these out.  Convert them to non-fixed strings, a little at a time.  Of course you created them in order to do Win32 API calls?  Well, they won’t convert, and you will have to recode this stuff by hand.  So, do a little recode in VB6.
  • API calls, i.e. stuff that you added in to do more hairy stuff.  Recode to remove them.  You may end up just commenting the contents of the functions out.  I have stuff that does a splash screen.  I don’t need that code in VB.Net, which has a built-in SplashScreen template.  So with other things.
  • Front-end forms stuff.  No need for splitters – VB.NET has its own SplitterContainer.

There are many more.  Some are listed in a Microsoft document “Preparing Your Visual Basic 6.0 Applications for the Upgrade to Visual Basic.NET”  (no doubt this link will fail in a couple of years, thanks to Microsoft’s idiotic policy of moving files around on their website).  If you page down past the general chit-chat, at the bottom is a list of stuff that won’t convert.  Fix these.

If you do this, you can eliminate most of the rubbish, while keeping most of your code still working.

Once you have done this, then do a test of the Upgrade Wizard.  Expect to throw it away; but it will give you a list of failures to address in VB6.

Once I did this, I ended up with some 37 errors in VB.Net.  That was a tiny number!  Most of these I fixed in VB6, and reran the Upgrade Wizard several times.  By the end my VB6 application was rather damaged, and much of the UI didn’t really work.  But the logic engine was still running just fine.

A few things just won’t convert.  But you can fix a few on the other side.

Once your VB.Net application compiles, you can try and run it.  It will fail, of course.  This bit is just slog.  You find out what is wrong, and then consider if you can code it out in VB6 and re-upgrade.  Often you can.

QuickLatin has a lot of file-handling.  VB6 was slow in reading files, so I created a .DLL written in Visual C++, purely to grab a file and squirt it into an area of memory mapped to an array of UDTs.  Needless to say this did not convert to dotNet!  So what I did was write a slow  version, in raw VB6, which did the same thing.  I unpicked the optimisation, knowing that I could reoptimise on the other side of the upgrade process.

I ended up recompiling the DLL.  I’m not sure when I wrote that, but it was probably in Visual Studio 6.  It produced a DLL which was around 80k in size.  The version of the same code, produced by Visual C++ 2008, was 107kb.  It did exactly the same; but Microsoft’s lazy compiler developers had bloated it by 25%.  Microsoft was always notorious for code bloat.  I remember that when IBM took over the source code for OS/2, they were horrified at how flabby it all was, and rewrote most of it in assembler.

However I couldn’t get the DLL to work in VB.Net, whatever I did.  So… I eliminated it and accepted the slower load, for now.

I’ve now reached the stage where the code runs, but it isn’t doing it right.  This is not unexpected.  The change from arrays based on 1 to arrays based on 0 was always likely to break something.  But it’s an opportunity to make use of a VB.Net feature, and create unit tests!  I have started to do this, not without pain.

Of course even VB.NET 2008 is now more than a decade old.  At that time the idea of loose coupling and dependency injection was only just coming in.  I gather that even today Visual Studio 2019 doesn’t really support this all that well.  To a professional Java developer like myself, the idea that the DI equivalent of Spring isn’t even on the mental horizon of Microsoft staff is extraordinary.  I’ll manage somehow; but why can’t I just annotate my classes in dotNet, as I do in Java?  Why?

In the course of today, it has become clear to me that Microsoft’s developers never used VB6 themselves, nor do they use VB.Net.  If they had, they would never have created this huge roadblock to upgrading VB6.  There is still a huge amount of VB6 out there in corporations.  But Microsoft’s staff couldn’t care less.  Indeed there always was a lot of it about, which is one reason that I found it expedient to learn some, all those years ago.  Job security consists of having the skills that people want, even if they don’t want to see them on your CV.

Had Microsoft’s developers ever used VB6 internally, they would have collared the VB.Net team and given them a straight talking-to.

Likewise anybody who does the upgrade immediately finds that he can’t do a lot without massive refactoring.  Again, this shows that nobody at Microsoft actually ever went through this process.  Because you don’t want to do a load of refactoring. You have no tests.  You might break stuff.  You can’t easily create tests either for code in Modules, rather than classes.

Microsoft was founded by Bill Gates, who owed his start to writing a Basic Interpreter for some of the early microprocessors.  So Basic was important to him.  It seems that in later years it wasn’t important to anyone else.  This is a shame.

Microsoft was very arrogant in the 90s and early 2000s.  Few were sorry when Google knocked them off their perch.

Oh well.  Onwards.  Thank heavens I have lots of time right now, tho!

From my diary

I’ve been continuing to work on QuickLatin.  The conversion from VB6 to VB.Net is horrible, but I am making real progress.

The key to it is to change the VB6 project, so that it will convert better.  So for instance I have various places at which I make a raw Win32 API call, because VB6 just doesn’t do something.  These must mostly go.  I replace them with slower equivalents using mainstream VB6 features.  In some cases I shall simply have to rewrite the functionality; but this is mainly front-end stuff.

All the same, the key point is to ensure that the VB6 project continues to work.  It is essential not to allow this to fail, or develop bugs.  This is one area where automated unit tests would be invaluable; but of course that concept did not arise until VB6 was long dead.  So I have to run the program manually and do a few simple tests.  This has worked, as far as I can tell.

The objective is to have a VB6 project that converts cleanly, and works out of the box.  It may be slower, it may have reduced functionality in peripheral areas.  But the business logic remains intact – all those hard-crafted thousands of lines of code still work.

It’s going fairly well.  I’ve been working through known problems – arrays that need to be base 0 rather than base 1.  Fixed strings inside user defined types have to go.   There is a list on the Microsoft site of the likely problems.

Today I had my first attempt at running the VB.Net 2008 Upgrade Wizard.  It failed, as I expected it to do.  The purpose was to identify areas in VB6 that needed work.  But the converted code only had 37 errors.  Only 3 of these were in the business logic, rather than the front-end, and all were easily fixed in VB6.  There were also a large number of warnings, nearly all of them about uninitialised structures.  Those can wait.

So my next stage is to do something about the 34 front-end errors.  Probably I shall simply have to comment out functionality.  Splitters are done differently in VB.NET.  The CommonDialog of VB6 no longer exists to handle file opening.  That’s OK… I can cope with rewriting those.

It has reminded me how much I like programming tho.

In the middle of this enormous task, of course, there are no lack of people who decide to email me about some concern of their own.  So … polite refusals to be distracted are now necessary.  I hate writing those.  But a big project like this can’t get done any other way.

From my diary

It’s been an interesting couple of days.

I was working on the Passio of St Valentine, and I really felt that I could do with some help.  So I started browsing grammars.

This caused me to realise that many of the “rules” embedded in them were things that you’d like to have pop-up, sort of as an informational message, when you were looking at the sentence in a translation tool.

This in turn reminded me that my own morphologising tool, QuickLatin, was available and a natural candidate for such a thing.

This is written in Visual Basic 6.  I wrote most of it, actually, in Visual Basic for Applications, inside a MS Access database, during 1999.  (The language choice was dictated by the machine that I had available at the time, which had no development tools on it).  I then ported it to Visual Basic 6.  Microsoft then kindly abandoned VB6, without even a migration path, some time in the early 2000s.  This left me, and many others, stuck.  It is not a trivial task to rewrite 24,000 lines of code.

So where was my development environment?  I pulled out the last four laptops that I have used; I have them, because I keep all my old machines.  I found it on my Windows XP machine.  The machine started up OK!  In fact the batteries on the Dell laptops all started to charge, unlike a Sony Vaio which had Windows 7 on it.

The Windows XP machine had a tiny screen and was very old.  Could I perhaps install VB6 on Windows 10 instead?  The answer swiftly proved to  be a resounding “no”.  But I gathered a large number of tips from the web while doing so.

Then I tried installing VB onto my travelling laptop, which has Windows 7 on it, using all the info that I had.  The installation failed; but the software seemed to be installed anyway!

Then I tried doing it again on Windows 10.  This time I had a sneaky extra bit of information – to set the SETUP.EXE to run in Windows XP compatibility mode.  And … again it failed; but as with Windows 7, I could in fact still run it!

The process was so fraught that I knew that I’d never remember all the fixes and tips.  So I compiled all the bits together, hastily, into a reference guide on How to Install Visual Basic 6 on Windows 10, for my own use in days to come.

After two days of constant pain, I was at last in a position to work on the code!

But I wasn’t done yet.  I really would rather not work with VB6 any more.  Not that I dislike it; but it is emphatically a dead toolset.  My attempts to convert my code to VB.Net all failed.

But since I last looked, more tools have become available.  My eye was drawn to a commercial product, which Microsoft themselves recommended, by a firm called Mobilize.net.  The tool was VBUC.  You could get a free version which would convert 10,000 lines.  Surely, I naively thought, that would be enough for me?

Anyway I downloaded VBUC, and ran it, and discovered to my horror that I had nearly 30,000 lines of code!  But I set up a tiny test project, with half-a-dozen files borrowed from my main source project, and converted that.  The process of extracting a few files drew my attention to what spaghetti the codebase has become.  It was not trivial to just take a few.  This in turn made me alter the extracted VB code a bit, so that I could use it.

Converting the extract worked, but required some manual fixing.  However it did work in the end.

I was quite impressed with some of the conversions.  One of the StackOverflow pages had indicated that the firm were charging a couple of hundred dollars for the tool, back in 2010.  So I emailed to ask what they were charging now.

Mobilize.net then got a bit funny on me.  Instead of telling me, they asked me to tell them what I wanted it for.  I replied, briefly.  Then they wanted me to run an analyser tool on my code and send it in.  I did.  Then they wanted more details of what it did.  Quite a few emails to and fro.

By this stage I was getting fed up, and I pushed a bit.  They finally came back with a price, based on lines of code, of around $4,500!  That was ridiculous, and our exchange naturally went no further.

However I had not wasted my time, for the most part.  I could now see what the tool might do.  My code may be elderly, but some of the bits that were converted are basically the same throughout.  It is quite possible that I could write my own tool to do the limited subset of changes that I need.

One problem that was not handled well; QuickLatin loads its dictionaries as binaries, created by another tool of my own.  I found that VB.Net would not handle these, whatever I did.  The dictionaries would need to be regenerated in some other format.

So I spent some time experimenting with an XML format.  I quickly found how slow the VB6 file i/o was.  Reading a 20 mb file using VB native methods took 4 seconds.  Using MSXML to load the file and parse it into a linked list took 1.7!  I didn’t want the linkedlist method; but it was clear that the VB native methods were hideously inefficient.

I soon discovered complaints online that the VB.Net i/o did not support the methods used by VB6 and was even slower!  I’ve encountered problems of this sort before, which I got around by dropping into C++ and accessing the files through bare metal.  Clearly I would have to do so again.

Another problem that VBUC showed me was that VB6 fixed length strings were not really supported by VB.Net.  There was some sort of path, but it was horrible.  However there was, in fact, no reason to go that way; the file i/o, for which they were used, will have to change anyway.

I placed my code base under code control, using GIT.  Then I started cautiously making changes, checking that “amas” was giving sensible results – for unit tests were unknown in the days of VB6 – and committing regularly.  This proved wise; several times I had to go back to the last commit.

I spent quite a bit of time removing superfluous fixed strings from the code.  This was not trivial, but I made headway.

Something else I did, once I realised that coding lay ahead, was to rig up an external monitor, keyboard and mouse to my laptop.  I would have rigged up two, but there was no way to turn off the laptop screen – when you close the lid, the machine goes to sleep and that’s that.  On a commercial laptop, I’d set it to turn off the laptop screen and stay running.  Most graphics cards will support two monitors; the home laptops won’t support three.  Oh well.  But it was still better for serious work than using the laptop screen and keyboard alone.

Finally I started creating dictionary loading routines that would convert to VB.NET.  They are much slower; but I can optimise them when I get the code into VB.NET.  They have to change, come what may.  The key thing is to keep the program running and working at all times.  Take it slow.  Little by little If I take it apart into a million pieces, it will never get back together again.  Indeed this mistake I have made before.

Back in the 90s, automated unit tests, continuous integration, test-driven development and dependency injection were all  unheard of.  I have really missed having a set of tests that I can run to check that the code has not broken in some subtle way.  This again is a reason to migrate to VB.Net, where such is possible.  I did write test stubs in the original VBA, but there was no way to run them within VB6.  At least I have them still, and they can form the basis for unit tests.

So … it’s been a very busy few days indeed.  Nothing to show for it, to many eyes; but I feel optimistic.

The next challenges will be to change the other dictionaries over to the slow-but-safe method, and then remove all the stuff that supported the other approach.  This should simplify the code mightily.  Once this is done, then it will be time to attempt to convert the code.  Somehow.  All I need is time, and with luck I shall have some of that this week.

It is remarkable how far down the rabbit-hole one must go, just to get a bit of online help!

From my diary – The “upgrade” that destroys your website

WordPress has pretty much conquered the world, as far as blog engines are concerned.  Who uses anything else now?  Fortunately, to the best of my knowledge, WordPress has not adopted the evil practices of other ‘net monopolies and started to censor content for political reasons.  But the monopoly cannot be good for any of us.

I noticed a few days ago that my blog menu no longer works on my Android  smartphone.  My theme – underskeleton – did once!  But somewhere along the WordPress update schedule, the developers broke it.  Nor is this the first time.  I had to move away from my original theme “unnamed” for the same reason.  “Underskeleton” has not been updated in a year, so plainly it is time to move.  But to what?

Most WordPress themes these days seem to be aimed at websites, not blogs.  The WordPress standard themes are no better.

I have just spent an hour experimenting with themes until my patience was exhausted.  What I want is simple enough – two columns, my pages not treated as navigation, the side panel accessible on mobile, a header image, and reasonable typography.  But I was unable to find anything I liked.

During the week someone mentioned to me how complicated it is becoming to create web content.  There are a million options, and even those of us who are IT professionals are drowning in the flow of information.  Yet at the same time simple things become impossible.

It’s very like how Microsoft have destroyed Visual Basic.  You just can’t get simple stuff done these days.

Likewise the Contact Form 7 is broken.  I’ve used it for years.  But the last update played havoc, and sent me loads of spam.  Why???!  I fell back on my old Tertullian.org feedback form.  This too has had its vicissitudes – the endless upgrades to perl on the server keep removing support for bits of code that I used when I wrote it.  But mostly I can fix it easily.  WordPress on the other hand is a monster.

I sat down here over an hour ago to write a post on Cotelerius.  Instead I’ve been messing with techno-rubbish.

Thank you, WordPress.

Working on the bibliography of Ephraim Graecus

This is a bit of a computer-y post, so perhaps will be of interest to few.

A couple of days ago I started with a list of PDFs of Greek works of Ephraem Graecus from here, and I opened it up in Notepad++ and global search and replaced on it.  So this:

became this, by changing <li> to <hr>\r\nGreek Title:

A similar process of changes added in blank fields, and became this:

Then it was time to type in some of the data, from the CPG, picking up the pages of the Assemani edition.  The file became this:

Next came the pages of the Phrantzolas edition:

I carried on, until I ended up with a text file like this:

Now this is well and good, but I really wanted to manipulate the data programmatically.

For one thing I knew that the works were in the same order as the Thesaurus Linguae Graecae entries – 001-156 – which meant that all I needed to do was number them.  But I didn’t fancy typing that in.

What I did, therefore, was to turn each row into XML tags, of my own invention.  The file became this:

Of course it is really easy to get the start and end tags mismatched, so I used a free online validator to check the XML, just pasting it in, and dealing with whatever errors it found.

I avoided reformatting the XML in Notepad++, tho.  I did install the XML plugin, and tried it out; but it made the file much less compact – not a great idea if you are paging down it and filling in blank fields, as it doubles your keystrokes.

I then added in the translations information from the Ephraem Graecus website list of translations.  This meant more tags; but of course I could alter the structure as I went along.  I jammed in the data, separated with commas, for speed of entry, and got stuff like this:

So far so good.  But I was beginning to feel the need to start turning the XML into something that could be used in a web page.  That meant coding.

A moment’s thought suggested that I use perl.  I installed Strawberry perl, at the suggestion of the learn.perl.org site.  I had a lot of trouble installing other types of perl.

That done, I opened a command window and installed the CPAN libraries using

This done, I looked for a bit of sample code, which I found here, using the XML::LibXML library.  This I adapted.

I got a lot of “Wide character in print” messages, which turned out to be unicode-related.  I had to specify in the perl to use utf-8, and also that the STDOUT should use it too (see my code below).

When the script ran, the Greek was gibberish.  So I changed the windows console font to “Lucida Console”, and also specified that the code page for it to use was utf-8 by entering the command “chcp 65001”.

But once I had this running, it was fine!

Of course then I had to decide what I wanted my output to look like. I built it up, a bit at a time.  I found there was more than one translation; so I had to create a nested array of translations.  Some translations had a url, because they were online, so I needed a way to have a url.  I had to break up the original <translation> tag above into <info> and <url>.  But I managed.

I kept validating the xml file, and I kept running my perl script.

At the end, the output file looked like this:

So, if you open it in Chrome – the browser everyone uses for web development -, it looks like this:

Not bad!  The first entry is a bit messy, but that was a vice of the original data.  The Phrantzolas edition doesn’t give a title in Greek for the whole work, only for each of 26 bits.  Nor is there one in the CPG.  The links I made up from the <url> tags that were in my file.  I didn’t add much formatting, other than <small> on the editions etc line.

It’s fairly plain HTML.  My guess is that it will paste into a WordPress page quite nicely, in the “Text” tab in the editor.

It may need some rejigging, but the code is hardly complex.

Anyway, here are the complete files, as of today:

This contains the script, a.pl (if I have to type “perl a.pl > op.htm” I want as few characters as possible), the xml file input.xml, and a sample output, op.htm.

Of course the bibliography could be extended mightily, but I don’t propose to do this.  What I really wanted was the cross-reference between the old Assemani edition, the new Phrantzolas edition, and the CPG, plus any translations that were around.  We’ve got more than one translation already for some works.

All this did take a while!  But it was worth it.

From my diary

On Saturday I was working on a text file containing the works of Ephraem Graecus, as they appear in the Phrantzolas edition, with CPG numbers and Assemani page numbers.  This proved much more difficult than I had at first thought, and I was reduced to opening the PDFs of the Greek text and looking at the opening words in the index of initia in the CPG volume 5.

At various points it became obvious that it would be very helpful if I had a PDF of the CPG that was searchable.

I don’t possess the volumes of the CPG and never have.  The price puts them outside the reach of the layman.  (I do possess a copy of the CPL, however, because Brepols issued a paperback of it).  So, like most people, I am dependent on PDFs made up of photos taken with a mobile phone by someone or other.  These are always askew, and can’t be made searchable.

However… in my directory of CPG files, I discovered a set of 5 PDFs where the images of each double-page were pretty much square on, and also in grey-scale.  I never used them, as the grey-scale was faint, and unpleasant to look at.  But I started to experiment.

I pulled one volume into Finereader 12, with the options set to automatically split pairs of pages into two.  To my amazement this worked fine, without need for correction (in subsequent volumes I had to manually split a dozen pages).

The single page images were still a rubbishy hard-to-read grey, however.  I then tried saving the images out of FR12 to disk, as black and white .png files.  I hoped that these would be readable and … it worked!  The original images were such high resolution that the black-and-white versions were just fine.

The new page images were also much more readable, being black and white.

I then combined all the B/W images into a new PDF file, which became my new volume of the CPG.  So now I had a PDF of perfectly readable, square-on, single pages, in black and white.

I wanted to make this searchable.  Ideally the Greek should be searchable as Greek, and the Latin as Latin.  I am not clear how to do this.  One idea would be to pull the black and white images back into FR12, OCR them, and then let FR12 create a searchable PDF.  This might well work;  but the PDFs created by Finereader tend to be huge.  And… would the ancient Greek really work?

What I did instead was to use Adobe Acrobat Pro 9 to OCR the B/W PDFs.  This makes the Latin text more or less searchable.  It’s a start.

I’ve had to pause work on this for much of today in order to do a job interview, but I am resuming the process for all the volumes tonight.  Then I shall return to the Phrantzolas file, with the aid of searchable PDFs.

The job interview was successful, so I may have to go back to work next week!  Whatever I am to do must be done now!

Ephraem Graecus: the Phrantzolas edition (part 5)

Well, well.  At the start of volume 7 of the Phrantzolas edition of Ephraim Graecus, there is an additional introduction!  Let’s see what it says, shall we?  (Here are the pages – click to enlarge)

Once again I have OCRd them, and run the result through Google Translate.  We get this:

Αντί επιλόγου

Μέ τόν παρόντα Ζ’ τόμο ολοκληρώνεται ή έκδοση των Έργων του μεγάλου καί θεοφόρου Πατρός μας Όσιου Έφραίμ του Σύρου, ώστε νά γίνει προσιτή σέ όλους ή θεόπνευστη διδασκαλία του.

Τήν καλή αφορμή, γιά νά έπιχειρήσουμε τήν παρούσα έκδοση, πρόσφεραν σ’ εμάς Αγιορείτες Πατέρες, καί τό βάρος καί τή θεάρεστη φροντίδα γιά τήν πραγματοποίησή της έπωμίσθηκαν μέ προθυμία οί εκλεκτοί φίλοι έκδότες των Εκδόσεων «Τό Περιβόλι της Παναγίας». Άπό τή θέση μάλιστα αυτή θεωρούμε χρέος νά έκφράσουμε τίς ευχαριστίες μας στόν υπεύθυνο των Εκδόσεων γιά τήν πολύτιμη συνεργασία καί συμμετοχή σέ όλα τά στάδια της επίπονης διαδικασίας της έκδοσης αυτής.

Άπό τήν άρχή άνέκυψε όξύ τό πρόβλημα της άναζήτησης των έλληνικών μεταφράσεων των ’Έργων του Σύρου Πατρός. Γι’ αυτό καί ή προσοχή μας στράφηκε στήν άνεύρεση των παλαιών καί των νεώτερων εκδόσεων, καί των χειρογράφων.

Στό στάδιο αυτό μάς συμπαραστάθηκαν πατρικώς οί Σεβαστοί Γέροντες, π. Χαραλάμπης, Ηγούμενος της Ί. Μ. Διονυσίου, καί π. Γρηγόριος, Ηγούμενος της Ί. Μ. Δοχειαρίου, καθώς καί ό σεβαστός καί άγαπητός π. Νικόδημος, Μοναχός Άγιοπαυλίτης, τούς όποιους καί εύσεβάστως ευχαριστούμε.

Ευχαριστούμε επίσης τόν ’Ομότιμο Καθηγητή της Θεολογικής Σχολής τού Πανεπιστημίου ’Αθηνών κ. Γεώργιο Γαλίτη, καί τόν Επίκουρο Καθηγητή τής Φιλοσοφικής Σχολής τού Πανεπιστημίου Θεσσαλονίκης κ. Παναγιώτη Σωτηρούδη, γιά τό άμέριστο ένδιαφέρον μέ τό όποιο μάς συμπαραστάθηκαν στήν έκδοσή μας.

Τή μνεία ώστόσο τού μακαριστού Γέροντος Έφραίμ, Ηγουμένου τής Ί. Μ. Ξηροποτάμου, αισθανόμαστε έπιβεβλημένη γιά τό πατρικό ένδιαφέρον πού έδειξε γιά τήν πραγματοποίηση τής άπόφασής μας.

Τό άρχαΐο κείμενο τής παρούσας έκδοσης άντλήσαμε άπό τίς παλαιότυπες έκδόσεις τών Ed.Thwaites (’Οξφόρδη, 1709) καί J. S. Assemani (Ρώμη, 1732-1746), άλλά καί άπό νεώτερους έκδότες-έρευνητές. Παράλληλα άναζητήσαμε στούς χειρόγραφους κώδικες κείμενα τών Λόγων τού Σύρου Πατρός, άνέκδοτα ώς τώρα. Πολύ χρήσιμη στάθηκε ή έργασία τού Μ. Geerard (Clavis Patrum Graecorum), όπου έχουν καταχωρηθεΐ τά άποτελέσματα τής έρευνας στό χώρο τής έφραίμειας γραμματείας.

’Ανέκδοτα κείμενα πού άντλήσαμε άπό χειρόγραφους κώδικες, είναι τά εξής:

1. Λόγος περί τής άναστάσεως, έν τοίς έγκαινίοις, καί περί τού άγιου μνήματος (Χειρόγραφο άριθ. 244 ΜΠΤ τής Εθνικής Βιβλιοθήκης ’Αθηνών, ΙΔ’ αί., φύλλα 60r-62v).

2. Λόγος έν τώ σταυρώ, έπί των έγκαινίων, καί περί τοϋ άγιου ξύλου του σταυροϋ (Χειρόγραφο άριθ. 244 ΜΠΤ τής Εθνικής Βιβλιοθήκης Αθηνών, ΙΔ’ αί., φύλλα 62v-65r).

3. Πώς ό ληστής προ τής άναστάσεως είσήλθεν εις τον παράδεισον (Χειρόγραφο άριθ. 115 τής Ί. Μ. Δοχειαρίου Αγίου Όρους, ΙΕ’ αί., φύλλο 157).

4. Λόγος εις τό μαρτύριον του άγιου μεγαλομάρτυρος Βονιφατίου (Χειρόγραφο άριθ. 4887.767 τής Ί. Μ. Ίβήρων Αγίου Όρους, ΙΗ’ αί., φύλλα 44ν-54ν).

5. Λόγος περί τοϋ Καιν, καί τοϋ Αβελ τής άναιρέσεως (Χειρόγραφο άριθ. 99 τής Ί. Μ. Παντοκράτορος Αγίου Όρους, ΙΣΤ’ αί., φύλλα 375r-396r).

6. Λόγος εις τον Αβραάμ καί Ισαάκ (Χειρόγραφο άριθ. 163 ΜΠΤ τής Εθνικής Βιβλιοθήκης Αθηνών, ΙΣΤ’ αί., φύλλα 8v-17r).

7. Λόγος ότε οί μάγοι παρεγένοντο εις ‘Ιεροσόλυμα (Χειρόγραφο Μόσχας άριθ. 284 (Vladimir 215), Θ’ αί., φύλλα 101v-103r).

Στήν πορεία τής έκδοσής μας άντιμετωπίσαμε οξύ τό πρόβλημα τής αυθεντικότητας τών μεταφρασμένων στήν ελληνική έργων τοϋ Σύρου Πατρός, πού από τίς αρχές τοϋ αιώνα μας απασχόλησε τούς ειδικούς καί τήν έρευνα. Εμείς κατά τήν έπιλογή τών κειμένων σταθήκαμε μέ σεβασμό στήν παράδοση τών χειρογράφων, καί γι’ αυτό μόνο έλάχιστα κείμενα άφήσαμε έξω άπό τήν παρούσα έκδοση.

Από τά διπλά ώστόσο κείμενα πού συναντήσαμε στους παλαιούς έκδοτες καί στά χειρόγραφα, έπιλέξαμε τά πληρέστερα. Τά διπλά κείμενα τής έκδοσης τοϋ Assemani έπισήμανε μέ άκρίβεια ή Δημοκρατία Hemmerdinger-Ήλιάδου (βλ. Orientalia Christiana Periodica, τόμος XXIV, 1958, τευχ. 3-4, σελ. 371-381).

Κείμενα ελληνικών χειρογράφων πού άφήσαμε έξω άπό τήν έκδοσή μας είναι:

1. Λόγος εις τόν βίον τοϋ οσίου πατρός ημών Ανδρονίκου καί τής συμβίας αύτοΰ Αθανασίας (Χειρόγραφο άριθ. 2541.208 τής Ί. Μ. Ξηροποτάμου Αγίου Όρους, ΙΒ’ αί., σελ. 406 κ.έ.). Αποδίδεται στόν Όσιο Έφραίμ, άλλά ό βιογραφούμενος Άγιος έζησε τόν έκτο αιώνα.

2. Κεφάλαια πάνυ τερπνά (Χειρόγραφο άριθ. 394 τής ‘I. Μ. Μεταμορφώσεως Μετεώρων, ΙΒ’ αί., φύλλα 394-405). Είναι άνθολόγηση άπό Λόγους τοϋ Όσιου Έφραίμ τοϋ Σύρου, τούς οποίους έχουμε περιλάβει στήν έκδοσή μας.

Πληροφορούμε τέλος τούς ένδιαφερόμενους άναγνώστες δτι ετοιμάζεται ή έκδοση Εύρετηρίων τών Έργων τοϋ Όσιου Έφραίμ σέ ξεχωριστό τόμο.

Παραδίδοντας λοιπόν όλοκληρωμένη τήν παρούσα έκδοση τών Έργων τοϋ μεγάλου καί θεοφόρου Πατρός μας Όσιου Έφραίμ τοϋ Σύρου στήν κοινή ωφέλεια καί οικοδομή, παρακαλοΰμε τούς φιλόθεους καί φιλάδελφους άναγνώστες νά εύχονται γιά τούς κοπιάσαντες σ’ αυτό τό πνευματικό έργόχειρο, ώστε νά βροΰμε έλεος ένώπιον τοϋ θρόνου τής μεγαλωσύνης τοϋ μεγάλου Θεοΰ τής έλπίδας μας.

Στόν Σωτήρα μας Κύριο Ίησοΰ Χριστό άνήκει ή δόξα, καί στόν Όσιό του Έφραίμ τόν Σύρο ή τιμή, στούς άπέραντους αιώνες. Αμήν.

Κωνσταντίνος Π Φραντζόλας

Prologue

With this present volume, the publication of the works of our great and divine Father St Ephraim Syrus is completed so that he and his inspired teaching becomes accessible to all.

The good reason for us to handle the present edition was the offer of Holy Fathers to us, and the weight and the sincere care for its realization were eloquently expressed by the eminent friends, “The Garden of Our Lady” publishers. From this point of view, we feel obliged to express our gratitude to the publications officer for valuable cooperation and participation in all stages of the painful process of this publication.

From the beginning, the problem of the authenticity of the Greek translations of the Syrian Father’s Works was raised. That is why our attention turned to the discovery of old and newer versions, and manuscripts.

At this stage, the Sacred Elders, Father Charalambis, Abbot of I.M. Dionysios, paternally supported us. and P. Grigorios, Abbot of I. M. Docheiarios, as well as the respected and dear Nicodemus, the Monk Agapassilitis, whom we thank graciously.

We also thank the Professor Emeritus of the Theological School of the University of Athens, Mr. George Galitis, and the Assistant Professor at the Philosophical School of the University of Thessaloniki, Mr. Panayiotis Sotiroudis, for the unparalleled interest with which they supported us in our publication.

However, the mention of the elder Efraim, the Abbot of the I. M. Xeropotamos, we feel affectionate for the parental interest he has shown in the realization of our decision.

The original text of this publication was derived from the old editions of Ed. Thwaites (Oxford, 1709) and J.S. Assemani (Rome, 1732-1746), but also from more recent editors. At the same time, we looked at hitherto unknown manuscripts of the Syrian Father’s works. Most useful was the work of M. Geerard (Clavis Patrum Graecorum), where the results  were recorded of research in the field by the secretariat.

Unpublished texts that we drew from manuscripts are as follows:

1. Sermon on the resurrection (anastasis), during the inauguration (of the temple), and on the tomb (of the Lord) (Manuscript No 244 of the National Library of Athens, Nos., Pages 60r-62v).

2. Sermon on the Cross, on the Inaugurations, and on the Holy Wood of the Crucifix (Manuscript No 244 of the National Library of Athens, Nos., Pages 62v-65r).

3. How the robber entered paradise prior to the resurrection (Manuscript No. 115 of St. John’s Doheryour, Mount 157, p. 157).

4. Words of the Holy Martyr Boniface (Manuscript No. 4887,767 of the Holy Monastery of Iviron of Mount Athos, LH., Pages 44v-54v).

5. Sermon on Cain and Abel in Revelation (Manuscript No 99 of the Holy Monastery of Saint Athos, Pasteur, pages 375r-396r).

6. Sermon on Abraham and Isaac (Manuscript No 163 of the National Library of Athens, pp. 8v-17r).

7. Sermon on why the magicians came to Jerusalem (Moscow Manuscript No 284 (Vladimir 215), Ile., folios 101v-103r).

In the course of our publication, we have faced acutely the problem of the authenticity of the works of the Syrian Father translated into Greek, which since the beginning of this century has been the concern of specialists and research. When selecting the texts, we were respectful of the manuscript tradition, and so only a few texts were left out of this publication.

However, from the double texts we encountered in the old editions and the manuscripts, we have chosen the longer. The double texts of the Assemani version have been accurately documented by Hemmerdinger-Iliadou (see Orientalia Christiana Periodica, volume XXIV, 1958, pp. 3-4, pp. 371-381).

Greek manuscripts that we left out of our publication are:

1. A speech in the life of our father Andronikos and his wife, Athanasia (Manuscript No 2541.208 of Ioannis of the Xeropotamos monastery, Mount Athos, pp. 406 et seq.). It is attributed to the Holy Ephraim, but the Saint in question lived in the sixth century.

2. All-pleasing (τερπνά) Chapters (Manuscript No. 394 of I.M. Meteorosis Meteora, L.A., folios 394-405). It is a liturgy from the Words of the Holy Ephraim of Syros, which we have included in our edition.

Finally, we would like to inform our interested readers that the publication of an index of the works of St Ephraim is being prepared in a separate volume.

Delivering therefore the completed present edition of the works of our great and God-bearing Father, the venerable Ephraim of Syros to the common benefit and edification, we ask the God-loving and brethren-loving readers to pray for those who toiled in this spiritual handiwork so that we may find mercy before the throne of the greatness of the great God of our hope.

To our Savior, the Lord Jesus Christ, and to St Ephraim the Syrian, be glory and honor, throughout the centuries. Amen.

Konstantinos P. Phrantzolas

Now I do not speak even a word of modern Greek, but we do get quite a lot of information from this, even if it degenerates into gibberish at points.  We get the extra texts that Phrantzolas added, although I’m not at all sure about the accuracy of the English titles!  We get the mss that he used (probably more reliable in the Greek).

All useful stuff!

UPDATE: (7 Nov 2018): Many thanks indeed to the correspondent who wrote in and corrected the gibberish bits of Google Translate for us – thank you!

Ephraem Graecus: the Phrantzolas edition (part 3)

Phrantzolas is mentioned in Part 1 and part 2)

A correspondent has discovered PDFs – or, rather, Djvu files – of a number of volumes of the Phrantzolas’ edition of Ephraem Graecus.[1]  Unfortunately volume 2 is corrupt and will not open – does anyone have a copy of this?

The edition prints a translation in modern Greek at the foot of each page, like this:

I’ve just installed a more modern WinDJView viewer, which seems to work well.  Using this, you can save a page out as png, and then import to Finereader 12, where the Modern Greek comes out as:

Μακαρίζω τήν υμών ζωήν, ώ φιλόχριστοι, δτι εύπαρρησίαστός έστι καί ταλανίζω τόν έμόν βίον, δτι άχρηστος υπάρχει. Μακαρίζω υμάς, ώ γνήσιοι, δτι όρθή πολιτεία φίλους έαυτούς έποιήσατε τώ Θεω [καί τοίς άγγελοις]. Τίς δέ περί έμου πενθήσει, δτι παρώξυνα Αυτόν διά των έργων μου των μάταιων;

Μακάριοί έστε υμείς, οί κληρονομοΰντες τόν παράδεισον διά της αγνής υμών άναστροφής καί τής αγάπης υμών τής άμέτρου. Θαυμάζω γάρ υμάς, πώς ούκ ώκνήσατε τοσαύτης όδοΰ διανύσαι διάστημα διά λυσίτέλειαν ψυχής. Τό δέ θαυμαστότερον, δτι πρός ευτελή καί κατακεκριμένον ταίς άμαρτίαιζ ήλθετε, παρ’ αύτοΰ αίτοΰντες τόν τής ώφελείας λόγον. Θαΰμα άληθώς, πώς

Which Google translate renders as:

I blame your life, you gentlemen, that you are intimate, and that I am ostentatious of life, that it is useless. I blame you, genuine ones, that you have made good friends with your friends, God and the angels. Whom do you mourn about me, that I have paraphrased Him through my works of vain?

Blessed are ye, the inheritors shall partake of it by your pure anger, and of your loving kindness. I admire you, how did you go along this path for a while? The most miraculous thing is that you have come to the lamentations and to the miserable sins, and they are asking for the word of opportunity. Marvel truly, how

This is gibberish, but as with all Google translations, not without uses.  If you interleave the Greek and English sentences, it acts as a useful vocabulary check.  But of course one must be wary.  Interesting how “blessed” is initially rendered as “blame”.

UPDATE: 2nd November 2018.  OK, well apparently the top is the modern Greek and the bottom is the ancient!  Thank you to the kind commenters who pointed this out.  Yes, I really cannot tell which is which on first glance – anybody got any tips on what to look out for?  Finereader for the top section gives me:

Λόγος γιά τις αρετές καί τις κακίες

Μακαρίζω τή ζωή σας, φιλόχριστοι, διότι είναι εύπαρρησίαστη1, καί ελεεινολογώ τόν δικό μου τρόπο ζωής, διότι είναι άνώφελος. Σας μακαρίζω, γνήσιοι άνθρωποι, διότι μέ τόν όρθό τρόπο ζωής κάνατε τους εαυτούς σας φίλους τού Θεού καί των Αγγέλων. Ποιός λοιπόν θά πενθήσει γιά μένα πού παρόργισα τόν Θεό μέ τά μάταια έργα μου;

Είστε μακάριοι εσείς, διότι μέ τήν αγνή διαγωγή σας καί τήν άμετρη άγάπη σας κληρονομείτε τόν παράδεισο. Σάς θαυμάζω δηλαδή πού δέ διστάσατε νά διανύσετε τόσο μακρύ δρόμο γιά τήν ώφέλεια τής ψυχής σας! Καί τό πιό αξιοθαύμαστο είναι, δτι ήρθατε σέ άνθρωπο τιποτένιο καί καταδικασμένο γιά τίς αμαρτίες του, ζητώντας απ’ αυτόν ώφέλιμο λόγο. Αληθινά, είναι νά άπο-

and Google translate for that gives me:

Reason for virtues and malice

I love your life, you are compassionate, because it is compassionate1, and I study my own way of life because it is beneficial. I blame you, genuine people, because in the right way of life you have made yourselves God and Angel’s friends. Who then will mourn for me that I have tempted God with my futile works?

You are blessed because, in your pure conduct and in your direct love, you inherit paradise. So I admire you where you did not want to go that long way for the benefit of your soul! And most admirable is that you have come to a humble and condemned man for his sins, asking for a beneficial reason. It is true,

Better, I think.

A kind correspondent tells me that the things to look for are:

  •  Dative drops off in later Greek
  • Nu disappears from the end of neuter nouns ~o
  1. [1]Konstantinos G. Phrantzolas (or Phrantzoles  – although the copyright on vol. 1 gives Κων. Γ. Φραντζόλάς – both seem to be used), Ὁσιοῦ Ἐφραίμ τοῦ Σύρου  ἔργα, Thessaloniki: Το περιβόλι της Παναγίας / To Perivoli tis Panagias, 1988-98, 7 vols