Session 11

Of the videos, this is the twelfth (last) session.

This will get replaced with the video (if the JavaScript runs properly).

The following is the comment I had left on YouTube:

System stuff (INITEX / format files etc), followed by Q&A starting at ~23:00.

Some quotes and highlights:

The DVI format changed between the last hour and this!

“He was a professor of mathematics at Ohio State for several years but now he’s decided to be rich instead.”

“Computer mail is so easy to send, you get a lot of it: and so I’ve had my secretary screen it for me. But sometimes…” (cf. https://cs.stanford.edu/~knuth/email.html)

The transcript below is autogenerated from YouTube, and needs to be cleaned up.

and it looks like I might survive it after all in fact I’m quite thrilled to see that this there’s still almost 70 people here that had stuck it out to the end I was I was expecting to come with the final devoted dozen or something to this last hour but now it looks like I’m going to actually have to give the lecture okay several things happened in between first of all we had an overwhelming vote for changing DVI with respect to these XXX commands so now the official DVI version 2 has X X X 1 X X X 2 X 3 X X X 4 and the post amble instruction is number 243 now and so that is going to take place don’t propagate this old this old definition of version 2 too far because that’s just has a bug in it you know I just cover cover to the guinea pig edition says that it has bugs in it and nothing has been announced as version one yet or anything so we can still make these changes the official version 2 will have that in it for sure another thing I could I guess I should have mentioned last hour is the I see there were several things that came up people commented out one is that a good idea for having these these pointers in there that’s that connect one blp to the previous one is that you can skip around and just print a few pages of the file and that’s that’s quite often people have a huge DVI file and they say please some the paper wrinkled on on page 98 or something with or now would you please just give me page 98 again and this makes it a fast way to skip through the file for such things like that if you can now on the other hand on IBM Pascal it won’t allow you to go conveniently from the end of the file and they and they have been writing to post ambles they write the ordinary DVI file and then they also write the post gamble as a separate file and it’s easy in their particular system it’s just as well for them to pick up the post amble first from this short file and then read the other one and keep two files intending like that but if they want to ship a DVI file somewhere else they’ve got to have it in the standard format with the post handle at the end question that’s not necessary in the IBM vm system you just need the one clients not necessary as a matter of preference in some places that they might want to do it but they might young okay that’s true it’s a okay thanks right no maybe would be good idea for DVI type to be called version 2 since it prints out version to AVI files uh-huh well that’s the thought now the let’s see it was probably something else that I forgot about that i forgot i thought it would be a good idea to bring out hmm what was it oh well there’s a million things that i wish i could present to you all but it’s time is so short now the subject of this last lecture was announced as getting an initial izing a working tech production system and we want to talk about that person then clean up with all all other questions answered so the as i mentioned several times we’ve got a switch in the program code that’s between in it and teeny is all is commented out unless you’re you’re writing a program message generating a version of tech solve anything then if you have so if this really is no okay if these are both know then you get any tech if these are our brackets and in order to get it to come out in web you escape character in front of it to get to get the brackets when you get a program that’s called beer tanks beer tent or vertex are virgin tech it say something it’s a version of tech that is for production doesn’t have anything in it it’s a tabula rasa it’s it’s mind is clean and no no nothing inside of it to die now the the only difference then is what is how you set in it in tinning in order to generate these two you should you should probably make different change files that differ only in a few ways but one of them to generate this one I want to generate this one unless you would prefer to edit that you know maybe one of them you you’re generating you know you keep your change probably in 14 min and edited back and forth and write a little program to fix that or something but since we don’t know we don’t have nested change files in our web system we don’t have a way to make a short change file in your big change file so I’ve been just keeping to change files and I don’t change only these two things in I also change the sizes of tables in my any tech I don’t have as large mm size because I don’t need it i only need enough to read in my macros not to actually use the macros in any tech however i increase the size of my hyphenation tables because i don’t know how many how many patterns i’ll actually need and then in inver techno you know from looking at different format packages I’ll know that I have enough room if I cut cut the hyphenation tables down now any tech can do a few things that vertex can’t it can right format files it can load all the primitives into the hash table you can load all the strings into the string pool it it can compute pattern I’ll take patterns and pack them into this packed try that we talked about yesterday those algorithms are commented out otherwise and they would just be dead wood in you know production version of tech because they only have to be done on these rare occasions when somebody is loading in a brand new format package that’s supposed to be that’s supposed to be dumped out now in order to make room for those then you can you can decrease the mem size but on production version detect well let the mem size be as large as as reasonable so that you can you know set larger jobs I I actually don’t imagine that as sale will actually be using either these programs very often because what will happen is when you when you run vertec then you will say some format that you will load say am stick but let’s say for first basic and you will and you will ask for vertex basic here I’m showing it as a command line talk about command lines later so vertex suppose I run vertec and it gives me a prompt and I say basic and then it runs through the basic file and then I say dump donno vertec no sorry I let me talk any tech first I’m getting ahead of myself here initech two asterisks and I start out and and I say basic unit type in reason basic format basic loads in a lot of fonts it defines patterns for hyphenation it defines a bunch of macros it defines two codes math codes del cause you see codes SF codes you know for the math codes tell what characters mean in math mode SF codes are the space factor settings the the macros are going to are going to be teed to certain fonts in there so they’ll they’ll work well with fonts they’ll say that your math and greetings from Seattle I just got the note here saying greetings from Seattle IRA now with that sense but then excuse me a minute I don’t know if Phyllis knew that she was interrupting this classy well the delimiter codes oh goodness forget it ok the delimiter codes would be tied to your France for example would say that you left parenthesis it says that your left parenthesis is in a certain position in the font so that you can start your searching for next larger and things like that now the the guy went to to college with me lives in Hong Kong he’s a he was a professor of mathematics at Ohio at Iowa State for several years but now he’s decided to be rich instead okay now that’s that not okay some computer mail is easy so easy to send you get a lot of it and so I’ve had my secretary screen it for me but sometimes she doesn’t know if I really want an urgent message or not hmm basic will contain all that stuff and so I haven’t written basic yet but you can see what that it will have to have everything that that depends on the France is going to be is going to be in there it used to be pre used to be predefined in tech in the present tech I’m embarrassed to say this but there was a there was a relationship between the kinds of the limiters that you had to have in different fonts the left bracket that the the left bracket and the floor functions and so on in the symbols font had to be in exactly the same position in the extension fund except shifted over and that was ridiculous but it was you know at the time I designed that I thought I was going to be the only user of the program now now all these things are freed up and they’re all specified by tables basic is where those tables appeared so that anybody who uses the basic that I supply that will be geared to the the fonts that I supply also just to be consistent somebody has another guy’s fonts they make their own their own analog of basic okay run any tech and then it has four basic and then after that it might prompt us for the next thing and we’ll say dump dump prints out now it will then print out a bunch of messages saying that it’s printing out flat file basic FMT and it’s going to be called basic FMT and then the date that today’s date so when when text starts out it would have said this is tech any tech version something any tech and then when this one starts out it will say this is tech and no format pre-loaded and then we would say basic and it would use the algorithm I mentioned earlier today to bring in this file basic that FMT and it would then have all that stuff all the fonts and everything done about on our system this would save a great deal of time because this will mention about 20 fonts I think and to open 20 different short TFM files and read them in takes a bunch of time in our system reading one FMT file be much faster the time actually to generate to enter all those primitives in the hash table is is negligible that was taking was quite fast 240 calls on the hash program that wasn’t too bad to compute the patterns was taking about eight seconds according to the patterns that we showed yesterday so that wasn’t too bad but me but so that the thing we’re really saving oh well we wouldn’t want to do that late seconds every time but we’re saving now maybe 15 seconds for loading those TFM files and I don’t know why but it’s when the time sharing decides to give service to the other people when we got when opening a lot of short files in our system anyway now vertec is there then and and if you say basic then you’re then you got it the way the program is set up if you didn’t say basic you would get basic because basic is the default but imagine that this was some other thing besides based now on most on anyway lot on lucky systems let’s say you can now save the whole core image and start from here and and imagine a you know so you hit call or something here and source say and then you say save the coromant and an operating system is is able to swap you out at this point and and timeshare for other things on a lot of computers so then it should be able to swap you in again tomorrow and over and over again for each user the capability is pretty pretty much in there the thing that the operating system worries about is your registers getting them in a consistent state or something like that but there’s there’s a if you’re lucky there’s a system that call it you can make I will put this out on some dump file or XE file or some other kind of called file that that you can load directly and it’s even faster to load this and to go through your linking loader it takes disks it it’s fast and we don’t even have to read in of the front file now if so if you have that then you should then you can save it and call it tech because the word tech itself will be used in the user manual to indicate a version that that assumes basic format my user manual is going to be an introduction to the primitives of tech as extended by basic format and there will be a distinction between what’s primitive and what’s in basic but it’s not going to introduce anybody else’s format module but you can’t use tech without a format module very well so it not basic is the one that it’s going to talk about now so that’s the system will call tech if this instead of basic was say amps tech for the Maric mass society or whatever macro package you have then we would save that we would have am stick and somebody then who starts out and so that’s why I’m saying any taken vertec hardly ever would be called people the users out there would be running tech or am stick or whatever the popular format Doug things are at your place that would certainly that would there would be of some advantage just because they have less to type it saves them a little bit but and on our system anyway we would probably do it that way not it’s not going to be true for everybody system now huh what’s going to happen inside this Pascal program so that the Pascal program knows what to do at this point because the Pascal program doesn’t just want to start off from this core image at this point that would actually be a mistake it has a date and time recorded in there for example that’s no good it’s got a job name already recorded in it am stick you and your job name would always come out called amps on a mistake that DVI so there are things that you want to initialize over again when you start running okay well that’s been been explained in the program when we get down to the main program which is there at part 51 module number 1197 and I’m going through the discussion here that’s in 1198 the there’s a global variable that I call ready already and this is initialized to when when tech get when when any of these programs start out and and set of the key global variables to values then ready all ready get set to a sort of a strange constant three one four one five nine under the assumption that it’s very unlikely that it already was happened to be that when the when the loader finished with the program now some Pascal’s will will be cautious and they will put a special flag value in two variables so that if you make a mistake of using a variable before you have assigned it a value then it gives you an error message and if you if you are so that would destroy this because i am using a breaking the rules of pascal the very first thing i do after opening the terminal for output is asked if ready already equals 3 14 and 59 if it does and i assume everything is okay and i jump right into the beginning of the program otherwise i go through the whole initialization procedure that will do prompting and things like this for format files now these systems that protect you against such sins also probably they allow you to turn off this protection and as soon as tech is debug we won’t need that protection anymore so that’s how you would be able to turn it off and still use this kind of a heck but this is a way that works on a lot of systems so all I have to do is is save it with the global variables including ready already equal to this constant and then the small chance that that the constant already would have been there just by coincidence from some previous tech and it got loaded in the same place and the loader head and cleared it out I suppose but that’s that’s the chance that I’m taking them okay now oh I explained I explained all of that and what else is there to talk about for initializing any questions on this I would say that I would say the major part of the debugging that I’ve done has been in arranging these things at the very beginning and end of the program so that they so that they will handle on unusual exceptional cases that I didn’t think of when i first wrote the program the teens the guts of the thing inside where it’s doing syntax and semantics and so on that’s all clean computer science and this other stuff is is hard and and I think it’s getting close to being corrected okay now there’s one thing that any tech can’t do and that is load of format file you need tech always it I guess it has to load the string the string pool and there’s no easy way for me to tell it that I wanted to load a format file instead and start from there so I just didn’t build that in I have to fake it now as i’m debugging the thing i stop it with the debugger at the point where a test if format i dint equals zero and I and Foreman ident is a variable inside the program that any techs initializes in any tech players that they’re the assignment format i dint is set to quote any tech in parenthesis i guess and otherwise it’s a variable at set to zero and then any tech sets it to the name of the format after preloading a format like it’ll say basic of july twenty eight nineteen eighty-two or something like that so format i dint is is set non zero at this first part of the program only if I’ve got any tech and so so in order to bypass that I stop my debugger at this line where it’s going to test format i dint 40 and I i reset formatted n20 using the debugger ability to set variables and then it goes through and I can I pretend I have a vertex for debugging but it has to be done with change files otherwise and I guess that’s okay i don’t see that i ought to have a special test in there but i might think of something that improves that by the time this thing finally gets released since otherwise any tech can do everything the code is there to load the format file there’s just no way to get to it unless I and as I change format i dint manually so that’s the way I’ve been doing it as I as I get the thing started now okay I think I’ve covered the main points that I wanted to make and so I open up for all other questions answered and if these questions want to focus on another part of it of the tech program and I could try to answer questions on that Arthur can you use a dump with vertec if you say dump with vertec it you get into error message shown in module 1190 where is it okay dump an end come out with the same command code and so as far as most of tech is concerned end and dump are treated identically until you get to a module where ok module 1203 right and that NC is set to occur charge this is the final cleanup procedure is what’s called at the very end and see is the Kercher which is either 0 or 1 if it was ended umph at this point it checks to see whether you’ve had you’ve you have a name for your for your log file or whatever it will be called and interesting algorithm therefore to eject the remaining pages I guess I ought to talk about that a second and then it you check to see whether or not we’ve finished all the groups that we were in but then there’s this test if C equals one then in it we will do a store format file and return but if thats commented out we get to this error message that says you lose I mean it just another thing in parenthesis that can happen at the end everything else goes on the same so it ends but it doesn’t dump and that’s because there’s a heck of a lot of code just for dumping the these files it’s uh it was starts on module 11 67 and the dumping and undone or presented in parallel first you have a dump module menu undamped 1 that’s it 2 loaded again and you can see the parallelism between those but they but the we sort the we saw at the available space list and do various things like that that that we just soon have commented out in in the production version of tech now this this what happens when you end that’s something there’s a there’s an endgame I’ve heard a lot of people who have lost pages you know they had a figure that was carried over to another page and at the end of their job and they and they never got to see that page somehow it ended in the typesetting system forgot about that one it was floating to his floating insertion and it had floated all the way out to the end and I and it’s possible in fact you see the right general output routines that that absorb information but don’t print it and and then they might change to another output routine and all kinds of things can happen so what are we supposed to do with something like this how are we going to know that the author routine hasn’t been stashing away this information for some future thing well what I do actually using module 1204 there so I called build page which which which is a procedure that it gets it empties everything out that’s already been contributed to the first page and calls the output routine if if it’s time to do so one of the things that would cause it to do that is if there’s a force pagebreak penalty of negative ten thousand or less is it would would cause the project out to occur however ship out doesn’t occur in empty pages now I mean output routine to get fired up except on empty pages well then I check and see if Paige head is equal to page tale in which case i’m happy now Paige head in page tail that that says how much is there anything left on the current page if not then I figure I’m done oh the output routine then didn’t leave any residue and and I figure I’m done otherwise i put in a null box and i contribute a null box whose width is the H size and I then I put on eject penalty of a forced break penalty and I do that up to 25 times until I get until finding the output routine has ended with with nothing there I hope that works if that doesn’t work I’ll have to think of something something else but I book but with luck that will work and get the last page out anyway that right now I propose that that’s really going to be the definition of how of the endgame for finishing up a tech job if I just put out a penalty all by itself then it wouldn’t necessarily invoke the outlet routine but by putting out of a box followed by this eject penalty then I I’m sure to invoke the output routine because putting out a box starts out the page and says that the top baseline skip is put on there and all the other things that the page is not empty is guaranteed to to invoke an output routine if I just made that box null box then I would get an output routine that has that has a column with a zero and this this has led to bad results when your output routine is trying to build up five columns of stuff and duck and you give it a couple of no boxes and so then these two columns stretch out over because you’ve got no box over here instead of being the right weight so I make this box that I put out there I make this box have the correct width but I make I think I have the wrong test here because I use because I should really not just page head equals page tail I should also check that something was shipped out because it because I the possible the output routine would have absorbed something and not shipped it out so I I’m going to make this no I’m gonna make this a little more complicated in order to fix that yeah that’s right nothing like trying to explain something to somebody it’s in order to realize that it’s not working mmm question what happens if you make and insert several inserts to the same box they all get concatenated together until one of them has to split and then future ones are are bypassed and carried over to the future that code has been fairly well checked out that’s what I spent most of my time on debugging and that’s in the two two parts called breaking breaking vertical lists in two pages in the previous one is on see breaking vertical is in the pages is part 43 and then the page builder is pic part 44 and also it spells it out in some detail but it’s accomplished this is what I called the research part of tech and and I think it’s in it’s in that in fairly type shape here I haven’t debugged the paragraph builder yet at the present time but but this part of the page builder I have gotten I think correct Arthur what happens if your output routine just takes whatever gets inbox dude to be 5 and chips it out will your eject remaining pages just keep on skewing out paper no it only it only does that see a ship out would only occur on an empty on an empty box and I cie I would want to also turn turn that off yeah now I got to find a good termination condition for this it works fairly well in the present text so all i have to do is convert that to the to this one was similar but not the same so I better do that again I remember going around about six times on the present tech to to get that to work Molly call them out put the problem is if you’re saying putting five columns on a page then and your output routine goes it has five steps to it and and so you finished the second column and then end came along what are you going to do and you want to give the output routine something to do for until it reaches a state where it actually does a ship up then I think we’re done maybe unless it gives me no and then it might put something back on the contribution list which would mean at least it still wants to be invoked again but that’s not solve the problem online so a question on that side of the house somebody said what about the availability of these tapes these tapes are going to be rented I suppose just like the previous tech classes were done and I’m going to try to get two copies of these tapes one to be kept at Stanford one to be kept in Providence will be the possession there’ll be the property of the tech users group please use your mic but I don’t like that kind of question how long do I expect before X is these kind of questions are forboden I mean that I as soon as I can as soon as I can soon as I can I’m having a vacation little too I’m going to collapse tonight yeah you were going to mention something about rounding on low resolution devices ah yes rounding on low resolution devices yet good thing we want to after after looking at at this problem for some time and discussion we think we have a fairly good solution to the question of how to how to make reasonably high quality on low resolution without an incitement and still at high resolution now you have a problem that dot I could say this way suppose we have a 10 point font my original 10 point font was was working on xgp printer who had it had a nice feature exactly 2 pixels per unit in the font so that so there were 36 pixels in a quad and all of the width were based on monotype widths so they were integer number of units and so everything in my ten point font was an integer number of pixels the N would be ten unit characters would be 20 pixels live now what about nine point then that meant that each of the each of the units in nine point font was one point eight pixels wide and so I’d be setting a word whatever the you know I what’s your favorite word wor d and the and my original implementation the very first one of tech i rounded for every character we’re so i computed the exact position where the character should start and then i rounded so that this nine points would eventually get the street you know these there will be a buildup and all of a sudden we’d go back one pixel wherever that would happen to have have happened to happen and so if word would occur here a little bit to the right the glitch of where the thing shifts would take place that still and yet another place now that wasn’t too satisfactory but we didn’t mind because we use mostly 10-point type and this was just for proof quality anyway but then we started to see that people actually had low resolution devices they wanted to send out on their on their letterhead they were set using us for correspondence and everything it was supposed to actually look look fairly reasonable even though it was a you know coming out of a low resolution device and then we said well okay a fraud designer can tune the design of letters so that each character is with is a is an integer number of pixels but then it’s not machine dipen is that machine independent because if you write the TFM filings and it’s only good on a pic on a machine that has a pixel width of a certain kind then it’s been how should he have the same font on another photo typesetter so what’s a good solution to have it having your cake and eating it too a theme that that tip now we can actually do this fairly well meanwhile we notice that there were that there were people writing DVI drivers here that didn’t know how I had rounded every character and they decided that they were don’t they they were going to only round at the beginning of the of a word and that started that looked pretty good you see they wherever you started then you would use the pixel width of the character and continue along with the pixel width until you got to a new a new age skill for something that would take you there so this was doing this this meant at the font designer even though the TFM file had true machine-independent widths in it the pics of the font designer could also tune it so that it would the sidebars would be nice for the spacing letters in a word now in tech we help we have kerning in order to improve the quality of the output so I don’t know I think maybe between R&D there’s a current i’m not sure but let’s suppose for the sake of our w and all i’m sure there is is a little kern that brings the w and all a little closer because i said i’m pretty sure it w because x no do and so a half a unit a closer spacing is is there in the in the DVI pile so between the set w and the set Oh command there’s a you know right x minus a few in the DVI file which brings the letters a little closer this meant that these algorithms that were that were starting at the beginning and going and then only doing a correction after glue would make this correction at the point of a current so we’d be setting along a ten-letter word and if i have a current right there then there would actually be a recalculation in route and the rounding error would be the glitch would occur at this point well as a result currents were causing the quality of the output to get worse instead of better they were intended there too to make refinements that would help but actually they were causing the rounding to her at that point and squatting at all well we don’t want to take the kearns out of the formal definition we want to use exactly the same TFM so that our lines will break the same when we were printing on the high resolution device we want tech to do all the calculations the same so what’s the answer on the DVI far on the answer is that we we round after we make a large jump in horizontal or vertical direction then we round otherwise we do all our calculations relatively so the the font so so when we’re not making a large skip and large skip is defined as a certain percentage of the current em in the font i think it was then then we will just stick with pixel width that are that come either in the pixel file or that we could get by rounding the character with two to an integer now the meta font programs have a char width command where you say that with the char width is in points and this might be w and then meta phone also has a charred device with command which is generally given as round of pixels times W something like that in the typical use of Metatron this is what we’ve been doing and and this device which goes into the pixel file or well it’s used to decide the width of the characters with its side bars now the actual width of the character we found in refining fonts we want to fiddle with this and not use this value exactly every time on the letter M for example it turned out that we if we wanted to get this business to be the same as this distance we would like to em to be 1 or 1 pixel more or 1 pixel less then we would calculate by taking 15 units and rounding to to the nearest pixel so we could make that kind of adjustment and then anyway that the width that’s actually there in the character file could be used for the but for the typesetting process the moral is then we have a register H and V for our horizontal and vertical coordinates in DPI units job and as you saw in the print out there H was large and salon then we also cape registers HH and VV and these are kept in pixels and updated locally and only do you set HH to be the rounded value of H when you’ve made a big jump and in the vertical direction and the problem was not for in a word but for fractions like one half we wanted one half to the spacing between here and here to be about the same no matter where they superior on the page and we chose the definition of a big jump so that this would not cause big jumps in a fraction like one half but but but so that forgetting from one line to the next line would be considered a big jump so all that all the vertical spacing in here is relative to into something that would be rounded the same in no matter where we started from sovv count so in other words we’re taking calculations like Vivi is set to round of V after big jump but it’s set to Vivi it’s set to okay suppose we’re doing a V is set to V plus a then we then if a is large we do bv set to round of V otherwise we set V V to V V Plus round of a around here I’m assuming it includes the factor for getting two pixels so here’s a relative calculation for small jumps and a big calculation to attend and that’s where the rounding error ought to accumulate in the big jumps because that’s what the eye isn’t going to see it so a simple solution but took us a while to find it now that’s that solution is is implemented in the DVI type program that week that we passed out as a model for how to how we propose to do this kind of typesetting you were mentioning the existence early er of an allocate function for things like dimensions and boxes and things like that is that going to be part of the basic format allocating function for dimensions and boxes I’m sorry when so that if you need a new dimension oh yeah oh thank you yeah basic is going to contain something like get font get count get demand and then it will return to you in a symbolic it will return to you a number that hasn’t been used before so that several people can be so if you want to define a box then you can that then you can get one I believe that it will be a rather simple minded macro it’s not going to keep a linked list of the available ones but it will probably do it soon look last in first out if you if you if you are take leaving them back in there again yawn I just want to say one thing about the rounding problem because we faced almost exactly writing the driver for our device well we did almost exactly the same thing except we would compare the size of the indicated motion in DVI with the size of the error that we developed and we tried we pick up the error only when the size of the indicated motion was somewhat larger than the accumulated error rather than using a pix dimension saying that if the motion is bigger than this will always pick up the error here we compare the two and so if you community a very large error over a word you would not necessarily pick it up all at once on the next space if that would wipe out the space that’s interesting you should talk about that maybe that will work on yeah okay we don’t we were hoping that the error wouldn’t would never get that large that they should we were assuming that this that the device width compared to the which would we would never really exceed would never any exceed 1 pixel or suddenly not to actually on our machine turns out you see one pixel entirely too well because we in fact has our first driver and do exactly what you had There with kerning and your dad currently notice when the current all of a sudden wasn’t there right yeah I I had a difficult time again with that were different no I guess it was different but in the tech manual that we printed on on the Dover I was trying to illustrate the what happens if you’d use kerning and and not use kerning with with the word and and the way it was rounding it was actually going the wrong way and I done current one was coming so I had to add a couple extra words of the text in order to get it in the right position on the page so that so that this what happened i I’ve never admitted this before also one other thing that sort of was curious about this when I first got into this I had a little I brought in my driver a little thing that would send out what is the error how much different is what tech thinks the width of the characters and what the character actually is and i was using your old computer modern fonts and i began to get the impression that dude tune them for a certain machine when I was getting half a pixel error on almost every other character coming along almost everything was the worst possible case hmm yeah okay well the currents were were you see ya see the Machine the resolution that I was assuming in my first design was 252 to the inch which is somewhat close to yours and my currents by a half a unit would be about a half a pixel yeah question here what’s the status of debugging on TV I type DVI type is it seems to be working but I just had DVI pile to test it on as of last saturday and so right now but right now I am willing to pay a dollar for every bug that for this to the first person finds a bug in DB I type I’m willing to I’m willing to pay a dollar for that and and I will go up to two dollars after a few months so if you really want to hold off and gamble on I thought you could but otherwise you get you if you think you’ve got one you could send it in and and gratefully y’all pay this yes could you give us an idea what your plans are for meta font plans for meta font arm are just to do for it as i did with tech go make a make a new version considering the what users experience has been to incorporate the what seems to be better ideas at that time we’re going to experiment with changing the changing the changing a few things we’re going to see if if conex would work as good as cubic splines we’re going to experiment with trying to find intersection between points we’re going to experiment with with well one thing that looks definitely we’re going to do is is make d draw with pen of size one to be very fat very efficient it’s terribly inefficient now and it seems to be a very important for lots of kinds of fonts like calligraphy calligraphers fonts so so that’s that’s going to go in as right now d drive means filling in between two curves if you have a if you have a pen that’s reasonably wide and you want to fill in between this curve in this curve meta font will draw enough things in between that so that given the thickness of the pen it’ll tend to fill in i think it gives a factor of 50 it figures the radius of these in it and it chooses these points so that they shouldn’t be more than so they should overlap and actually with a with a little fudge factor in there so that you got twice as much torrance as you as you which all have them so only if the curve real while we have a hole in there well so it fills in a bit this really crude method just reduces the filling in problem to a sequence of the other part of the other of the other things very slow now people have been wanting to Deidre and make very sharp images so that this pen is one pixel wide that means that I draw all of these things over and over again it’s very very slow to fill that all in and but it’s a trivial problem to fill in between one pixel why things you can say to yourself that problem well the the new marathon is going to not use the bit bit representation of the raster but it’s going to use run-length representation of the raster all in integer variables Pascal doesn’t have the convenient operations for four sets you can’t take the intersection of two sets or the union of two sets of ship the two sets the way i’ll go w could I don’t know why Klaus left it out but he did and so but anyway it’s probably leads to better algorithms where we work entirely with the Rays of integers to represent these these patterns inside the memory will be able to get by with memory that grows as order and instead of N squared with where n is the resolution so the coating will will do that near will be some changes to the language but I don’t want the language to get real real baroque there’s so many more things you can do with meta font and you could do it with tech even so I don’t I don’t plan to add labret control structures or data structures to meta find we’re making that will make it easy easier to use arrays but not record structures for example the the the target is that that i’ll be doing that you know you know winter quarter january that i’ll be working on that program my future plan is to have three books done that are going to be a series called something like computer type ography volume 1 2 and 3 and by one is tech volume 2 is marathon buying three is computer modern fonts and that’s the that my plan is that this will be my contribution to the to the what I know what I’ve learned about typography and I’ll feel justified at that point in in leaving the ball to other people too to see if any of those ideas are worth are worth carrying on or not i’m going to write problem for of the art of computer programming after volume 3 of computer typography and continue working on algorithms which which is something I know I do well Rilla you had a no you don’t have a comment Pookie Josh if the through meta font to generate a few characters how immediately you can type state agency because the spacing between the latest is very important so then later design doesn’t mean only suppose later but how does it look when you put it side-by-side word so when we when we design things with meta fun we have been having a new mode that we’ve been building into our format files called smoke mode and it prints out a rather large version of characters with corners on them as to where we where we currently designed it and then we’ll have the character image there and we call it smoke mode because this is the way people in the old days would make their fonts they would they would they would have to work of course at the actual size with their little files and get the letters and then they would take can they would take the smoke of a candle and and then and put it down on the paper and tri’s trial set until the thing looked right so our smoke proofs are things that we do we don’t work at that the real size though so we have to have these and we put these corners on so we can set several of them in a row and we go back and we look at it from from down the hall as far as we can go in order to see how it looks and until we get the something that seems to be good then we typeset a few words and and make make further Corrections at that time because the I plays very strict these things optically change when you when you bury the scale you have to you have to try to work at the true size but you have to also work at a large size when you’re when you’re doing the design this is all another story but very interesting one Joey a remarked on the same point that’s interesting at the mergenthaler front design group that are drawing shot I have a useful tool for that process you just described they keep a pair of binoculars which they use backwards ah so in about a 20-foot room that got a viewer yeah but this is it’s very important to get that to be able to see these things that that you can’t do otherwise and oh yes there’s a there’s a there’s a the subtleties in font design our are much underappreciated by by the by the world and I’m trying to use meta font to capture some of those subtleties into a program so that at least we can see in a precise language what they are and not just talk about them by hand waving the computer modern France are being criticized by people that I think are the best in the world at at these fine details and although I might I don’t have the right artistic temperament to design the most beautiful fonts I’m at least going to have the hooks in there that indicate that the right kinds of concepts and and the and and this should help the real artists of the world to to have to to to to indicate what what the new fonts should should include the kind of subtleties will will be recorded the intelligence of the font design will be in there not just the not just the drawings that’s my goal see what happens so that’s the look to the future now well I’m going to take one more comment from Arthur and then we’ll have to wrap this up it would be sometimes when you write documentation you want to look at it on a printed page where it’s all nicely typesetting everything but it also be nice to be able to look at it online are there any plans for having the output of tech be able to be read on a line printer or on a ordinary terminal yeah well right now we have DVI to data discs and DVI to Sun terminal working at Stanford the david juices thesis will be on interactive versions of tech where you see the thing immediately as you’re typing it in and I don’t have I don’t know right now of any anybody who has taken tech output to a line printer there was an experiment fairly successful of another language to line printer in was at Manchester I think it was and there’s a report about that in our library I can’t remember the ants tea or something no I remember the name of the author but the but there has but they would set things on a few you had to get used to reading the output but you could you could you could I mean it somehow indicated even on a line printer of what the bold and the metallic were in a form that people felt they had for for approving I i find that tech users get to and after after a little experience that they can see in their mind what what’s their typing pretty well it’s only that they won’t know how many lines of paragraph is gone is going to justify to but they they’ll they’ll have a fairly good idea as I typing a math formula that the squint that’s going to work out alright it’s something like that the you into a newspaper office to see the people who types of the classified ads and they are working with a very primitive terminal has only uppercase letters on it and ask them well wouldn’t you like to be able to see the bold face on this see things centered metallic and in different font says they’re going to appear and they say why we know it’s gonna look like they do this all day long and there’s no problem they don’t need that kind of feedback but and so a user who the first day wants to see what what an integral sign is going to look like and where subscripts are going to go and things that is type mean but the second day you just type in when you know it’s be an integral and can look up all right but with high probability you get a picture of what that’s going to be just this need for for quick visualization isn’t anymore the same as the initial user but it’s the but it you still have it at the end when you’re making final polishing on a manuscript because all of a sudden somebody’s pointed out in error on page 38 and you’ve got to fix that paragraph and you want to make sure that your fix doesn’t make that paragraph any longer so that it’s not going to mess up page 39 at that point you want to interact the version of techna see and you play with that paragraph until you got it not only correct but also the same number of lines as before so when I was doing volume 2 I was very heavily using our xgp synthesizer program where i would type set a paragraph and then i would check and see if it was coming out ok I did that about 20 times like at least for last minute Corrections not only errors but new you know late breaking news and things like that that I wanted to get in the book and that so I I really believe that this is a necessary thing that more software should should be device to handle I also look forward to programs that will that will display modules in a web system that as you’re debugging it will just form at the ones here you need at the time each module is really formatted pretty much independently of all the other ones and self-contained unit and when I spent a terrific amount of time to read to reweave a whole whole listing that’s because that’s because I’m producing a thick listing but if I’m only going to look at a few pages of that listing then I then selectively I could be pooping only a few parts a lot of different software can be imagined that would make such system that we’ve got now that much more powerful yeah great deal needs to be done yet and I’m well I’m thrilled to see so many people listening to lectures that we have this experiment going now in in portable program I don’t know of any other instance of where where there’s going to be so many people understanding a program of this complexity so this is this is a new territory and I think we’re all in it together and we should have some exciting times ahead with that well you have a final comment what is this I’m never going to be able to on your your weave program with your tech 82 I I just have been glancing through it I noticed that you’ve managed not to break any of your modules on page breaks is did I miss that or oh there’s probably somewhere in the DVI description where there’s so many optical and said it does that but I tried to keep modules short or possible but the but there’s a there’s a ragged bottom in the weave output and that’s what there’s a easy way to do that with tech to get ragged bottom will be explained in the user manual Oh have a good

That's the end of this page. If you have any feedback about anything on this site, you can contact me here. To go back to the top-level page (if you are not on it already), click here.